20

假设我有一个包含坐标的行表。

仅拉取位于另一个坐标半径内的坐标行的最佳方法是什么?

为了简化我的问题,我给出以下示例:

Table like:
Columns: Latitude, Longitude.
Row1:    23.44444  24.55555
Row2:    32.44444  28.22222
Row3:    35.11111  32.12345

例如,在 SQL 语句中,如何获取 Row3 半径内的坐标行?

4

3 回答 3

32

这篇文章展示了如何在 SQL Server 中执行此操作。

以下是如何在 MySQL 中执行此操作:

SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + 
         COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) * 
         PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC
于 2009-12-13T11:24:54.270 回答
1

看起来距离公式是:

D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) +
                       cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi / 180) 
                 )  * 180 / pi)

其中 Y 和 Z - 是您要测试的每一行的点,y 和 z - 是示例行的点。

所以你可以做这样的事情:

  1. 选择表中的每一行并获取其lonlat
  2. 从此应用查询,更改$lon$lat到数据形式点 1。

我不知道如何在访问中进行此操作。但这种方式既狭窄又缓慢。

于 2009-12-13T11:55:24.510 回答
0

你说的半径是什么意思?你想通过一段距离,比如 5 英里,然后找到 x 行 5 英里范围内的所有行吗?

如果是这样,请检查一下http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

于 2009-12-13T11:27:59.207 回答