我正在使用Leaflet映射API . 我想确定点击折线中的哪个点 . 折线是我使用MapQuest Open中的Directions服务渲染的折线 .
相关代码是:
for ( var i = 0; i < latlngs.length; i++ )
{
// the equals method uses a small fudge factor to decide if the two
// points are the same.
if ( latlng.equals( latlngs[ i ] ))
{
return i;
}
}
.equals()应该用软糖因子来比较点 . 当我点击折线时,我得到一个lat / lngs的事件,如:
'38.83966582989183','-77.0083075761795'
折线中的lat / lngs精度较低,如下所示:
'38.841289','-77.008842'
因此,当我循环寻找匹配时, equals()
永远不会返回true . 很明显,click事件正在触发,因此传单知道我似乎是一种干净的方式来获取被点击的latlng的实际偏移量 .
我正在考虑降低鼠标点击返回的精度,但这并不像正确的解决方案那样“感觉” .
任何帮助/指针将不胜感激 .
编辑:
将 L.LatLng.MAX_MARGIN
设置为 1.0E-3
似乎有效,但这似乎是一个非常粗略的边缘 .
2 回答
传单代码:
我想出了一个可能不合适的解决方案,但似乎有效 . 我注意到折线中有一个_originalPoints数组 . 折线事件中还有一个PointPoint成员,它是一个Point对象 .
我不喜欢使用未记录的API但是循环遍历找到最接近点击点的点,使用L.LineUtil.pointToSegmentDistance似乎工作如下: