用Pitagora定理移动Geo Point

时间:2018-10-18 14:07:36

标签: javascript geometry

我有两个带有WGS84的地理位置,还有一条将这两点链接在一起的线。 我需要将这条线分成两个块,将中点移位以构建半菱形。

我所拥有的:

  • A坐标(例如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 :(得分:1)

您需要垂直于DB构建。

首先,使用this page处的轴承部分计算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,并使用DCBrng和距离“位移的len”计算目标点C

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