【发布时间】:2010-11-02 10:36:00
【问题描述】:
选择邮政编码、纬度、经度、
截短(
(度(acos
(罪(弧度(lat))
*
罪(弧度('.$纬度。'))
+
cos(弧度(lat))
*
cos(弧度('.$纬度。'))
*
cos( 弧度(lng - ('.$longitude.')))
)
)
* 69.172), 2)
作为距离
FROM myData
此查询计算距离(以英里为单位)。但是当我在谷歌地图上检查相同纬度和经度的距离时,我的结果不匹配。如果距离在 10 英里左右,那么我的结果有点准确,但超过了它就会出错(例如,我的结果显示 13 英里,而谷歌显示相同邮政编码值的 22 英里)
我从http://forums.mysql.com/read.php?23,3868,3868#msg-3868得到这个查询
我怎样才能让它准确。有任何想法吗? 感谢您的帮助。
更新
我在 PHP 中尝试了@Blixt 代码。挑选了 2 个示例邮政编码及其经纬度
//B28 9ET
$lat1 = 52.418819;
$long1 = -1.8481053;
//CV5 8BX
$lat2 = 52.4125573;
$long2 = -1.5407743;
$dtr = M_PI / 180;
$latA = $lat1 * $dtr;
$lonA = $long1 * $dtr;
$latB = $lat2 * $dtr;
$lonB = $long2 * $dtr;
$EarthRadius = 3958.76; //miles
echo $distance = $EarthRadius * acos(cos($latA) * cos($latB) * cos($lonB - $lonA) + sin($latA) * sin($latB));
结果:
我的应用 - 12.95 英里
谷歌 - 17.8 英里
任何想法如何正确?
【问题讨论】:
-
您确定 Google 在计算距离时没有考虑道路等因素吗?
-
hmm .. 可能是因为这个。我在谷歌地图上使用获取路线进行了检查。有什么公式可以得到类似于 Google 的东西吗?
-
没有公式可以考虑道路,除了某种平均鸟类距离/行驶距离比率,99% 的时间都是错误的。在这种情况下,您需要使用一个 API 来获取道路距离。查看 Google Maps API:code.google.com/apis/maps