微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EditableGeoJsonLayer 获取 TypeError:传播不可迭代实例的尝试无效

如何解决EditableGeoJsonLayer 获取 TypeError:传播不可迭代实例的尝试无效

我正在尝试使用 nebula.gl 中的 Editable geojsonlayer,根据文档,我收到了许多针对此库的打字稿错误。第一种错误可以在他们的存储库问题中找到并解决https://github.com/uber/nebula.gl/issues/568

经过数小时的寻找并找到上述解决方案后,我可以使用 DrawpolygoneMode 绘制多边形,但是当我关闭多边形时,出现以下错误

TypeError: Invalid attempt to spread non-iterable instance.
In order to be iterable,non-array objects must have a [Symbol.iterator]() method.

我无法在这里发布整个错误,但它与类型未正确定义的库文件有关,因此打字稿有很多不兼容错误,例如:

ImmutableFeatureCollection.addFeatures
src/lib/immutable-feature-collection.ts:184

181 | addFeatures(features: Feature[]): ImmutableFeatureCollection {
182 |   const updatedFeatureCollection = {
183 |     ...this.featureCollection,184 |     features: [...this.featureCollection.features,...features],| ^  185 |   };
186 | 
187 |   return new ImmutableFeatureCollection(updatedFeatureCollection);

下面是我尝试使用 EditableGeoJsonLayer 的代码。您会注意到我已将其定义为 const editLayer = new (EditableGeoJsonLayer as any)({,否则它不会将其识别为具有 1 个以上参数的函数

import React,{ useState } from "react";
import DeckGL from '@deck.gl/react';
import { EditableGeoJsonLayer } from '@nebula.gl/layers';
import {DrawpolygonMode } from 'nebula.gl';
import {StaticMap} from 'react-map-gl';


function MapBox(props) {
// Viewport settings
const [INITIAL_VIEW_STATE,setViewport] = useState({
    longitude: 88.49175358524279,latitude: 22.571194159512256,zoom: 13,pitch: 0,minZoom: 0,maxZoom: 22,bearing: 0
});
const [mapMode,setMapMode] = useState("mapBox://styles/mapBox/light-v8")
const myFeatureCollection:any = {
    type: 'FeatureCollection',features: [
        
    ],};

const selectedFeatureIndexes = [];
const [featureState,setFeatureState] = useState({
    data: myFeatureCollection,})

const editableLayer = new (EditableGeoJsonLayer as any)({
    id: 'geojson',data: featureState.data,mode: DrawpolygonMode,selectedFeatureIndexes,onEdit: (updatedData:any) => {
        setFeatureState({ data: updatedData });
    },});

return(
    <>
        <DeckGL
            initialViewState={INITIAL_VIEW_STATE}
            controller={true}
            layers={[editableLayer]} 
            style={{height: "100vh",width: "100%"}}
        >
            <StaticMap mapBoxApiAccesstoken={MAPBox_ACCESS_TOKEN} mapStyle={mapMode}/>
        </DeckGL>
    </>
       
     
   );
  }

  export default MapBox;

任何帮助将不胜感激,因为我是这个库的新手,并且文档有时似乎不清楚用于特定功能的库。

解决方法

我找到了解决方案。这对我有用:

new (EditableGeoJsonLayer as any)({
         id: 'geojson',data: featureState.data,mode: DrawPolygonMode,selectedFeatureIndexes,onEdit: ({updatedData}):any => {
             setFeatureState({ 
                 data: updatedData 
             });
             console.log("GeoJson Updated!!");
             console.log(featureState.data);
         },pickable: true,pickingRadius: 15,})

我将 if 从 (updatedData:any) 更改为 ({updatedData}):any 就可以了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。