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

标签 mapbox-gl-js

如何在将 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/

相关文章:

javascript - 使用 Mapbox 在 pixi-js 或任何其他 webgl/canvas 框架内进行渲染?

javascript - 在 Mapbox GL JS 中渲染没有轮廓的 GeoJSON 填充层

mapbox - 我们是否可以有一个功能,可以在添加未知矢量切片服务时获取源的元信息以了解图层 ID 和图层类型?

reactjs - 如何解决 Typescript 错误——mapbox-gl 和 React hooks

javascript - 如何从 Mapbox GL JS 中的样式层获取特征?

mapnik 矢量瓦片与原始 geojson 性能

javascript - MapboxGL Javascript API : displaying popup for all markers on map not working on multiple layers

javascript - Mapbox GL 画线和贝塞尔曲线

Mapbox GL JS : Trouble creating hover effects on mouseenter and mouseleave when layers are stacked (z-index)

javascript - 如何将 Mapbox Geocoder 结果地点/国家/地区文本名称获取到 JavaScript 函数中?