我有问题试图通过SQL语句向用户返回最近的位置。为了测试我使用的是完全相同的坐标,这里是我有:测量两个纬度/经度点之间的距离
SQL:
SELECT `companies`.`customerName` ,
(3959 *
ACOS(
COS(
RADIANS(37.367485) * COS(RADIANS(`locations`.`gps_lat`)) *
COS(
RADIANS(`locations`.`gps_lng`) - RADIANS(-77.399994) +
SIN(RADIANS(37.367485)) * SIN(RADIANS(`locations`.`gps_lat`))
)
)
)
)
AS `distance`
FROM `locations`
JOIN `companies` ON `locations`.`co_id`
HAVING `distance` > 25
ORDER BY distance
LIMIT 0 , 10
结果:
| customerName | distance |
| SOME COMPANY | 1914.41747964854 |
locations
表值:
gps_lat | gps_lng
37.367485 | -77.399994
我使用的示例从Google,我查了公式几次,我似乎无法拿出我哪里错了。任何帮助表示赞赏。
编辑:
由于人们似乎对我有些困惑知道我在做什么:
的>
被取代,以产生一个结果,1914
明显大于25
。
此应用程序将用户坐标从Android应用程序传递到我们的Web服务器。纬度和经度将从$_GET
值拉出并从公司在我们的网页服务器MYSQL数据库交叉引用。
上面的语法只是我检查MySQL工作台我的SQL语句。显然,我正在寻找一个零值结果。
如果你想在最近的地方,为什么你限制它“距离> 25“?我做了 –
,返回零结果。注意它给我的距离高于 – jnthnjns
根据您使用的RDBMS,可能会有相当简单(和更快)的方式来执行此操作。例如:[MySQL](http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html),[SQL Server](http://msdn.microsoft.com/en-us/ library/bb933876%28v = sql.105%29.aspx),[PostgreSQL](http://postgis.refractions.net/)。 –