如何从地理坐标向任何方向移动x距离?

时间:2011-09-09 02:47:58

标签: php geolocation geocoding

我正在使用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;
    }

EDIT 我只是尝试手动更改坐标编号,它似乎做我想要的。 例如,我采用这些坐标

40.717828,-73.998672

并更改了第3个十进制数。这使我的位置向北移动。

40.710828,-73.998672

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

引用此维基百科文章GCS Wiki Article

  

在赤道海平面上的GRS80或WGS84球体上,一个   纬度第二测量30.715米,一个纬度分钟   1843米,纬度为110.6公里。该   经度圈,经络圈,在地理极点相遇,有   第二个东西宽度自然减少为纬度   增加。在海平面上的赤道,一个纵向的第二个   措施30.92米,纵向分钟1855米和一个   纵向度为111.3公里。纵向为30°   距格林威治(北纬51°28'38“)19.22米,距离60°   它是15.42米。