计算“线”与“点”之间的最小距离

时间:2014-01-10 00:12:21

标签: math mapping maps distance latitude-longitude

我有一个“线串”(带有init和终点)和一个“点”(两个坐标)。

我已经实现了以下ActionSctipt代码来使用“hasrsine formula”来计算两点之间的距离(每个点都有x& y坐标);此函数可以以“公里”,“米”,“英尺”或“英里”返回“距离”:

private function distanceBetweenCoordinates(lat1:Number, lon1:Number, lat2:Number, lon2:Number, units:String = "miles"):Number {
    var R:int = RADIUS_OF_EARTH_IN_MILES;

    if (units == "km") {
        R = RADIUS_OF_EARTH_IN_KM;
    }

    if (units == "meters") {
        R = RADIUS_OF_EARTH_IN_M;
    }

    if (units == "feet") {
        R = RADIUS_OF_EARTH_IN_FEET;
    }

    var dLat:Number = (lat2 - lat1) * Math.PI / 180;

    var dLon:Number = (lon2 - lon1) * Math.PI / 180;

    var lat1inRadians:Number = lat1 * Math.PI / 180;

    var lat2inRadians:Number = lat2 * Math.PI / 180;

    var a:Number = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1inRadians) * Math.cos(lat2inRadians);

    var c:Number = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    var d:Number = R * c;

    return d;
}

此代码运行良好。但是我需要改进这个代码以允许计算“单点”和一个“线串”(2点)之间的最小距离。 我该怎么办?

我认为这个解决方案: *划分每个点(Init和end)的“linesting”...并且对于每个点计算到“单点”的距离......并且在我获得两个“距离”之后返回最小距离。 这个解决方案并不是更好,这在下图中说明:

enter image description here

“d1”和“d2”距离无效...因为只有“d0”才是有效距离。

请!帮我!!!如何改进半正公式来计算一条线和一个单点之间的距离,以千米为单位?

感谢!!!!

1 个答案:

答案 0 :(得分:0)

在您的情况下,d0距离是三角形的高度。它是Hb=2*A/b A - 区域& b - 基边的长度(你的线串)

如果给出3分,您可以计算它们之间的距离(三角形的边abc)。它允许您计算三角形区域A=sqrt(p*(p-a)*(p-b)*(p-c)),其中p为半周长:p=(a+b+c)/2。所以,现在你需要所有变量来计算距离Hb (你的“d0”)