<script>
import * as L from 'leaflet';
- import * as LMM from 'leaflet-minimap';
+ import 'leaflet-minimap';
import 'leaflet/dist/leaflet.css';
import 'leaflet-minimap/dist/Control.MiniMap.min.css';
import { get } from 'svelte/store';
- import { get_config_value } from '../lib/config_reader.js'
- import { map_store, current_result_store, current_request_latlon } from '../lib/stores.js';
+ import { get_config_value } from '../lib/config_reader.js';
+ import { map_store } from '../lib/stores.js';
import MapPosition from '../components/MapPosition.svelte';
export let display_minimap = false;
+ export let current_result = null;
+ export let position_marker = null;
let dataLayers = [];
const MapPositionControl = L.Control.extend({
options: { position: 'topright' },
- onAdd: () => { return document.getElementById('show-map-position') }
+ onAdd: () => { return document.getElementById('show-map-position'); }
});
map.addControl(new MapPositionControl());
function mapAction(container) {
let map = createMap(container);
map_store.set(map);
- setMapData(get(current_result_store));
+ setMapData(current_result);
return {
- destroy: () => { map.remove() }
+ destroy: () => {
+ map_store.set(null);
+ map.remove();
+ }
};
}
let map = get(map_store);
if (!map) { return; }
- dataLayers.forEach(function(layer) {
+ dataLayers.forEach(function (layer) {
map.removeLayer(layer);
- })
+ });
}
function setMapData(aFeature) {
resetMapData();
- let request_latlon = get(current_request_latlon);
- if (request_latlon) {
- // We don't need a marker, but an L.circle instance changes radius once you zoom in/out
+ if (position_marker) {
+ // We don't need a marker, but L.circle would change radius when you zoom in/out
let cm = L.circleMarker(
- request_latlon,
+ position_marker,
{
radius: 5,
weight: 2,
}).addTo(map);
}
- // nothing to do
- if (!aFeature) { return; }
+ if (!aFeature) return;
let lat = aFeature.centroid ? aFeature.centroid.coordinates[1] : aFeature.lat;
let lon = aFeature.centroid ? aFeature.centroid.coordinates[0] : aFeature.lon;
if (geojson) {
var geojson_layer = L.geoJson(
- // https://leafletjs.com/reference-1.0.3.html#path-option
+ // https://leafletjs.com/reference-1.7.1.html#path-option
parse_and_normalize_geojson_string(geojson),
{
style: function () {
map.addLayer(geojson_layer);
dataLayers.push(geojson_layer);
map.fitBounds(geojson_layer.getBounds());
+ } else if (lat && lon && position_marker) {
+ map.fitBounds([[lat, lon], position_marker], { padding: [50, 50] });
} else if (lat && lon) {
map.setView([lat, lon], 10);
- } else {
- map.fitWorld();
}
}
- current_result_store.subscribe(aFeature => {
- setMapData(aFeature);
- });
-
+ $: setMapData(current_result);
function show_map_position_click(e) {
e.target.style.display = 'none';
}
}
-</style>
\ No newline at end of file
+</style>