|
|
@ -51,19 +51,29 @@ export default class extends Controller { |
|
|
|
if (geojsons.elements.length > 0) { |
|
|
|
// Ajoute chaque forme
|
|
|
|
geojsons.elements.forEach(function (element) { |
|
|
|
element.members.forEach(function (member) { |
|
|
|
// TODO On est parti du principe que les features du
|
|
|
|
// geojson sont toutes des polylines ce qui est un peu
|
|
|
|
// réducteur, à terme il faudrait distinguer les nœuds,
|
|
|
|
// des chemins, des polygones, etc.
|
|
|
|
const polygon = L.polyline(member.geometry.map(function (coord) { return L.latLng(coord.lat, coord.lon)}), { |
|
|
|
color: '#0dcaf0', // bleu info bootstrap
|
|
|
|
weight: 6, // l’idée c’est que ce soit plus gros (par défaut c’est 3) que le tracé des données des tâches parce que ce sera en dessous
|
|
|
|
opacity: 0.8, |
|
|
|
// Cas d’un nœud
|
|
|
|
if (element.type === 'node') { |
|
|
|
L.marker([ element.lat, element.lon ], { |
|
|
|
icon: icons['info'], |
|
|
|
}).addTo(overpassLayer).bindPopup(L.popup({ |
|
|
|
overpassElement: element, // on transmet les données du geojson à la popup par là
|
|
|
|
}).setContent('…')); // le contenu définitif de la popup sera chargé plus tard en ajax
|
|
|
|
}); |
|
|
|
} |
|
|
|
// Cas d’autre chose qu’un nœud, sans distinction
|
|
|
|
if (element.members) { |
|
|
|
element.members.forEach(function (member) { |
|
|
|
// TODO On est parti du principe que les features du
|
|
|
|
// geojson sont toutes des polylines ce qui est un peu
|
|
|
|
// réducteur, à terme il faudrait distinguer les géométries
|
|
|
|
const polygon = L.polyline(member.geometry.map(function (coord) { return L.latLng(coord.lat, coord.lon)}), { |
|
|
|
color: '#0dcaf0', // bleu info bootstrap
|
|
|
|
weight: 6, // l’idée c’est que ce soit plus gros (par défaut c’est 3) que le tracé des données des tâches parce que ce sera en dessous
|
|
|
|
opacity: 0.8, |
|
|
|
}).addTo(overpassLayer).bindPopup(L.popup({ |
|
|
|
overpassElement: element, // on transmet les données du geojson à la popup par là
|
|
|
|
}).setContent('…')); // le contenu définitif de la popup sera chargé plus tard en ajax
|
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
// Intervient lors de l’ouverture de la popup associée à la forme
|
|
|
|
overpassLayer.on('popupopen', function (event) { |
|
|
@ -96,42 +106,39 @@ export default class extends Controller { |
|
|
|
geojsons = JSON.parse(this.geojsonValue); |
|
|
|
if (geojsons.length > 0) { |
|
|
|
geojsons.forEach(function (geojson) { |
|
|
|
// TODO Ici aussi on ne distingue pas les géométries des
|
|
|
|
// features mais ça vaudrait peut-être le coup de s’adapter un
|
|
|
|
// peu à la situation en cas de nœud, chemin ou zone…
|
|
|
|
|
|
|
|
// Par facilité on conserve les propriétés de la première feature pour plus tard
|
|
|
|
const feature0 = geojson.features[0].properties; |
|
|
|
|
|
|
|
// Dessine la forme de la tâche avec la proprieté `name` qui
|
|
|
|
// s’ffiche au survol et cliquable vers l’adresse web dans la
|
|
|
|
// propriété `url`
|
|
|
|
const polygon = L.geoJSON(geojson, { |
|
|
|
style: function (feature) { |
|
|
|
// Par défaut c’est un bleu par défaut de leaflet mais
|
|
|
|
// sinon on utilise les couleurs de Bootstrap
|
|
|
|
var color = 'blue'; |
|
|
|
switch (feature.properties.color) { |
|
|
|
case 'danger' : color = '#dc3545'; break |
|
|
|
case 'warning' : color = '#ffc107'; break |
|
|
|
case 'success' : color = '#198754'; break |
|
|
|
} |
|
|
|
return {color: color}; |
|
|
|
geojson.features.forEach(function (feature) { |
|
|
|
// Dessine la forme de la tâche avec la proprieté `name` qui
|
|
|
|
// s’ffiche au survol et cliquable vers l’adresse web dans la
|
|
|
|
// propriété `url`
|
|
|
|
if (feature.geometry.type === 'Point') { |
|
|
|
L.marker([ |
|
|
|
feature.geometry.coordinates[1], |
|
|
|
feature.geometry.coordinates[0], |
|
|
|
], { |
|
|
|
icon: icons[feature.properties.color], |
|
|
|
title: feature.properties.name, |
|
|
|
clickUrl: feature.properties.url, |
|
|
|
}).addTo(taskLayer).on('click', function (event) { |
|
|
|
window.location.href = event.target.options.clickUrl; |
|
|
|
}); |
|
|
|
} else { |
|
|
|
const polygon = L.geoJSON(feature, { |
|
|
|
style: function (feature) { |
|
|
|
// Par défaut c’est un bleu par défaut de leaflet mais
|
|
|
|
// sinon on utilise les couleurs de Bootstrap
|
|
|
|
var color = 'blue'; |
|
|
|
switch (feature.properties.color) { |
|
|
|
case 'danger' : color = '#dc3545'; break |
|
|
|
case 'warning' : color = '#ffc107'; break |
|
|
|
case 'success' : color = '#198754'; break |
|
|
|
} |
|
|
|
return {color: color}; |
|
|
|
} |
|
|
|
}).bindTooltip(feature.properties.name).addTo(taskLayer).on('click', function (event) { |
|
|
|
window.location.href = event.layer.feature.properties.url; |
|
|
|
}); |
|
|
|
} |
|
|
|
}).bindTooltip(feature0.name).addTo(taskLayer).on('click', function (event) { |
|
|
|
window.location.href = event.layer.feature.properties.url; |
|
|
|
}); |
|
|
|
|
|
|
|
// Ajoute un marqueur au centroïde de la forme (car les
|
|
|
|
// marqueurs gardent la même taille quelque-soit le zoom
|
|
|
|
L.marker(polygon.getBounds().getCenter(), { |
|
|
|
icon: icons[feature0.color], |
|
|
|
title: feature0.name, |
|
|
|
clickUrl: feature0.url, |
|
|
|
}).addTo(taskLayer).on('click', function (event) { |
|
|
|
window.location.href = event.target.options.clickUrl; |
|
|
|
}); |
|
|
|
|
|
|
|
}); |
|
|
|
taskLayer.addTo(layer); |
|
|
|
} |
|
|
|