我抓住了一个数据库的邮政编码及其langitudes/纬度地区,从这个等等 这页.它得到了以下领域:

拉链、纬度、经度、城市、国家、县、ZIP_CLASS

数据是文本文件,但我插入一个MySQL表。我现在的问题是,如何才能利用领域上的计算之间的距离两个邮政编码,用户可以进入的网站上?工作码在PHP以理解

有帮助吗?

解决方案

您还可以尝试点击网络服务来计算距离。让其他人做重担。

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

其他提示

这是迈克对魔数的一些注释的回答。对于我来说,一些测试数据似乎对我有用:

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

检查出来的 半正矢式 用于计算伟大的圆圈之间的距离两点。一些更多的样品中可以找到 在这里,

半正矢的公式:

  • R=地球半径(平均半径=按6,371公里计算)
  • Δlat=lat2−lat1
  • Δlong=long2−long1
  • a=sin2(Δlat/2)+cos(lat1).cos(lat2).sin2(Δlong/2)
  • c=2.atan2(√a√(1−b))
  • d=R.c

(注意这一角度需要在弧度通过以触发功能)。

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top