Math 计算a";“行”;和一个「;“点”;

Math 计算a";“行”;和一个「;“点”;,math,mapping,maps,distance,latitude-longitude,Math,Mapping,Maps,Distance,Latitude Longitude,我有一个“linestring”(带起始点和端点)和一个“point”(两个坐标) 我已经实现了以下ActionSctiptcode来使用“哈弗公式”来计算两点之间的距离(每个点都有x&y坐标);此功能可以以“公里”、“米”、“英尺”或“英里”为单位返回“距离”: 该代码运行良好。但我需要改进这段代码,以允许计算“单点”和一个“线串”(带2个点)之间的最小距离。 我该怎么办 我认为这个解决方案: *为每个点(起始点和结束点)划分“线型”。。。对于每一个,计算到“单点”的距离。。。得到两个“距离”

我有一个“linestring”(带起始点和端点)和一个“point”(两个坐标)

我已经实现了以下
ActionSctipt
code来使用“哈弗公式”来计算两点之间的距离(每个点都有x&y坐标);此功能可以以“公里”、“米”、“英尺”或“英里”为单位返回“距离”:

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

我认为这个解决方案: *为每个点(起始点和结束点)划分“线型”。。。对于每一个,计算到“单点”的距离。。。得到两个“距离”后,返回最小距离。 此解决方案并非更好,下图对此进行了说明:

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

求你了!帮助我!!!如何改进haversine公式,以计算直线与单个点之间的距离(以公里为单位)


谢谢

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

如果给定3个点,您可以计算它们之间的距离(三角形的边
a
b
c
)。它将允许您计算三角形面积:
A=sqrt(p*(p-A)*(p-b)*(p-c))
其中
p
是半周长:
p=(A+b+c)/2
。因此,现在你有了计算距离Hb所需的所有变量(你的“d0”)。

可能有帮助
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;
}