К примеру: у меня есть две позиции, позиция1 (-33.50694, -70.72127) имеет расстояние 32 метра от позиции2 (-33.50684, -70.72111), мне нужно вычислить новое положение после приращения 1 метра к позиции1. Какова была бы новая позиция в отношении позиции 2?Как вычислить новую позицию (широту и долготу) после приращения х метров от позиции 1 до позиции2?
Как вычислить новую позицию (широту и долготу) после приращения х метров от позиции 1 до позиции2?
ответ
Для расчета положения 1 метра от положении1 вдоль прямой линии Position2, вы можете использовать geometry library функции:
computeHeading(from:LatLng, to:LatLng)
Возвращаемое значение: число
Возвращает заголовок из один LatLng для другого LatLng. Заголовки выражаются в градусах по часовой стрелке с севера в диапазоне [-180, 180].computeOffset(from:LatLng, distance:number, heading:number, radius?:number)
Возвращаемое значение: LatLng
Возвращает LatLng в результате перемещения на расстояние от начала координат в указанной статье (в градусах по часовой стрелке с севера).
var new_position = google.maps.geometry.spherical.computeOffset(position2,
1, /* distance in meters */
/* heading */
google.maps.geometry.spherical.computeHeading(position2, position1));
фрагмент кода:
function initialize() {
var map = new google.maps.Map(
document.getElementById("map_canvas"));
var position1 = new google.maps.LatLng(-33.50694, -70.72127);
// have 32 meters of distance to
var position2 = new google.maps.LatLng(-33.50684, -70.72111);
var bounds = new google.maps.LatLngBounds();
bounds.extend(position1);
bounds.extend(position2);
map.fitBounds(bounds);
var marker1 = new google.maps.Marker({
position: position1,
map: map,
title: "1",
icon: {
url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png",
size: new google.maps.Size(7, 7),
anchor: new google.maps.Point(3.5, 3.5)
}
});
var marker2 = new google.maps.Marker({
position: position2,
map: map,
title: "2",
icon: {
url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png",
size: new google.maps.Size(7, 7),
anchor: new google.maps.Point(3.5, 3.5)
}
});
console.log("distance=" + google.maps.geometry.spherical.computeDistanceBetween(position1, position2).toFixed(2) + " meters");
var marker1meter = new google.maps.Marker({
position: google.maps.geometry.spherical.computeOffset(position2, 1, google.maps.geometry.spherical.computeHeading(position2, position1)),
map: map,
title: "1 meter",
icon: {
url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle_blue.png",
size: new google.maps.Size(7, 7),
anchor: new google.maps.Point(3.5, 3.5)
}
})
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>
<div id="map_canvas"></div>
Спасибо !!. Я могу рассчитать это без GoogleMaps? Я прошу этого, чтобы избежать дополнительного запроса google api. – kalelc
Уверен (но я не думаю, что это «лишний» запрос, геометрия является частью «карты» нагрузки, вы не платите за каждый расчет, используя ее, это не «услуга») , Используйте формулу haversine: http://www.movable-type.co.uk/scripts/latlong.html – geocodezip
Расстояние между двумя точками составляет 18,56 метра. Почему вы говорите, что это 32 метра? – geocodezip
@geocodezip Да, вы правы. Это был просто пример – kalelc