X-Git-Url: https://git.openstreetmap.org./nominatim-ui.git/blobdiff_plain/163775c3501257af8f62601b0bb3565133c3bebb..2ba00544d30017ad30570011b1a2bcc6a8da73a7:/src/components/Map.svelte diff --git a/src/components/Map.svelte b/src/components/Map.svelte index e9c4cef..7b13187 100644 --- a/src/components/Map.svelte +++ b/src/components/Map.svelte @@ -6,7 +6,6 @@ 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 } from '../lib/stores.js'; import MapPosition from '../components/MapPosition.svelte'; @@ -17,24 +16,33 @@ let dataLayers = []; function createMap(container) { - const attribution = get_config_value('Map_Tile_Attribution') || null; + const attribution = Nominatim_Config.Map_Tile_Attribution; + let map = new L.map(container, { - attributionControl: (attribution && attribution.length), + attributionControl: false, scrollWheelZoom: true, // !L.Browser.touch, touchZoom: false, center: [ - get_config_value('Map_Default_Lat'), - get_config_value('Map_Default_Lon') + Nominatim_Config.Map_Default_Lat, + Nominatim_Config.Map_Default_Lon ], - zoom: get_config_value('Map_Default_Zoom') + zoom: Nominatim_Config.Map_Default_Zoom }); + if (typeof Nominatim_Config.Map_Default_Bounds !== 'undefined' + && Nominatim_Config.Map_Default_Bounds) { + map.fitBounds(Nominatim_Config.Map_Default_Bounds); + } + + if (attribution && attribution.length) { + L.control.attribution({ prefix: 'Leaflet' }).addTo(map); + } - L.tileLayer(get_config_value('Map_Tile_URL'), { + L.tileLayer(Nominatim_Config.Map_Tile_URL, { attribution: attribution }).addTo(map); if (display_minimap) { - let osm2 = new L.TileLayer(get_config_value('Map_Tile_URL'), { + let osm2 = new L.TileLayer(Nominatim_Config.Map_Tile_URL, { minZoom: 0, maxZoom: 13, attribution: attribution @@ -96,7 +104,7 @@ resetMapData(); if (position_marker) { - // We don't need a marker, but an L.circle instance changes radius once you zoom in/out + // We don't need a marker, but L.circle would change radius when you zoom in/out let cm = L.circleMarker( position_marker, { @@ -109,6 +117,7 @@ clickable: false } ); + cm.bindTooltip(`Search (${position_marker[0]},${position_marker[1]})`).openTooltip(); cm.addTo(map); dataLayers.push(cm); } @@ -118,17 +127,19 @@ if (viewbox) { let coords = viewbox.split(','); // ,,, let bounds = L.latLngBounds([coords[1], coords[0]], [coords[3], coords[2]]); - L.rectangle(bounds, { + let viewbox_on_map = L.rectangle(bounds, { color: '#69d53e', weight: 3, dashArray: '5 5', opacity: 0.8, - fill: false - }).addTo(map); + fill: false, + interactive: false + }); + map.addLayer(viewbox_on_map); + dataLayers.push(viewbox_on_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; @@ -138,6 +149,9 @@ let circle = L.circleMarker([lat, lon], { radius: 10, weight: 2, fillColor: '#ff7800', color: 'blue', opacity: 0.75 }); + if (position_marker) { // reverse result + circle.bindTooltip('Result').openTooltip(); + } map.addLayer(circle); dataLayers.push(circle); } @@ -145,7 +159,7 @@ 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 () { @@ -156,10 +170,10 @@ 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(); } } @@ -173,9 +187,9 @@
-
show map bounds
+>show map bounds