我从这个页面中抓取了一个邮政编码数据库及其经纬度等 .它有以下字段:
ZIP,LATITUDE,LONGITUDE,CITY,STATE,COUNTY,ZIP_CLASS
数据在文本文件中,但我将其插入MySQL表中.我现在的问题是,我如何利用上面的字段来计算用户可以在网站上输入的两个邮政编码之间的距离?PHP中的工作代码将不胜感激
这是迈克的答案,其中包含一些神奇数字的注释.对于一些测试数据,它似乎对我来说很好:
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. }
它可以用数学来完成......
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; }
您也可以尝试点击Web服务来计算距离.让其他人做繁重的工作.
https://www.zipcodeapi.com/API#distance
查看用于计算两点之间的大圆距离的Haversine公式.这里可以找到更多样品
Haversine配方:
R =地球半径(平均半径= 6,371km)
Δlat= lat2- lat1
Δlong= long2- long1
a =sin²(Δlat/ 2)+ cos(lat1).cos(lat2).sin²(Δlong/ 2)
c = 2.atan2(√a,√(1-a))
d = Rc
(注意角度需要以弧度表示才能传递给trig函数).