【发布时间】:2012-10-26 23:55:02
【问题描述】:
我正在使用 hasrsine 查询来提取最接近移动应用提供的纬度/经度的位置。
查询如下所示:
SELECT *,(((acos(sin(($latitude *pi()/180)) * sin((`lat`*pi()/180))+cos(($latitude *pi()/180)) * cos((`lat`*pi()/180))* cos((($longitude - `lon`)*pi()/180))))*180/pi())*60*1.1515) AS dist_x
FROM `work_places`
HAVING dist_x <= '1'
ORDER BY dist_x ASC
LIMIT 10
这工作得很好,我得到的正是我应该得到的位置。
问题在于将 dist_x 转换为用户可读的内容。现在,假设 dist_x 读取为:0.00996273036944(floatval 和字符串显示相同,因此可以正确转换)
由于查询是在 1 英里范围内搜索,因此我尝试将其转换为英尺,因此我将 dist_x 除以 5280。
$distance = (float)( $dist_x / 5280 );
我得到的是 $distance = 1.88688075179E-6
我做错了什么?
【问题讨论】:
-
换算系数略有错误:1852 m(海里)/1609.344 m(标准英里)~1,1508。只是一个小问题......
-
我不明白你在哪里看到这些值...
-
在 SELECT 语句的末尾有“pi())*60*1.1515”。您将得到弧度的结果,将其转换为度数,然后乘以 60 转换为弧分。一角分是海里,海里是 1,1508 标准英里。
-
顺便说一句,谢谢...我将计算从 *5280 更改为 *6076.12,这要准确得多。
标签: php floating-point distance haversine