【问题标题】:Calculate distance between two lat lng without any api计算两个 lat lng 之间的距离,无需任何 api
【发布时间】:2017-12-29 22:36:38
【问题描述】:

我想计算两个经纬度集之间的距离。

我的问题

我在一张桌子上有 2500 多个邮政编码,我有 10000 多家商店,每个商店和邮政编码都有它们的 lat、lng。

每个店铺在KMS中都有自己的配送距离。

我想将位于送货距离内的商店的所有邮政编码保存在名为 shop_delivery_zips 的表中。我在下订单时无法使用地图,因为商店可能不想在其送货距离范围内的每个拉链处送货。

所以,我第一次想通过检查他们的交货距离将数据插入到 shop_delivery_zips 表中。

我的解决方案

首先,我想我会编写一个代码,该代码将转到每个邮政编码并计算 shop lat、lng 和 zip lat,lng 之间的距离,并将数据保存在 shop_delivery_zips 表中,但如果我这样做了,然后我必须每次都调用 google api,如果我对我们所有的数据都这样做,那么我必须进行 2500*10000 google api 调用,而谷歌不允许在一天内调用,所以我可以'不要选择那些选项。

所以,我想知道有什么方法可以计算两个 lat,lng 集之间的距离。可能是由google使用的计算方法来计算的。如果您知道,请建议我该解决方案或任何其他解决方案。

如果有什么不清楚的地方请告诉我。

【问题讨论】:

    标签: php google-maps distance zipcode google-distancematrix-api


    【解决方案1】:

    我知道这个解决方案可以根据需要进行计算(取自https://github.com/shafiqpab/distance-between-two-addresses-google-maps-api-php/blob/master/index.php):

    //Calculate distance from latitude and longitude
    $theta = $longitudeFrom - $longitudeTo;
    $dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) +
    cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) *
    cos(deg2rad($theta));
    $dist = acos($dist);
    $dist = rad2deg($dist);
    $miles = $dist * 60 * 1.8515;
    $unit = strtoupper($unit);
    // for units in KM
    $kilometers = round($miles * 1.609344, PHP_ROUND_HALF_UP).' km';
    

    这就是你要找的吗?

    【讨论】:

      【解决方案2】:

      虽然@tbedner 在数学上具有正确的解决方案,但您确实希望对列表中的每个位置执行此计算,因为数学非常重要。

      首先你定义一个简单的边界框,例如:

      lat BETWEEN $min_lat AND $max_lat
      AND
      lng BETWEEN $min_lng AND $max_lng
      

      这非常简单并且可以轻松地利用索引,然后然后您可以对框内的小得多的位置子集进行复杂的数学运算,以找到您想要的半径内的位置.

      【讨论】:

      • 那么,我应该先知道商店的送货距离吗?你能用一个例子解释一下,或者稍微解释一下答案。真的很有帮助
      猜你喜欢
      • 2014-12-10
      • 1970-01-01
      • 2017-05-05
      • 2018-05-20
      • 2016-06-15
      • 2014-04-04
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      相关资源
      最近更新 更多