通过两个长/纬点的中间画一条垂直线

Posted

技术标签:

【中文标题】通过两个长/纬点的中间画一条垂直线【英文标题】:Draw a perpendicular line through middle of two long/lat points 【发布时间】:2017-12-21 15:45:23 【问题描述】:

您好,我目前正在尝试通过两条长/纬线绘制一条线以创建一个三角形。到目前为止,我已经画了一条线,但这条线不是垂直的,而且看起来是歪斜的。这是我的代码:

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

这就是它的样子:

【问题讨论】:

【参考方案1】:

首先,纬度/经度是有角度的,因此您不能进行线性距离。解决此问题需要采取的步骤:

    计算您想要一条垂直线的 2 个纬度/经度对之间的距离。 取上一步计算的距离的一半,得到中点范围。 计算 2 个纬度/经度对之间的方位角。 (参见下面关于从 2 纬度/经度计算方位的参考资料) 使用半距离和方位角,您可以计算中点的纬度/经度。这称为基于范围和方位计算纬度/经度。 (请参阅下面的参考资料。) 现在,您可以通过在第 3 步中从方位角加/减 90 度来从中点垂直。确定要从第 4 步中的范围/方位角计算新纬度/经度的范围。

此站点 (https://www.movable-type.co.uk/scripts/latlong.html) 具有执行此操作所需的计算。此外,由于距离相对较小,您可以使用等距矩形近似对 Haversine 进行距离计算。

【讨论】:

以上是关于通过两个长/纬点的中间画一条垂直线的主要内容,如果未能解决你的问题,请参考以下文章

用html代码怎样画一条竖直线。1像素,纯黑色的,长500px.

如何在matplotlib中两个坐标轴之间画一条直线光标

如何在matlab中的水平线上画一条垂直线?

Unity实现任意两点之间画一条直线——bresenham算法(直线的处理)

用 g.DrawLine 画一条简单的垂直线

如何在 HighCharts 上画一条垂直线?