Mapbox “地图框图标/标记”;BearingSnap“;或快速定位

Mapbox “地图框图标/标记”;BearingSnap“;或快速定位,mapbox,mapbox-gl,mapbox-gl-js,Mapbox,Mapbox Gl,Mapbox Gl Js,是否有办法将图标/标记移动到某个位置,然后“捕捉”到该位置 例如,在计算机上进行的国际象棋游戏中,当您将一个棋子移动到正确的方格上时,当您松开方格附近/周围的棋子时,它将捕捉到该位置 所以我想要的是将一个标记或图标移动到某个特定的位置,比如说加利福尼亚州的首府,当我移动它时,标记将“捕捉”到我想要的位置,并放开该位置附近的标记。但是如果我想的话,我也希望仍然能够移动标记 我知道Mapbox gl在用户旋转地图后会将地图捕捉回北方,但我找不到任何图标/标记,我不相信我可以使用bearingSnap

是否有办法将图标/标记移动到某个位置,然后“捕捉”到该位置

例如,在计算机上进行的国际象棋游戏中,当您将一个棋子移动到正确的方格上时,当您松开方格附近/周围的棋子时,它将捕捉到该位置

所以我想要的是将一个标记或图标移动到某个特定的位置,比如说加利福尼亚州的首府,当我移动它时,标记将“捕捉”到我想要的位置,并放开该位置附近的标记。但是如果我想的话,我也希望仍然能够移动标记

我知道Mapbox gl在用户旋转地图后会将地图捕捉回北方,但我找不到任何图标/标记,我不相信我可以使用
bearingSnap


谢谢。

这是您可以而且应该在GL JS上游实现的功能。构建标记或GeoJSON要素的坐标时,将其捕捉到所需的栅格。

可以使用距离函数:
turp.distance(pt1,pt2)
测量两点之间的距离。如果计算的距离低于某个阈值,则可以将拖动点的位置设置为捕捉点的位置

我有一个JSFIDLE中的工作示例:

移动功能(e){
如果(!IsDraging)返回;
var coords=e.lngLat;
//设置用于拖动的UI指示器。
canvas.style.cursor='grabbing';
//更新“geojson”坐标中的点要素
//并将setData调用到其上的源层“point”。
geojson.features[0].geometry.coordinates=[coords.lng,coords.lat];
map.getSource('point').setData(geojson);
让snapTo=map.getSource('snap')。\u数据;
草皮。特征每个(snapTo,(特征)=>{
设dist=草皮距离(特征,草皮点([coords.lng,coords.lat]);
控制台日志(dist);
//如果拖动点的距离低于某个阈值
如果(距离<500){
//将拖动点的位置设置为捕捉点的位置
geojson.features[0].geometry.coordinates=feature.geometry.coordinates;
map.getSource('point').setData(geojson);
}
});

}
对不起,我对Mapbox还是很陌生。你能再详细一点吗?谢谢。他说的不是快速网格,你的回答也没有提供任何可能的解决方案的信息。这可能是我一直在寻找的。。。只是想知道这是否也适用于多个点和位置?i、 e.A点、B点、C点可以分别到达Aa点、Bb点、Cc点,而不是开箱即用。您需要保存最后一次单击的点,以知道鼠标正在拖动哪个点。我更新了示例以支持多个捕捉点和多个位置点,请参见此处: