假设我有一个包含坐标的行表。
仅拉动另一个坐标半径的坐标行的最佳方法是什么?
为了简化我的问题,我给出了以下示例:
Table like:
Columns: Latitude, Longitude.
Row1: 23.44444 24.55555
Row2: 32.44444 28.22222
Row3: 35.11111 32.12345
在SQL语句中,如何获取Row3半径内的坐标行?
答案 0 :(得分:30)
此post显示了如何在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
答案 1 :(得分: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 - 是示例行的点。
所以你可以做这样的事情:
lon
和lat
。$lon
和$lat
更改为数据格式第1点。我不知道如何在访问中进行此操作。但这种方式和海峡一样缓慢。
答案 2 :(得分:0)
你在半径范围内是什么意思?你想通过一段距离,比如说5英里,找到第x行5英里范围内的所有行吗?
如果是http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx
,请查看此信息