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