2017-01-25 10 views
1

К примеру: у меня есть две позиции, позиция1 (-33.50694, -70.72127) имеет расстояние 32 метра от позиции2 (-33.50684, -70.72111), мне нужно вычислить новое положение после приращения 1 метра к позиции1. Какова была бы новая позиция в отношении позиции 2?Как вычислить новую позицию (широту и долготу) после приращения х метров от позиции 1 до позиции2?

+0

Расстояние между двумя точками составляет 18,56 метра. Почему вы говорите, что это 32 метра? – geocodezip

+0

@geocodezip Да, вы правы. Это был просто пример – kalelc

ответ

1

Для расчета положения 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)); 

proof of concept fiddle

picture of marker 1 meter along line between two positions

фрагмент кода:

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>

+0

Спасибо !!. Я могу рассчитать это без GoogleMaps? Я прошу этого, чтобы избежать дополнительного запроса google api. – kalelc

+0

Уверен (но я не думаю, что это «лишний» запрос, геометрия является частью «карты» нагрузки, вы не платите за каждый расчет, используя ее, это не «услуга») , Используйте формулу haversine: http://www.movable-type.co.uk/scripts/latlong.html – geocodezip