8

早上好。

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

例如:城市 Jaraguá do Sul 位于纬度 -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

4 回答 4

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);
?>
于 2012-06-08T20:50:19.387 回答
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

于 2010-04-19T15:06:18.903 回答
1

一个很大的话题。以下是一些介绍链接:

http://www.movable-type.co.uk/scripts/latlong.html

http://jan.ucc.nau.edu/~cvm/latlongdist.html

于 2010-04-19T14:12:50.903 回答
0

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

于 2010-04-19T20:39:04.593 回答