如何从地理坐标向任何方向移动 x 距离?
Posted
技术标签:
【中文标题】如何从地理坐标向任何方向移动 x 距离?【英文标题】:How to move x distance in any direction from geo coordinates? 【发布时间】:2011-09-09 02:47:58 【问题描述】:我正在使用 Google Places API 来获取某个地理位置附近的机构列表,我正在尝试弄清楚如何向北移动 1 公里并在那里获取地理坐标,然后再进行一次 Google API 调用。
理想情况下,我希望能够以任何距离进入任何方向并获得地理坐标。我从哪里开始?如果这不可能,请告诉我。
我什么也得不到。请看一看。我究竟如何使用方向。怎么往北走?
$lat = "40.712714";
$lon = "-74.005997";
$direction = "80";
$length="2000";
move($lon, $lat, $direction, $length);
function move($cx,$cy,$direction,$length)
$x=$cx*cos($direction*M_PI/180)+$length;
$y=$cy*sin($direction*M_PI/180)+$length;
return array($x,$y);
echo $x;
echo $y;
编辑 我只是尝试手动更改坐标编号,它似乎做了我想要的。 比如我取这些坐标
40.717828,-73.998672
并更改了第 3 位十进制数。这将我的位置向北移动。
40.710828,-73.998672
【问题讨论】:
【参考方案1】:所以我进行了一些调查。这是此函数的更正代码:
function move($ylat,$xlng,$direction_degree,$length_degree)
$x=$xlng+$length_degree*cos($direction_degree*M_PI/180);
$y=$ylat+$length_degree*sin($direction_degree*M_PI/180);
return array($x,$y);
var_dump(move(52.1,11.2,0,1)); //North 1 degree.
但是,在您可以随意使用它之前,需要解决一些小问题。
这个函数有距离单位度,所以你需要先将米转换成度。请注意,这会随纬度而变化。 方向以度为单位,0 为北,90 东,180 南,270 西。 我建议您从度数开始,然后最后进行米转换。到那时,您只需计算新旧坐标之间的距离(例如loceo.se/doc/distance)【讨论】:
我没有得到任何显示。你能看看我的示例代码吗?【参考方案2】:引自这篇***文章GCS Wiki Article:
在赤道海平面的 GRS80 或 WGS84 球体上,一个 纬度秒是 30.715 米,一纬度分钟是 1843米,一纬度为110.6公里。这 经度圈,子午线,在地理两极相遇,与 一秒的东西向宽度随着纬度自然减小 增加。在海平面的赤道上,经度一秒 长 30.92 米,纵向分钟为 1855 米, 经度111.3公里。在 30° 纵向秒 是 26.76 米,在格林威治 (51° 28' 38" N) 19.22 米,在 60° 它是 15.42 米。
【讨论】:
以上是关于如何从地理坐标向任何方向移动 x 距离?的主要内容,如果未能解决你的问题,请参考以下文章