我有一个纬度和经度点。现在我需要将它们移动到地图上的任何方向 0.25 英里。我正在使用谷歌地图。我想在 php 中执行此操作。我想要这个的原因是不能准确地定位到用户提交的地址,而是争夺几距离。是否有任何算法可用于此类任务?
问问题
997 次
3 回答
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;
于 2013-09-24T13:10:29.877 回答
0
您可以计算 delta Lat 和 delta Lon。一个纬度总是 111 公里,赤道上空的经度也是 111 公里,其他任何地方都更小。1°经度的长度取决于纬度。维基百科上有一个公式。
于 2013-09-24T13:13:52.467 回答
-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>
于 2013-09-24T12:54:20.187 回答