当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《计算PHP中邮政编码之间的距离》经验,为你挑选了4个好方法。

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

ZIP,LATITUDE,LONGITUDE,CITY,STATE,COUNTY,ZIP_CLASS

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



1> Adam Bellair..:

这是迈克的答案,其中包含一些神奇数字的注释.对于一些测试数据,它似乎对我来说很好:

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.
}



2> 小智..:

它可以用数学来完成......

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;
}


你能举一个参考这个计算的地方吗?
太多的魔法数字,右边的压痕太多了!

3> brendan..:

您也可以尝试点击Web服务来计算距离.让其他人做繁重的工作.

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


这将适用于2个zipcodes,但想象一下,尝试从数据库中的数千条记录中选择给定邮政编码的前100个最近位置:)

4> Paul Dixon..:

查看用于计算两点之间的大圆距离的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函数).

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有