commit
c715d2bab1
2 changed files with 27 additions and 2 deletions
|
|
@ -348,6 +348,15 @@ BR.LayersConfig = L.Class.extend({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
createGeoJsonLayer: function (props) {
|
||||||
|
const layer = L.geoJSON(undefined, BR.Track.getGeoJsonOptions());
|
||||||
|
fetch(props.url).then(async (response) => {
|
||||||
|
const geojson = await response.json();
|
||||||
|
layer.addData(geojson);
|
||||||
|
});
|
||||||
|
return layer;
|
||||||
|
},
|
||||||
|
|
||||||
createLayer: function (layerData) {
|
createLayer: function (layerData) {
|
||||||
var props = layerData.properties;
|
var props = layerData.properties;
|
||||||
var url = props.url;
|
var url = props.url;
|
||||||
|
|
@ -436,6 +445,8 @@ BR.LayersConfig = L.Class.extend({
|
||||||
layer = this.createOpenStreetMapNotesLayer();
|
layer = this.createOpenStreetMapNotesLayer();
|
||||||
} else if (props.type === 'mvt') {
|
} else if (props.type === 'mvt') {
|
||||||
layer = this.createMvtLayer(props, options);
|
layer = this.createMvtLayer(props, options);
|
||||||
|
} else if (props.type === 'geojson') {
|
||||||
|
layer = this.createGeoJsonLayer(props);
|
||||||
} else {
|
} else {
|
||||||
// JOSM
|
// JOSM
|
||||||
var josmUrl = url;
|
var josmUrl = url;
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,27 @@ BR.Track = {
|
||||||
* @returns {Object} to pass as `options` parameter to `L.geoJson`
|
* @returns {Object} to pass as `options` parameter to `L.geoJson`
|
||||||
*/
|
*/
|
||||||
getGeoJsonOptions: function (layersControl) {
|
getGeoJsonOptions: function (layersControl) {
|
||||||
|
// https://github.com/mapbox/simplestyle-spec/tree/master/1.1.0
|
||||||
|
const styleMapping = [
|
||||||
|
['stroke', 'color'],
|
||||||
|
['stroke-width', 'weight'],
|
||||||
|
['stroke-opacity', 'opacity'],
|
||||||
|
['fill', 'fillColor'],
|
||||||
|
['fill-opacity', 'fillOpacity'],
|
||||||
|
];
|
||||||
return {
|
return {
|
||||||
style: function (geoJsonFeature) {
|
style: function (geoJsonFeature) {
|
||||||
var currentLayerId = layersControl.getActiveBaseLayer().layer.id;
|
var currentLayerId = layersControl?.getActiveBaseLayer().layer.id;
|
||||||
return {
|
const featureStyle = {
|
||||||
color: currentLayerId === 'cyclosm' ? 'yellow' : 'blue',
|
color: currentLayerId === 'cyclosm' ? 'yellow' : 'blue',
|
||||||
weight: 4,
|
weight: 4,
|
||||||
};
|
};
|
||||||
|
for (const [simpleStyle, leafletStyle] of styleMapping) {
|
||||||
|
if (geoJsonFeature?.properties?.[simpleStyle]) {
|
||||||
|
featureStyle[leafletStyle] = geoJsonFeature.properties[simpleStyle];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return featureStyle;
|
||||||
},
|
},
|
||||||
interactive: false,
|
interactive: false,
|
||||||
filter: function (geoJsonFeature) {
|
filter: function (geoJsonFeature) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue