计算两个lat lng之间的距离,没有任何api

问题描述 投票:-1回答:2

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

我的问题

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

每家商店的交货距离均以KMS为单位。

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

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

我的解决方案

首先,我想我会编写一个代码,它将转到每个拉链代码并计算shop lat,lng和zip lat,lng之间的距离,并将数据保存在shop_delivery_zips表中,但如果我这样做,那么我必须调用谷歌apis每次,如果我做我们所有的数据,那么我必须做2500 * 10000谷歌api电话,谷歌不允许在一天,所以我不能用这些选项。

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

如果有什么不清楚,请告诉我。

php google-maps distance zipcode google-distancematrix-api
2个回答
3
投票

我知道这个解决方案可以根据需要进行计算(取自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';

那是你在找什么?


1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.