我有纬度和经度值,想在50英里处找到另一个lat长值。怎么做?任何公式或自定义函数来获取它?
答案 0 :(得分:1)
在php中你可以通过获取记录并使用以下公式来实现。 但我希望您使用查询来解决此问题。效率更高。
function getNearestUsers($givenLat,$givenLng)
{
$res = [];
$recs = getAllTheRecordsFromDb();
foreach($recs as $r)
{
$distance = sqrt(POW((69.1 * ($r['lat'] - $givenLat)),2) + POW((69.1 * ($givenLng - $r['lng']) * cos($r['lat'] / 57.3)),2));
if($distance<=50) //50 miles
{
//some code
}
}
}
假设您的用户表具有userId,纬度和经度。下面是sql查询,以从给定的纬度和经度获得半径 50英里的用户。
SELECT userId, latitude, longitude, SQRT(
POW(69.1 * (latitude - [givenLat]), 2) +
POW(69.1 * ([givenLng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 50 ORDER BY distance;
您可以通过以下链接获得更多答案: latitude/longitude find nearest latitude/longitude - complex sql or complex calculation
答案 1 :(得分:1)
此查询方法基于Google地图商店定位器API。
请参阅本网站:
假设你有一个lat和lang变量 $纬度; $ LNG;
让我们假设这些变量有其坐标。
在您的查询中执行以下操作:
SELECT id,lat,lng(3959 * acos(cos(弧度($ lat))* cos(弧度(纬度))* cos(弧度(lng) - 弧度($ lng))+ sin(弧度($ lat))* sin(弧度(纬度))))AS距离FROM距离<= 50 ORDER BY距离;
结果将返回小于或等于50英里的id,lat和lng坐标。
P.S 3959是返回里程的单位。