PHP - 计算纬度和&经度接近50公里

时间:2016-06-01 20:35:23

标签: php google-maps

我有这些数据:

  

纬度:50.223137

     经度:18.679558

现在我想在PHP中创建一个特殊函数,它能够计算最小lat和amp;长期和最大的lat&amp;很长,超过50公里。最后我想得到4个参数,我想在简单的SQL查询中使用这些参数:SELECT * FROM table WHERE lat >= [min_lat] AND lng >= [min_lng] AND lat <= [max_lat] AND lng <= [max_lng];

我知道,我只能使用一个SQL查询:latitude/longitude find nearest latitude/longitude - complex sql or complex calculation但我现在在我的数据库中有20.000.000条记录,但它仍然在成长。我还必须在我的sql数据库中搜索其他东西,所以我想基于PHP计算所有内容,然后以这种方式搜索sql:SELECT * FROM table WHERE lat >= [min_lat] AND lng >= [min_lng] AND lat <= [max_lat] AND lng <= [max_lng];因为我认为 - 这是更快的方式。

我也发现了这个函数:https://www.geodatasource.com/developers/php这很棒,但我希望以其他方式创建该函数 - 我想声明为参数:lat,lng和distance(例如:50 km)。最后我想得到4个参数 - min_lat,min_lng,max_lat,max_lng。

有人可以帮我创建这个功能吗?

感谢。

1 个答案:

答案 0 :(得分:5)

您可以尝试使用此代码。做一些基准测试。

<?php

$lat = 50.223137; //latitude
$lon = 18.679558; //longitude
$distance = 50; //your distance in KM
$R = 6371; //constant earth radius. You can add precision here if you wish

$maxLat = $lat + rad2deg($distance/$R);
$minLat = $lat - rad2deg($distance/$R);
$maxLon = $lon + rad2deg(asin($distance/$R) / cos(deg2rad($lat)));
$minLon = $lon - rad2deg(asin($distance/$R) / cos(deg2rad($lat)));

echo $maxLat, "<br>", $minLat, "<br>", $maxLon, "<br>", $minLon;

输出:

50.672797802959
49.773476197041
19.382380506501
17.976735493499