繁体   English   中英

计算PHP中邮政编码之间的距离

[英]Calculating distance between zip codes in PHP

我从这个页面中抓取了一个邮政编码数据库及其经纬度等。 它有以下字段:

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函数)。

在您的拉链表中,您需要获取要获得距离的两个点的坐标(纬度,长度)。

然后,您可以在SQL中或使用PHP计算距离。 这篇文章概述了这两种方法:

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

示例中的计算基于此线程中已讨论的公式。 它以英里和公里为单位提供地球半径,因此它可以让您获得两个单位中两点之间的距离。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM