Php公式来计算新的纬度多头头寸到特定距离


Php formulae to calculate new lat long position to specific distance

我有一个纬度和经度点。现在我需要将它们移动到地图中的任何方向,比如说 0.25 英里。我正在使用谷歌地图。我想用 php 来做这件事。我想要这样做的原因是不能准确地定位到用户提交的地址,而是在几距离外争先恐后。有没有可用于此类任务的算法?

希望我没有错过任何括号

$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;

您可以计算增量拉特和三角洲纬度。一个纬度总是111公里,经度在赤道上空也是111公里,其他任何地方都更小。1°经度的长度取决于纬度。维基百科上有一个公式。

你可以

在这里找到一个简单的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>