1

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

4 回答 4

3

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

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

于 2010-06-24T17:29:32.563 回答
1

我发现这很棒而且很容易理解

http://code.google.com/apis/maps/articles/phpsqlsearch.html

于 2010-06-24T20:11:01.107 回答
0

你会在谷歌搜索“mysql radius search”找到很多代码片段

他们在这里复制有点太长了。

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

于 2010-06-24T17:25:33.770 回答
0

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

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

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

于 2010-06-24T17:37:19.673 回答