向地图点添加公里数

时间:2010-04-19 14:07:31

标签: php latitude-longitude points

早上好。

我想知道如何向地图点(纬度/经度)添加公里数。

例如: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;
?>

但它回来了错误的坐标。谢谢!

非常感谢。

4 个答案:

答案 0 :(得分:7)

正如已经指出的那样。 PHP三角函数将弧度视为参数。

参数的弧度转换程度将起到作用。你可能想要以度为单位的结果,所以使用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

会让你开始这个。

映射和投影是你应该看看的两个主题

维基百科关于距离主题的另一个链接

http://en.wikipedia.org/wiki/Geographical_distance

答案 3 :(得分:0)

根据您的新信息,我有两种替代方法。 (1)谷歌“PHP GIS”。你会发现一些有趣的资源。也许一个人会工作。 (2)如果您的企业是经纬度确定的,那么您将不得不使用(1)我认为。但有没有“笨”的方法?例如,如果每个企业都链接到一个城市,则使用简单的地图坐标(“K16”)来标识城市。或者代码更智能的东西,但这就是主意。