gpt4 book ai didi

Mapbox 图标/标记 "BearingSnap"或对齐位置

转载 作者:行者123 更新时间:2023-12-02 09:32:51 27 4
gpt4 key购买 nike

有没有办法将图标/标记移动到某个位置,然后它会“捕捉”到该位置?

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

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

我知道 Mapbox gl 有 bearingSnap在用户旋转 map 后,它将 map 向北捕捉,但我找不到任何图标/标记,而且我不相信我可以使用 bearingSnap 来实现它。

谢谢。

最佳答案

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

我在 jsfiddle 中有一个工作示例: https://jsfiddle.net/andi_lo/nmc4kprn/

function onMove(e) {
if (!isDragging) return;
var coords = e.lngLat;

// Set a UI indicator for dragging.
canvas.style.cursor = 'grabbing';

// Update the Point feature in `geojson` coordinates
// and call setData to the source layer `point` on it.
geojson.features[0].geometry.coordinates = [coords.lng, coords.lat];
map.getSource('point').setData(geojson);

let snapTo = map.getSource('snap')._data;

turf.featureEach(snapTo, (feature) => {
let dist = turf.distance(feature, turf.point([coords.lng, coords.lat]));
console.log(dist);
// if the distance of the dragging point is under a certain threshold
if (dist < 500) {
// set the location of the dragging point to the location of the snapping point
geojson.features[0].geometry.coordinates = feature.geometry.coordinates;
map.getSource('point').setData(geojson);
}
});
}

关于Mapbox 图标/标记 "BearingSnap"或对齐位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39417535/

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