如何从地理坐标向任何方向移动 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 距离?的主要内容,如果未能解决你的问题,请参考以下文章

地理空间坐标和距离(以公里为单位)

地理空间坐标和以千米为单位的距离

弹性搜索5.x中地理距离查询中的返回距离

在 WP8 中从距离转换为地理坐标

如何计算两个地理坐标的距离?

从智能手机照片中提取地理坐标