计算邮政编码在PHP中的距离
我从这个页面抓取了邮政编码的数据库和他们的langitudes /纬度等等。 它有以下几个领域:
ZIP,纬度,长度,城市,州,县,邮编
数据是在一个文本文件,但我把它插入到MySQL表中。 我现在的问题是,我如何利用上面的字段来计算用户可以在网站上input的两个邮政编码之间的距离? 在PHP中的工作代码将不胜感激
您也可以尝试点击networking服务来计算距离。 让别人去做重任。
这是迈克的答案,一些神奇的数字注释。 对于我来说,对于一些testing数据来说它似乎工作正常:
function calc_distance($point1, $point2) { $radius = 3958; // Earth's radius (miles) $deg_per_rad = 57.29578; // Number of degrees/radian (for conversion) $distance = ($radius * pi() * sqrt( ($point1['lat'] - $point2['lat']) * ($point1['lat'] - $point2['lat']) + cos($point1['lat'] / $deg_per_rad) // Convert these to * cos($point2['lat'] / $deg_per_rad) // radians for cos() * ($point1['long'] - $point2['long']) * ($point1['long'] - $point2['long']) ) / 180); return $distance; // Returned using the units used for $radius. }
这可以用math来完成。
function calc_distance($point1, $point2) { $distance = (3958 * 3.1415926 * sqrt( ($point1['lat'] - $point2['lat']) * ($point1['lat'] - $point2['lat']) + cos($point1['lat'] / 57.29578) * cos($point2['lat'] / 57.29578) * ($point1['long'] - $point2['long']) * ($point1['long'] - $point2['long']) ) / 180); return $distance; }
检查Haversine公式计算两点之间的大圆距离。 可以在这里find更多的样本
Haversine公式:
- R =地球半径(平均半径= 6,371km)
- Δlat= lat2-lat1
- Δlong= long2-long1
- a = sin 2(Δlat/ 2)+ cos(lat1).cos(lat2).sin 2(Δlong/ 2)
- c = 2.atan2(√a,√(1-a))
- d = Rc
(注意angular度需要以弧度传递给trig函数)。
在你的拉链表中,你需要获得你想要获得距离的两个点的坐标(lat,long)。
然后,您可以直接在SQL或PHP中计算距离。 这篇文章概述了这两种方法:
示例中的计算基于本主题中已经讨论的公式。 它提供了英里和公里的地球半径,所以它可以让你得到两个单位的两点之间的距离。
上面的链接是伟大的,因为计算的方法不包括任何幻数,只是地球的半径!