javascript - 单击标记并突出显示底层折线

标签 javascript jquery html css leaflet

我需要检查折线是否在标记下运行。标记和折线在该点应具有相同的 latLng。问题是我的 map 上有多个标记。我似乎无法弄清楚如何才能选择正确的多段线。

标记/折线的对象:

{  
    latLng:     Array with latLng's,  
    marker:     Leaflet marker/polyline layer object,  
    selected:   boolean  
}

穿过标记的折线包含​​与标记相同的经纬度点,但我无法获得正确的结果。我认为这更像是一个数学问题

更多信息图片:

http://i.stack.imgur.com/CABjB.png

附言抱歉我的英语不好

最佳答案

你可以试试这个:

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 以增加标记被视为“在线”的行周围的缓冲区。

改编自此answer by Cyrille Ka

关于javascript - 单击标记并突出显示底层折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29367661/

相关文章:

javascript - 为什么当我点击表单提交按钮时,它不会进入下一页?

javascript - JQuery toFixed 不是一个函数

jquery - 在大屏幕上查看时,Div 似乎从中心移开

jquery - 减小工具提示箭头的大小

html - 带有 HTML 格式的自动电子邮件

javascript - CSS 右对齐被推到新行

javascript - 在 angularJS 中通过动态值迭代 for 循环

JavaScript:如何从同一 URL 获取 "refresh"数据?

javascript - 切换div以显示隐藏

javascript - 如何获取 javascript 中参数对象中每个参数的名称