在两个长/纬点的中间绘制一条垂直线

时间:2017-12-21 15:45:23

标签: javascript vector geolocation maps latitude-longitude

您好我正在尝试通过两条长/纬线画一条线来创建一个三角形。到目前为止,我已经设法画了一条直线,但线条并不垂直,看起来有些偏斜。这是我的代码:

    startPosition = [-0.17640, 51.426700];
    endPosition =  [0.17640, 51.796700];

    triangleSizeY = (endPosition [1] - startPosition[1]) / 6;
    /*subtract 
    end from start to work out direction and also use this divided by 6 to 
    get distance*/
    triangleSize *= -1;

    triangleSizeX = (endPosition [0] - startPosition[0]) / 6;
    /*subtract 
    end from start to work out direction and also use this divided by 6 to 
    get distance*/
    triangleSize *= -1;

    var cx = (startPosition[0] + endPosition[0]) / 2;
    var cy = (startPosition[1] + endPosition[1]) / 2;
    var dx = (endPosition[0] - startPosition[0]) / 2;
    var dy = (endPosition[1] - startPosition[1]) / 2;
    positions[0] = [midPoint[0] + triangleSizeX, midPoint[1] + 
    triangleSizeY];
    positions[1] = [cx - dy, cy + dx];
    positions[2] = [cx + dy, cy - dx];

这就是它的样子:

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,lat / lon是有角度的,所以你不能做线性类型的距离。您需要采取的步骤来解决这个问题:

  1. 计算您想要垂直线的2个纬度/经度对之间的距离。
  2. 从上一步计算出一半的距离,以获得中点范围。
  3. 计算2个纬度/经度对之间的方位。 (参见下面关于从2纬度/经度计算轴承的参考文献
  4. 使用半距离和方位,可以计算中点的纬度/经度。这称为基于范围和方位计算纬度/经度。 (参见下面的参考文献。)
  5. 现在,您可以通过在步骤3中从轴承添加/减去90度来从中点垂直。确定要从范围/方位计算新的纬度/经度的范围,如步骤4所示。
  6. 此网站(https://www.movable-type.co.uk/scripts/latlong.html)具有您执行此操作所需的计算。此外,由于距离相对较小,您可以使用Haversine上的Equirectangular近似来计算距离。