在react-mapbox-gl中显示多边形

3

我正在使用这个包https://github.com/alex3165/react-mapbox-gl在我的应用程序中。 我想要显示多边形,但当我这样做时:

console.log("Display polygon");

let polygonPaint = MapboxGL.FillPaint = {
    'fill-color': "#ff0000",
    'fill-opacity': 0.3
}

<Layer key={"polygonKey"} type="fill" paint={polygonPaint}>
    <Feature coordinates={
            [[[-67.13734351262877, 45.137451890638886],
            [-66.96466, 44.8097],
            [-68.03252, 44.3252],
            [-69.06, 43.98],
            [-70.11617, 43.68405],
            [-70.64573401557249, 43.090083319667144],
            [-70.75102474636725, 43.08003225358635],
            [-70.79761105007827, 43.21973948828747],
            [-70.98176001655037, 43.36789581966826],
            [-70.94416541205806, 43.46633942318431],
            [-71.08482, 45.3052400000002],
            [-70.6600225491012, 45.46022288673396],
            [-70.30495378282376, 45.914794623389355],
            [-70.00014034695016, 46.69317088478567],
            [-69.23708614772835, 47.44777598732787],
            [-68.90478084987546, 47.184794623394396],
            [-68.23430497910454, 47.35462921812177],
            [-67.79035274928509, 47.066248887716995],
            [-67.79141211614706, 45.702585354182816],
            [-67.13734351262877, 45.137451890638886]]]
       }/>
 </Layer>

然后出现了渲染循环...:/ 并且一遍又一遍地渲染相同的多边形。我已经尝试使用GeoJSONLayer圆圈、标记和只有<Layer>会导致这个问题。所以我的问题是,我能在GeoJSONLayer中显示多边形吗?我看到mapbox提供了类似于此的功能(https://www.mapbox.com/mapbox-gl-js/example/geojson-polygon/),但我不知道如何在React包中实现。
2个回答

8

好的,我已经完成了。数据对象应该具有类型:"FeatureCollection",然后几何对象应该具有类型 "Polygon"。GeoJSON图层需要 "fillPaint" 对象来显示美丽的多边形;) 我的代码: geojson 对象

{  
   type: "FeatureCollection",
   features: [{
      "type": "Feature",
       "properties": {
             "category": cat,
           },
       "geometry": {
             "type": "Polygon",
              "coordinates": [[
                  [-67.13734351262877, 45.137451890638886],
                  [-66.96466, 44.8097],
                  [-68.03252, 44.3252],
                  [-69.06, 43.98],
                  [-70.11617, 43.68405],
                  [-70.64573401557249, 43.090083319667144],
                  [-70.75102474636725, 43.08003225358635],
                  [-70.79761105007827, 43.21973948828747],
                  [-70.98176001655037, 43.36789581966826],
                  [-70.94416541205806, 43.46633942318431],
                  [-71.08482, 45.3052400000002],
                  [-70.6600225491012, 45.46022288673396],
                  [-70.30495378282376, 45.914794623389355],
                  [-70.00014034695016, 46.69317088478567],
                  [-69.23708614772835, 47.44777598732787],
                  [-68.90478084987546, 47.184794623394396],
                  [-68.23430497910454, 47.35462921812177],
                  [-67.79035274928509, 47.066248887716995],
                  [-67.79141211614706, 45.702585354182816],
                  [-67.13734351262877, 45.137451890638886]
                ]]
        }
   }]
}

使用GeoJSONLayer组件

<GeoJSONLayer
   key={index}
   data={geojsonObject}
   fillPaint={polygonPaint}
/>

我希望它对某些人有用:)

你好@skylinr,我想知道你有没有这个的git gist呢?我目前也在尝试使用此pkg查找多边形的工作示例。 - Aid19801
很遗憾我没有。但是你的问题是什么?因为在我的情况下,主要问题是我没有将类型设置为“FeatureCollection”,第二个“type”设置为“Feature”。 - Skylin R
啊,谢谢你回来告诉我 - 最终我成功了。将所有内容分成单独的包并逐步进行处理。最终成功了。无论如何还是谢谢你。@Skylinr - Aid19801

1
在当前的react-mapbox-gl版本(5.1.0)中,对我而言,直接的解决方案可以起作用:
<Layer
  type="fill"
  paint={{
    "fill-color": "#0091cd",
    "fill-opacity": 0.2,
  }}
>
  <Feature
    coordinates={myPolygonCoordinates}
  />
</Layer>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接