使用纬度和经度的40公里半径[重复]

Posted

技术标签:

【中文标题】使用纬度和经度的40公里半径[重复]【英文标题】:Radius of 40 kilometers using latitude and longitude [duplicate] 【发布时间】:2012-01-13 12:07:35 【问题描述】:

可能重复:Radius of multiple latitude/longitude pointsdistance calculations in mysql queriesselect within 20 kilometers based on latitude/longitude

我有一个存储数据的 MyISAM 表。数据包括谷歌地图的纬度和经度。我想要实现的是选择样本经纬度40公里半径范围内的所有物体。

谢谢!

【问题讨论】:

你去***.com/questions/27928/… Radius of multiple latitude/longitude points 的可能重复项(以及其他大约 25 个,请参阅“相关”侧边栏。这个看起来完全一样:***.com/questions/6919661/…) 试试这个类,效果很好:opengeodb.giswiki.org/wiki/GeoClass 【参考方案1】:

我使用这个查询来获取$radius 内的所有点,围绕$lat/$lng

SELECT
    *,
    ( 6371 * acos( cos( radians($lat) ) * cos( radians( `lat` ) ) * cos( radians( `lng` ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( `lat` ) ) ) ) AS distance
FROM `positions`
HAVING distance <= $radius
ORDER BY distance ASC

6371 是地球半径 im km。而且我还没有发明它: http://code.google.com/intl/en/apis/maps/articles/phpsqlsearch.html https://developers.google.com/maps/articles/phpsqlsearch_v3#findnearsql(编辑:网址已更改)

【讨论】:

如果我必须以英里为单位使用,那么我必须更改 (6371) 吗?? 以英里为单位的地球半径是3959 - 只需将数字替换为该数字,您的结果将以英里而不是公里为单位。 @DerVO 查询中的 $lat 和 $long 变量的格式是什么? @AshifShereef 从 -180 到 +180,例如$lat = -74.016617; $lng = 40.747933; 哈德逊河中的任意点。 @AshifShereef 并且 - 至少我认为 - 我已经回答了你,它是十进制度 (en.wikipedia.org/wiki/Decimal_degrees)

以上是关于使用纬度和经度的40公里半径[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用经度和纬度选择半径内的对象[重复]

通过纬度和经度从特定半径获取用户[重复]

查找具有纬度和经度的记录[重复]

通过谷歌地图获取我当前位置10公里半径内所有位置的纬度和经度(使用PHP)

2个小数点之间的距离[重复]

显示用户在PHP中当前位置的10公里半径范围内的用户