我想计算两个纬度和经度集之间的距离。
我的问题
我在桌子上有2500多个邮政编码,我有10000多个商店,每个商店和邮政编码都有他们的lat,lng。
每家商店的送货距离均为KMS。
我想在名为 shop_delivery_zips 的表格中保存商店的所有邮政编码,这些邮政编码都在其投放距离内。我不能在下订单时使用地图,因为商店可能不希望在每个拉链的交货距离范围内交货。
所以,我第一次想通过检查他们的交货距离在 shop_delivery_zips 表中插入数据。
我的解决方案
首先,我认为我会编写一个代码,该代码将转到每个拉链代码并计算商店lat,lng和zip lat,lng之间的距离,并将数据保存在 shop_delivery_zips 表中,但是如果我这样做,然后我必须每次打电话给谷歌apis,如果我做我们所有的数据,那么我必须做2500 * 10000谷歌api电话,谷歌不允许在一天,所以我不能选择这些选项。
所以,我想知道有没有办法计算两个lat,lng之间的距离。可能是通过计算谷歌使用来计算相同的。如果您知道,请建议我解决方案或任何其他解决方案。
如果不清楚,请告诉我。
答案 0 :(得分: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 :(得分:1)
虽然@tbedner在数学上有正确的解决方案,但不想要对列表中的每个位置执行此计算,因为数学非常重要。
首先定义一个简单的边界框,例如:
lat BETWEEN $min_lat AND $max_lat
AND
lng BETWEEN $min_lng AND $max_lng
哪个非常简单并且可以轻松利用索引,然后您可以对位于框内的小得多的位置进行复杂的数学运算,以找到您想要的半径范围内的位置