计算邮政编码在PHP中的距离

我从这个页面抓取了邮政编码的数据库和他们的langitudes /纬度等等。 它有以下几个领域:

ZIP,纬度,长度,城市,州,县,邮编

数据是在一个文本文件,但我把它插入到MySQL表中。 我现在的问题是,我如何利用上面的字段来计算用户可以在网站上input的两个邮政编码之间的距离? 在PHP中的工作代码将不胜感激

您也可以尝试点击networking服务来计算距离。 让别人去做重任。

https://www.zipcodeapi.com/API#distance

这是迈克的答案,一些神奇的数字注释。 对于我来说,对于一些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中计算距离。 这篇文章概述了这两种方法:

http://dev.strategystar.net/2011/10/mysql-php-get-distance-between-two-coordinates-in-miles-kilometers/

示例中的计算基于本主题中已经讨论的公式。 它提供了英里和公里的地球半径,所以它可以让你得到两个单位的两点之间的距离。

上面的链接是伟大的,因为计算的方法不包括任何幻数,只是地球的半径!