我可以选择行的共同点在哪里吗?目标坐标x英里? (mysql邻近搜索)

时间:2010-06-24 17:18:47

标签: php mysql google-maps geospatial spatial

在Stack Overflow上有一些像这样的问题,但因为我找不到任何足够相似的问题让我跟随。

我希望从db中选择距目标x英里的行。

示例表列:

| city_name(varchar) | lat(decimal) | lon(decimal) |

查询效果我正在寻找(使用php或mysql)

$target_lat = ;
$target_lon = ;
"SELECT table.city_name WHERE (table.lat,table.lon) LESS THAN 20 MILES FROM ($target_lat,$target_lon")

显然我不希望查询采用这种结构! (我从未在mysql中使用Pi等...)

4 个答案:

答案 0 :(得分:3)

听起来你正在寻找mySql的地理空间包。这里列出的功能允许在两个纬度/长点之间进行距离检查。请记住,由于地球的曲率,常规距离计算不适用于纬度/经度。 =)

http://forge.mysql.com/wiki/GIS_Functions

答案 1 :(得分:1)

答案 2 :(得分:0)

你会在谷歌搜索“mysql radius search”

中找到许多代码片段

这里复制它们有点太长了。

修改:http://spinczyk.net/blog/2009/10/04/radius-search-with-google-maps-and-mysql/

答案 3 :(得分:0)

毕达哥拉斯定理指出,直角三角形的斜边长度的平方等于另外两边的平方和。

C^2 = A^2 + B^2
C = SQRT(A^2 + B^2)

在这种情况下,其他边的长度由lat值和long值的差值决定。在短距离内,这将给你一个非常好的近似。但是,这仍然没有给你英里,这是一个更加困难的转换,因为lat / long和miles之间没有固定的关系。相反,经度之间的距离随纬度的变化而变化。