我有两个带有WGS84的地理位置,还有一条将这两点链接在一起的线。 我需要将这条线分成两个块,将中点移位以构建半菱形。
我所拥有的:
我需要什么:
要计算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) ];
}
答案 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