javascript - 在传单中使用react-leaflet-draw创建新层之前删除层

标签 javascript reactjs leaflet react-leaflet react-leaflet-draw

我的目的是在 map 上只允许一个多边形。我的方法是在 onCreated 方法期间将新图层保存在 var 或数组中,并在 onDrawStart 方法中获取并删除它,因此一旦用户尝试绘制另一个形状,前一个被删除,但这不起作用,有什么建议如何使其成为可能吗?

onCreated = (e) => {
  coordinates = e.layer._bounds;
  layer.push(e.layer);
}

onDrawStart = (e) => {
  layer.forEach((ele) => {
    ele.remove()
  });
}

是否有任何方法可以访问 onDelete 并访问此处的内置删除全部?

最佳答案

您可以通过使用featureGroupRef检查存储的绘制层数来实现这一点。如果数字大于1,则删除之前存储的图层,只保留最新的图层。这是代码:

const [editableFG, setEditableFG] = useState(null);

const onCreated = e => {
    console.log(e);
    console.log(editableFG);

    // here you have all the stored layers
    const drawnItems = editableFG.leafletElement._layers;
    console.log(drawnItems);
    // if the number of layers is bigger than 1 then delete the first
    if (Object.keys(drawnItems).length > 1) {
        Object.keys(drawnItems).forEach((layerid, index) => {
            if (index > 0) return;
            const layer = drawnItems[layerid];
            editableFG.leafletElement.removeLayer(layer);
        });
        console.log(drawnItems); // here you will get only the last one
    }
};

const onFeatureGroupReady = reactFGref => {
    // store the featureGroup ref for future access to content
    setEditableFG(reactFGref);
};

return (
    <Map
        center={[37.8189, -122.4786]}
        zoom={13}
        style={{ height: '100vh' }}>
        <TileLayer
            attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
            url="http://{s}.tile.osm.org/{z}/{x}/{y}.png"
        />
        <FeatureGroup
            ref={featureGroupRef => {
                onFeatureGroupReady(featureGroupRef);
            }}>
            <EditControl position="topright" onCreated={onCreated} />
        </FeatureGroup>
    </Map>
);

Demo

关于javascript - 在传单中使用react-leaflet-draw创建新层之前删除层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61073568/

相关文章:

javascript - 如何在安装后重新渲染 React 组件而不在 componentDidMount 中调用 setState

javascript - 为什么下面的js代码不起作用?

javascript - 如果正则表达式字符串存储在单独的 javascript 文件中,则正则表达式不起作用

javascript - 如何使用 karma-mocha/chai-enzyme 对基本三元进行单元测试?

reactjs - 动态放大以适应所有标记 React-leaflet

leaflet - 将属性添加到将成为 geojson 选项的传单层

javascript - 从另一个数组更新对象数组

javascript - 使用 chromium 在本地计算机中运行 exe 文件

javascript - Meteorjs + Angular 2

reactjs - React 中的 useEffect 无法电子渲染