gpt4 book ai didi

mapbox-gl-js - 如何检查 Mapbox GL JS 绘制状态

转载 作者:行者123 更新时间:2023-12-05 02:56:15 25 4
gpt4 key购买 nike

如何在将 new MapboxDraw 对象发送到后端之前检查它的状态?例如,在用户尝试提交某些操作而不在 map 上创建对象(在我的例子中是多边形)时向用户显示一些警告。

this.draw = new MapboxDraw({
controls: {
trash: true,
polygon: true
},
defaultMode: 'draw_polygon',
displayControlsDefault: false,
})

# sudocode
if (user has not created a polygon on the map) {
alert('You must create a polygon before submitting the form!')
}

我实际上尝试用下面的代码来解决这个问题,因为正确的多边形的长度值必须大于 3 个点。

if (draw.getAll().features[0].geometry.coordinates[0].length <= 3) {
alert('You must create a polygon before submitting the form!')
}

上面的代码只在第一次执行时有效,但在第二次执行时它会导致错误,例如,如果用户试图创建一个由两个点组成的多边形,或者如果用户创建一个多边形然后将其删除

Uncaught TypeError: Cannot read property 'geometry' of undefined

最佳答案

您可以将 Mapbox Draw 中的许多事件附加到当前 map 。

例如,map.on('draw.crete', function() {}) 一旦创建了 1 个多边形,这将执行。

您还可以使用 draw.getMode() 来捕获您绘制的任何类型的多边形。

看下面的例子,希望对你有帮助:)

var draw = new mapboxDraw({

displayControlsDefault: false,
controls: {
point: true,
polygon: true,
line_string: true,
trash: true
}

});

map.on('draw.create', function(e) {

var drawMode = draw.getMode();
var drawnFeature = e.features[0];

switch (drawMode) {
case 'draw_point':
// Draw point here
break;
case 'draw_polygon':
// Draw polygon here
break;
case 'draw_line_string':
// Draw linestring here
break;
default: alert('no draw options'); break;
}

});

map.on('draw.update', function(e) {
// This will call once you edit drawn polygon
});

map.on('draw.delete', function(e) {
// This will call once you delete any polygon
});

关于mapbox-gl-js - 如何检查 Mapbox GL JS 绘制状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60637609/

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