gpt4 book ai didi

gis - 使用 leaflet mapping api,您如何确定点击了多段线中的哪个点?

转载 作者:行者123 更新时间:2023-12-04 21:56:22 24 4
gpt4 key购买 nike

我正在使用 Leaflet 映射 API。我想确定点击了多段线中的哪个点。多段线是我使用 MapQuest Open 的方向服务呈现的。

相关代码为:

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' 

折线中的纬度/经度精度较低,如下所示:

'38.841289','-77.008842' 

因此,当我循环查找匹配项时,equals() 永远不会返回 true。显然,点击事件正在触发,所以传单知道我点击了折线,但似乎没有一种干净的方法来获取被点击的 latlng 的实际偏移量。

我正在考虑只降低鼠标点击返回的精度,但这“感觉”不是正确的解决方案。

任何帮助/指点将不胜感激。

编辑:

L.LatLng.MAX_MARGIN 设置为 1.0E-3 似乎可行,但这似乎是一个非常粗略的边距。

最佳答案

我的传单代码:

var _getClosestPointIndex = function(lPoint, arrayLPoints) {
var distanceArray = [];
for ( var i = 0; i < arrayLPoints.length; i++ ) {
distanceArray.push( lPoint.distanceTo(arrayLPoints[i]) );
}
return distanceArray.indexOf( Math.min.apply(null, distanceArray) );
};

var polyLine = L.polyline(arrayLatLngCollection, lineOpt);
polyLine.addEventListener('click dblclick', function(e) {
var index = _getClosestPointIndex(e.latlng, arrayLatLngCollection);
var popup = L.popup()
.setLatLng(new L.latLng(arrayLatLngCollection[index]))
.setContent('<p>Hello world!<br />This is a nice popup.</p>')
.openOn(self.map);
});

关于gis - 使用 leaflet mapping api,您如何确定点击了多段线中的哪个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16202968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com