谷歌地图半径范围内的MySQL位置搜索 - 为什么我的距离错误?

时间:2014-06-01 20:07:51

标签: mysql sql google-maps

我正在尝试查询名为'stockists'的MySQL表,以返回给定半径内的任何位置。该表保存每个记录的纬度和经度,我已经测试了每个记录以检查位置/坐标是否正确。

目前表中只有3个测试位置,全部位于搜索坐标的20英里范围内,距离最近距离仅5英里,但查询返回的距离均超过60英里。不正确的顺序。

我的测试搜索位置的坐标是51.690495,-3.780315。

阅读以下文章后:https://developers.google.com/maps/articles/phpsqlsearch_v3 我得出结论,我需要对两个坐标进行处理以使我的数字与给定的例子匹配(即51.690495,-3.780315变为51和-3)但我不确定这是否正确。

我的查询如下:

SELECT id, company_name, floor(( 3959 * acos( cos( radians(51) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-3) ) + sin( radians(51) ) * sin( radians( lat ) ) ) )) AS distance FROM stockists HAVING distance < 70 ORDER BY distance LIMIT 0 , 20

如果有人能指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

你不应该把数字放在一边。加利福尼亚州的这个map of lat/lon lines显示每个十进制数字占据相当远的距离。该报还说,

  

使用Google地图的当前缩放功能,您应该只   小数点后需要6位精度。

我会尝试使用确切的值,看看是否有效。如果没有,请尝试使用以下公式。我过去曾经使用它,所以我知道它有效。

SELECT id, company_name, 3956*2*ASIN(SQRT(POWER(SIN((yourTestLat - Latitude)*pi()/180 / 2), 2) + COS(yourTestLat * pi() / 180) * COS(Latitude * pi()/180) * POWER(SIN((yourTestLon - Longitude)*pi()/180 / 2),2))) AS distance FROM stockists HAVING distance < 70 ORDER BY distance LIMIT 0 , 20

此处yourTestLat,yourTestLon是您的测试数字(51.690495,-3.780315,未舍入),纬度,经度是包含表格位置的SQL表格列。祝你好运!