向地图点添加公里数
早上好。
我想知道如何向地图点(纬度/经度)添加公里数。
例如:南雅拉瓜市的纬度为 -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;
?>
但它返回了错误的坐标。谢谢你!
非常感谢。
Good morning.
I would like to know how do I add kilometers to a map point (latitude / longitude).
For example: The city Jaraguá do Sul is in latitude -26.462049, longitude -49.059448. I want to add 100 kilometers up, down, and on the sides. I want to do a square and get the new points.
How do I do that?
I tried it:
<?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;
?>
But it's returning wrong cordinates. Thank you!
Thank you very much.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(4)
一个很大的话题。以下是一些介绍链接:
更新:
PHP 三角函数将弧度作为参数,而不是度数,因此您需要使用 deg2rad() 作为参数:
sin(deg2rad($lat))
http://www.php.net/manual/en/function.deg2rad.php
原始答案:
确实是一个大主题。
根据您所需的精度(和覆盖的距离),您可能必须考虑到地球不是一个完美的球体,而是一个大地水准面(扁平的椭球体)。
http://en.wikipedia.org/wiki/Earth_radius
将帮助您开始此操作。
映射和投影是您应该查看的两个主题,也是
来自维基百科的关于距离主题的另一个链接
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
正如已经指出的那样。 PHP 三角函数以弧度为参数。
参数的度数到弧度的转换就可以了。您可能想要以度为单位的结果,因此使用 rad2deg 转换回来:
as was already pointed out. PHP trigonometric functions take radians as paramters.
degree to radian conversions of the parameters will do the trick. you probably want the result in degrees, so use rad2deg to convert back: