Рассчитать точку на карте с учетом одной точки и расстояния - PullRequest
0 голосов
/ 15 ноября 2018

Я работаю с Google Maps над угловым проектом. У меня есть центральная точка круга и длина радиуса в метрах. Я пытаюсь найти координату любой точки на окружности круга - она ​​мне просто нужна. Как рассчитать это, учитывая то, что у меня есть?

Пример данных:

Center = {
   Latitude : 53.388922117675236
   Longitude : -6.280994415283203
}
Radius = 527

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

В API Карт есть библиотека геометрии , которую можно использовать для вычисления расстояний, курса и т. Д.

Так что если вам нужно найти 1 точку на заданном расстоянии от другой точки,независимо от заголовка, вы можете использовать метод computeOffset.

Что делает следующий код, он добавляет маркер в позиции 0,0 (var myLatLng), затем добавляет еще один маркер, 5000 метров от этой точки, взаголовок 0 (север).Вы можете изменить заголовок, если нужно.

function initialize() {

    var myLatLng = new google.maps.LatLng(0,0);
    var mapOptions = {
        zoom: 10,
        center: myLatLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    
    var point = google.maps.geometry.spherical.computeOffset(myLatLng, 5000, 0);
    
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
    
    new google.maps.Marker({
        position: myLatLng,
        map: map,
        title: 'Origin marker'
    });
    
    new google.maps.Marker({
        position: point,
        map: map,
        title: 'Offset marker'
    });
}

initialize();
#map-canvas {
  height: 200px;
}
<div id="map-canvas"></div>

<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>

Обратите внимание, как загружается API, включая библиотеку геометрии.

0 голосов
/ 15 ноября 2018

Если вам нужна произвольная точка на заданном расстоянии, самый простой способ - выбрать меридиональное направление

NewLong = Long
NewLat = Lat +- Radius / 111111.111  (meters per degree)

Или в параллельном направлении:

NewLat = Lat
NewLong = Long +- Radius / 111111.111 / Cos(Lat)  

Для случайного направления создайте случайный азимут и используйте формулу из этой страницы

Formula:
φ2 = asin( sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ )
λ2 = λ1 + atan2( sin θ ⋅ sin δ ⋅ cos φ1, cos δ − sin φ1 ⋅ sin φ2 )
where   φ is latitude, λ is longitude, 
        θ is the bearing (clockwise from north), 
        δ is the angular distance d/R; 
        d being the distance travelled, R the earth’s radius

JavaScript:(all angles in radians)
var φ2 = Math.asin( Math.sin(φ1)*Math.cos(d/R) +
                    Math.cos(φ1)*Math.sin(d/R)*Math.cos(brng) );
var λ2 = λ1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(φ1),
                         Math.cos(d/R)-Math.sin(φ1)*Math.sin(φ2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...