早上好。
我想知道如何向地图点(纬度/经度)添加公里数。
例如:JaraguádoSul市位于北纬-26.462049,东经-49.059448。我想向上,向下和侧面增加100公里。我想做一个正方形并得到新的分数。
我该怎么做?
我试过了:
<?php
$distance = 100;
$earthRadius = 6371;
$lat1 = -26.4853239150483;
$lon1 = -49.075927734375;
$bearing = 0;
$lat2 = asin(sin($lat1) * cos($distance / $earthRadius) + cos($lat1) * sin($distance / $earthRadius) * cos($bearing));
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance / $earthRadius) * cos($lat1), cos($distance / $earthRadius) - sin($lat1) * sin($lat2));
echo 'LAT: ' . $lat2 . '<br >';
echo 'LNG: ' . $lon2;
?>
但它回来了错误的坐标。谢谢!
非常感谢。
答案 0 :(得分:7)
参数的弧度转换程度将起到作用。你可能想要以度为单位的结果,所以使用rad2deg转换回来:
<?php
$distance = 100;
$earthRadius = 6371;
$lat1 = deg2rad(-26.4853239150483);
$lon1 = deg2rad(-49.075927734375);
$bearing = deg2rad(0);
$lat2 = asin(sin($lat1) * cos($distance / $earthRadius) + cos($lat1) * sin($distance / $earthRadius) * cos($bearing));
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance / $earthRadius) * cos($lat1), cos($distance / $earthRadius) - sin($lat1) * sin($lat2));
echo 'LAT: ' . rad2deg($lat2) . '<br >';
echo 'LNG: ' . rad2deg($lon2);
?>
答案 1 :(得分:1)
一个很大的话题。以下是一些介绍链接:
答案 2 :(得分:1)
更新:
PHP三角函数将弧度视为参数,而不是度数,因此您需要使用deg2rad()作为参数:
sin(deg2rad($lat))
http://www.php.net/manual/en/function.deg2rad.php
原始答案:
确实是个大话题。
根据您所需的精度(以及所覆盖的距离),您可能必须考虑到地球不是一个完美的球体,而是一个大地水准面(扁平的椭圆体)。
http://en.wikipedia.org/wiki/Earth_radius
会让你开始这个。
映射和投影是你应该看看的两个主题
维基百科关于距离主题的另一个链接
答案 3 :(得分:0)
根据您的新信息,我有两种替代方法。 (1)谷歌“PHP GIS”。你会发现一些有趣的资源。也许一个人会工作。 (2)如果您的企业是经纬度确定的,那么您将不得不使用(1)我认为。但有没有“笨”的方法?例如,如果每个企业都链接到一个城市,则使用简单的地图坐标(“K16”)来标识城市。或者代码更智能的东西,但这就是主意。