Сдвиг Гео Точки по теореме Питагоры - PullRequest
0 голосов
/ 18 октября 2018

У меня есть две географические точки с WGS84 и линия, которая связывает эти две точки.Мне нужно разделить эту линию на два куска, сдвигая среднюю точку, чтобы построить половину ромба.

Что у меня есть:

  • Aordins (например, 47.2270293988673, 4.06494140625);
  • B координаты;
  • лен смены;
  • D координаты;

Что мне нужно:

  • C координаты;

Для вычисления D координат, я использую:

calcMidPoint(position01, position02)
    {
        var lat1 = position01[1];
        var lon1 = position01[0];
        var lat2 = position02[1];
        var lon2 = position02[0];

        var dLon = this.toRad(lon2 - lon1);

        //convert to radians
        lat1 = this.toRad(lat1);
        lat2 = this.toRad(lat2);
        lon1 = this.toRad(lon1);

        var Bx = Math.cos(lat2) * Math.cos(dLon);
        var By = Math.cos(lat2) * Math.sin(dLon);
        var lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
        var lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);
        return [ this.toDegrees(lat3), this.toDegrees(lon3) ];
    }

enter image description here

1 Ответ

0 голосов
/ 18 октября 2018

Нужно строить перпендикулярно БД.

Сначала рассчитайте подшипник DB (обратите внимание, что в общем случае он отличается от подшипников AB и BA), используя сечение подшипника на на этой странице

JavaScript:     (all angles     in radians)
var y = Math.sin(λ2-λ1) * Math.cos(φ2);
var x = Math.cos(φ1)*Math.sin(φ2) -
        Math.sin(φ1)*Math.cos(φ2)*Math.cos(λ2-λ1);
var brng = Math.atan2(y, x);

Затем добавьте Pi/ 2 к этому значению DCBrng = brng + Pi/2 и вычислите точку назначения C, используя DCBrng и расстояние "len of shift"

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

The longitude can be normalised to −180…+180 using (lon+540)%360-180
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...