使用纬度和经度的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公里半径[重复]的主要内容,如果未能解决你的问题,请参考以下文章