Support FeatureCollection and MultiPolygon in geozones
We're reworking the format validation to correctly interpret feature collection, feature, and geometry, according to RFC 7946 [1]. Since Leaflet interprets GeoJSON format, we're rendering the GeoJSON as a layer instead of as a set of points. For that, we're normalizing the GeoJSON to make sure it contains either a Feature or a FeatureCollection. We're also adding the Leaflet images to the assets path so the markers used for point geometries are rendered correctly. Note we no longer allow a GeoJSON containing a geometry but not a defined type. Since there might be invalid GeoJSON in existing Consul Democracy databases, we're normalizing these existing geometry objects to be part of a feature object. We're also wrapping the outline points in a FeatureCollection object because most of the large GIS systems eg ArcGIS, QGIS export geojson as a complete FeatureCollection. [1] https://datatracker.ietf.org/doc/html/rfc7946 Co-authored-by: Javi Martín <javim@elretirao.net>
This commit is contained in:
@@ -220,17 +220,22 @@
|
||||
}
|
||||
},
|
||||
addGeozone: function(geozone, map) {
|
||||
var polygon = L.polygon(geozone.outline_points, {
|
||||
color: geozone.color,
|
||||
fillOpacity: 0.3,
|
||||
className: "map-polygon"
|
||||
var geojsonData = JSON.parse(geozone.outline_points);
|
||||
|
||||
var geoJsonLayer = L.geoJSON(geojsonData, {
|
||||
style: {
|
||||
color: geozone.color,
|
||||
fillOpacity: 0.3,
|
||||
className: "map-polygon"
|
||||
},
|
||||
onEachFeature: function(feature, layer) {
|
||||
if (geozone.headings) {
|
||||
layer.bindPopup(geozone.headings.join("<br>"));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (geozone.headings !== undefined) {
|
||||
polygon.bindPopup(geozone.headings.join("<br>"));
|
||||
}
|
||||
|
||||
polygon.addTo(map);
|
||||
geoJsonLayer.addTo(map);
|
||||
},
|
||||
getPopupContent: function(data) {
|
||||
return "<a href='" + data.link + "'>" + data.title + "</a>";
|
||||
|
||||
Reference in New Issue
Block a user