我需要检查折线是否在标记下运行。标记和折线在该点应具有相同的latLng。问题是我的地图上有多个标记。我似乎无法弄清楚如何选择正确的折线。
标记/折线的对象:
{
latLng: Array with latLng's,
marker: Leaflet marker/polyline layer object,
selected: boolean
}
穿过标记的折线包含与标记相同的latlng点,但我无法获得正确的结果。我认为这更像是一个数学问题
图片了解更多信息:
P.S。抱歉我的英文不好
答案 0 :(得分:0)
你可以试试这个:
markerLatLng = marker.getLatLng()
for(var i = 0; i < latLng.length-1; i++){
if (isBetween(latLng[i], latLng[i+1], markerLatLng)){
// marker is between this line segment
selected = true; //or do what you want to here
}
}
def isBetween(a, b, c){
crossproduct = (c.lng - a.lng) * (b.lat - a.lat) - (c.lat - a.lat) * (b.lng - a.lng);
if(Math.abs(crossproduct) > epsilon) return false; //epsilon = 0 for integers, use small number operations on floating point coordinates
dotproduct = (c.lat - a.lat) * (b.lat - a.lat) + (c.lng - a.lng)*(b.lng - a.lng);
if(dotproduct < 0) return false;
squaredlengthba = (b.lat - a.lat)*(b.lat - a.lat) + (b.lng - a.lng)*(b.lng - a.lng);
if(dotproduct > squaredlengthba) return false;
return true;
}
注意:浮点算术错误会让你感到悲伤。修改epsilon以增加考虑标记的线周围的缓冲区&#34;在线&#34;。