Reputation: 2271
I'm using this package https://github.com/alex3165/react-mapbox-gl in my app. I would like to display polygons but when I do that this way:
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>
Then rendering loops... :/ and render again and again the same polygons. I've tried with GeoJSONLayer circles, Markers and only <Layer>
causes this problem.
So there is my question if I can display polygons in GeoJSONLayer? I can see that mapbox provide something like this (https://www.mapbox.com/mapbox-gl-js/example/geojson-polygon/) but I don't know how to do that in React package.
Upvotes: 3
Views: 6375
Reputation: 588
In the current react-mapbox-gl version(5.1.0), the straightforward solution worked for me:
<Layer
type="fill"
paint={{
"fill-color": "#0091cd",
"fill-opacity": 0.2,
}}
>
<Feature
coordinates={myPolygonCoordinates}
/>
</Layer>
Upvotes: 1
Reputation: 2271
OK I've done it. Data object should have type: "FeatureCollection", and then geometry object should have type "Polygon". GeoJSONLayer need "fillPaint" object to display beautiful polygons ;) My code: geojson object
{
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]
]]
}
}]
}
And GeoJSONLayer component usage
<GeoJSONLayer
key={index}
data={geojsonObject}
fillPaint={polygonPaint}
/>
I hope that it will be useful for someone :)
Upvotes: 8