|
|
@ -4,20 +4,43 @@ import 'leaflet'; |
|
|
|
export default class extends Controller { |
|
|
|
static values = { |
|
|
|
geojson: String, |
|
|
|
icon: String, |
|
|
|
} |
|
|
|
|
|
|
|
connect() { |
|
|
|
const simpleIcon = L.icon({ |
|
|
|
iconUrl: this.iconValue, |
|
|
|
iconSize: [16, 16], |
|
|
|
iconAnchor: [8, 16], |
|
|
|
popupAnchor: [0, 0], |
|
|
|
}); |
|
|
|
|
|
|
|
const iconHtml = `
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" class="bi bi-geo-alt-fill" viewBox="0 0 16 16"> |
|
|
|
<path fill="currentColor" d="M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6"/> |
|
|
|
</svg> |
|
|
|
`;
|
|
|
|
const icons = { |
|
|
|
'danger': L.divIcon({ html: iconHtml, className: 'svg-icon text-danger', iconSize: [16, 16], iconAnchor: [8, 16], }), |
|
|
|
'warning': L.divIcon({ html: iconHtml, className: 'svg-icon text-warning', iconSize: [16, 16], iconAnchor: [8, 16], }), |
|
|
|
'success': L.divIcon({ html: iconHtml, className: 'svg-icon text-success', iconSize: [16, 16], iconAnchor: [8, 16], }), |
|
|
|
}; |
|
|
|
|
|
|
|
var map = L.map(this.element); |
|
|
|
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { |
|
|
|
maxZoom: 19, |
|
|
|
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' |
|
|
|
}).addTo(map); |
|
|
|
|
|
|
|
var layer = L.featureGroup(); |
|
|
|
|
|
|
|
var geojsons = JSON.parse(this.geojsonValue); |
|
|
|
if (geojsons.length > 0) { |
|
|
|
geojsons.forEach(function (geojson) { |
|
|
|
|
|
|
|
const feature0 = geojson.features[0].properties; |
|
|
|
L.geoJSON(geojson, { |
|
|
|
|
|
|
|
const polygon = L.geoJSON(geojson, { |
|
|
|
style: function (feature) { |
|
|
|
var color = 'blue'; |
|
|
|
switch (feature.properties.color) { |
|
|
@ -30,9 +53,18 @@ export default class extends Controller { |
|
|
|
}).bindTooltip(feature0.name).addTo(layer).on('click', function (event) { |
|
|
|
window.location.href = event.layer.feature.properties.url; |
|
|
|
}); |
|
|
|
|
|
|
|
L.marker(polygon.getBounds().getCenter(), { |
|
|
|
icon: icons[feature0.color], |
|
|
|
title: feature0.name, |
|
|
|
clickUrl: feature0.url, |
|
|
|
}).addTo(layer).on('click', function (event) { |
|
|
|
window.location.href = event.target.options.clickUrl; |
|
|
|
}); |
|
|
|
|
|
|
|
}); |
|
|
|
layer.addTo(map); |
|
|
|
console.log(layer.getBounds().toBBoxString()); |
|
|
|
|
|
|
|
map.fitBounds(layer.getBounds()); |
|
|
|
} |
|
|
|
} |
|
|
|