在网上学习了根据经纬度计算距离的代码,很多的例子。特整理一份并且已经验证。
PS :
1 、返回的结果单位 m 。
2 、测试 Google 地图经纬度和百度地图经纬度差 1m 左右。
详情地址: http://blog.mofeiwo.com/?p=408
欢迎指导。
![]() | 1 fising 2016-01-11 14:35:07 +08:00 这些不都是很成熟的东西了么 |
![]() | 3 imxz 2016-01-11 14:54:02 +08:00 你可能没有考虑地球并不是一个完美的圆的问题。经纬度转距离跟所在位置是有关的。 |
5 BOYPT 2016-01-11 15:02:11 +08:00 ![]() 楼主辛苦了 要是我的话,直接 google 搜索几个词"php distance longitude latitude" 第一个结果就是 https://www.geodatasource.com/developers/php |
![]() | 7 mofeiwo OP @BOYPT 。测试了两个方法。发现 https://www.geodatasource.com/developers/php 方法返回的结果不对。 使用的百度坐标是 118.703006,30.071796,118.834940,30.140164 。分别为龙须山和蓝天凹。 从百度地图返回的距离是 14.9KM 左右。 www.geodatasource.com 中的方法返回的是 0.9m 。 文章中的方法返回的是: 14.8KM 。 |
8 BOYPT 2016-01-11 16:32:10 +08:00 @mofeiwo 那可能你算法更准吧,按你的数据,我用 geo 的程序结果是: echo distance(118.703006,30.071796,118.834940,30.140164, "K"); //15.119024532788 KM 0.9 其实是 statute miles ,不是米。 |
9 BOYPT 2016-01-11 16:35:28 +08:00 误差应该出在英里和公里的转换上, geo 的算法是以英里为基准的魔数 1.1515 ,而楼主的魔数 6378.137 是基于公里的;因此在公里为单位上,楼主的结果更准确;而如果在英里单位 i ,应当 geo 的更准了; 其实代码都一样。 |
![]() | 10 hahasong 2016-01-11 16:37:51 +08:00 已经成熟的算法,网上大把,前几天刚看了一个。三角函数计算很消耗性能,有种优化的方案是只用一个 cos ,但是对精度几乎没有影响 |
![]() | 11 seki 2016-01-11 16:39:21 +08:00 haversine 公式嘛 |
![]() | 12 mofeiwo OP @BOYPT 地址中方法 distance($lat1, $lon1, $lat2, $lon2, $unit)。经纬度写反了。 按照你的写法返回结果 15.119024533086KM 。 两个方法计算方式不一样。不知道其他的情况哪个更准确了。 |
![]() | 15 Plumes 2016-01-11 16:59:49 +08:00 sin , cos 这些最好是使用泰勒级数展开吧,取到 o(x^3) 就可以了 |
17 ty0716 2016-01-11 22:17:59 +08:00 这种距离没啥意义,计算实际路线到达距离才是正解 |
![]() | 19 NCE 2016-01-12 09:06:33 +08:00 我觉得很有意义。 |
![]() | 20 NCE 2016-01-12 09:07:09 +08:00 再就是,百度的坐标并不是正规的经纬度,,,这个不要和谷歌的搞混。 |