Php公式计算新的lat长位到特定距离

时间:2013-09-24 12:47:35

标签: php google-maps gis

我有纬度和经度点。现在我需要移动他们说0.25英里到地图的任何方向。我正在使用谷歌地图。我想在php中这样做。我想要的原因是没有准确地精确定位到用户提交的地址而是争夺一些距离。有没有可用于此类任务的算法?

3 个答案:

答案 0 :(得分:2)

希望我没有错过任何括号

$fromLatitude = 51.5171;
$fromLongitude = -0.1062;

echo $fromLatitude, ' - ', $fromLongitude, PHP_EOL;

$distanceInMetres = 250;
$bearing = 0;

    $earthMeanRadius = 6371009.0; // metres

    $destinationLatitude = rad2deg(
        asin(
            sin(deg2rad($fromLatitude)) *
                cos($distanceInMetres / $earthMeanRadius) +
            cos(deg2rad($fromLatitude)) *
                sin($distanceInMetres / $earthMeanRadius) *
                cos(deg2rad($bearing))
        )
    );
    $destinationLongitude = rad2deg(
        deg2rad($fromLongitude) +
        atan2(
            sin(deg2rad($bearing)) *
                sin($distanceInMetres / $earthMeanRadius) *
                cos(deg2rad($fromLatitude)),
            cos($distanceInMetres / $earthMeanRadius) -
                sin(deg2rad($fromLatitude)) * sin(deg2rad($destinationLatitude))
        )
    );

echo $destinationLatitude, ' - ', $destinationLongitude, PHP_EOL;

答案 1 :(得分:0)

您可以计算Delta Lat和delta Lon。一个纬度总是111公里,经度在赤道上也是111公里,其他地方都比较小。 1°经度的长度取决于纬度。维基百科上有一个公式。

答案 2 :(得分:-2)

您可以在此处找到一个简单的JavaScript实现:http://www.movable-type.co.uk/scripts/latlong.html

您需要向下滚动到“目标点给定距离并从起点开始承载”,然后您将找到有关如何操作的JavaScript。但是,您需要将轴承作为公式的参数。我很抱歉它不是PHP实现,但我想它可以转换。

<!-- use this to use the Geo object -->
<script src="http://www.movable-type.co.uk/scripts/geo.js"></script>
<script>
  function orthoDestMap() {
    // eg. 53°19′14″N
    var lat1 = Geo.parseDMS($('#ortho-dest .lat1').val());

    // eg. 001°43′47″W
    var lon1 = Geo.parseDMS($('#ortho-dest .lon1').val());

    // eg. 096°01′18″
    var brng = Geo.parseDMS($('#ortho-dest .brng').val());

    // In kilometers
    var dist = 111;

    var p1 = new LatLon(lat1, lon1);
    var p2 = p1.destinationPoint(brng, dist);

    // New latitude and longitude
    lat2 = p2.lat();
    lon2 = p2.lon();
  }
</script>