MySQL 位置搜索半径内的 Google map - 为什么我得到错误的距离?

标签 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

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

最佳答案

你不应该降低数字。这个map of lat/lon lines加利福尼亚州显示每个十进制数字都占相当大的距离。该报还称,

With the current zoom capabilities of Google Maps, you should only need 6 digits of precision after the decimal.

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

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 表列。祝你好运!

关于MySQL 位置搜索半径内的 Google map - 为什么我得到错误的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983982/

相关文章:

MySQL:只抓取只有一行的用户?

php - 使用动态字段更新 MySQL

mysql - 如何获得与组组合的排序列表

android - 绘制方向并通过解析方向api overview_polyline

javascript - 删除以前的标记(谷歌地图)

mysql - 向有值的用户插入一行

php - Mysql语句,有没有办法改进这个?

sql - postgresql函数混淆

sql - 下一个和上一个记录

javascript - 如何使用 Jquery 和 Json API 通过谷歌地图 API 使用坐标显示城市名称?