From: Philipp Spitzer Date: Thu, 23 Nov 2023 21:29:36 +0000 (+0100) Subject: Use Swiss OSM as background map for he Swiss overview map. X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/mediawiki_extensions/wrmap.git/commitdiff_plain/1305f1721b0b202db901fced12a2e3eafdf972c3?hp=5b7827067347be3f9bcc3f36e8c7b76a44715daf Use Swiss OSM as background map for he Swiss overview map. --- diff --git a/src/wrmap.ts b/src/wrmap.ts index 117b102..81330ac 100644 --- a/src/wrmap.ts +++ b/src/wrmap.ts @@ -15,7 +15,7 @@ import { optionsFromCapabilities } from 'ol/source/WMTS'; import OlSourceOsm from 'ol/source/OSM'; import OlLayerVector from 'ol/layer/Vector'; import OlLayerTile from 'ol/layer/Tile'; -import { Geometry, SimpleGeometry as OlSimpleGeometry } from 'ol/geom'; +import { Geometry, SimpleGeometry as OlSimpleGeometry, SimpleGeometry } from 'ol/geom'; import OlPoint from 'ol/geom/Point'; import OlInteractionDragPan from 'ol/interaction/DragPan'; import OlInteractionMouseWheelZoom from 'ol/interaction/MouseWheelZoom'; @@ -288,6 +288,7 @@ function init_wrmap(_: number, jq_map_element: HTMLElement) { style: style_function }); + let center = fromLonLat([lon, lat]); let map = new OlMap({ target: jq_map[0], layers: [ @@ -295,7 +296,7 @@ function init_wrmap(_: number, jq_map_element: HTMLElement) { ], overlays: [popup_overlay], view: new OlView({ - center: fromLonLat([lon, lat]), + center: center, zoom: zoom }), controls: olControlDefaults({ @@ -366,18 +367,18 @@ function init_wrmap(_: number, jq_map_element: HTMLElement) { '7.530 46.023, 7.136 45.928, 6.843 46.173, 6.792 46.454, 6.412 46.474, 6.186 46.362)))'; - function getCountryFeature(countryWkt: string) { + function getCountryGeometry(countryWkt: string) { let format = new OlFormatWkt(); - let feature = format.readFeature(countryWkt, { + let geometry = format.readGeometry(countryWkt, { dataProjection: EPSG4326, featureProjection: EPSG3857, }); - return feature; + return geometry; } - const austria = getCountryFeature(austriaWkt); - const swiss = getCountryFeature(swissWkt); + const austria = getCountryGeometry(austriaWkt); + const swiss = getCountryGeometry(swissWkt); function insertWmtsLayer(capabilitiesUrl: string, layer: string, attributions: string) { @@ -411,22 +412,38 @@ function init_wrmap(_: number, jq_map_element: HTMLElement) { } - function allFeaturesInCountry(features: Feature[], country: OlFeatureLike): boolean { - let countryGeometry = country.getGeometry() as Geometry; - function isInCountry(feature: OlFeatureLike) { - let featureGeometry = feature.getGeometry() as OlSimpleGeometry; - return countryGeometry.intersectsCoordinate(featureGeometry.getFirstCoordinate()); - } - return features.every(isInCountry); + function allFeaturesInCountry(features: Feature[], country: Geometry): boolean { + return features.every(function (feature: Feature) {return country.intersectsCoordinate((feature.getGeometry() as SimpleGeometry).getFirstCoordinate())}); + } + + enum BackgroundLayer { + BasemapAt, + VaoAusland, + Sosm, } + let backgroundLayer = BackgroundLayer.BasemapAt; if (allFeaturesInCountry(features_all, austria)) { - insertWmtsLayer('https://mapsneu.wien.gv.at/basemapneu/1.0.0/WMTSCapabilities.xml', 'bmapgrau', 'Grundkarte: basemap.at'); + backgroundLayer = BackgroundLayer.BasemapAt; } else if (allFeaturesInCountry(features_all, swiss)) { - insertSwissLayer(); + backgroundLayer = BackgroundLayer.Sosm; + } else if (swiss.intersectsCoordinate(center)) { + backgroundLayer = BackgroundLayer.Sosm; } else { - insertWmtsLayer('https://mapsneu.wien.gv.at/vaoneu/1.0.0/WMTSCapabilities.xml', 'vaoausland', 'Grundkarte: OpenStreetMap'); + backgroundLayer = BackgroundLayer.VaoAusland; + } + + switch (backgroundLayer) { + case BackgroundLayer.BasemapAt: + insertWmtsLayer('https://mapsneu.wien.gv.at/basemapneu/1.0.0/WMTSCapabilities.xml', 'bmapgrau', 'Grundkarte: basemap.at'); + break; + case BackgroundLayer.VaoAusland: + insertWmtsLayer('https://mapsneu.wien.gv.at/vaoneu/1.0.0/WMTSCapabilities.xml', 'vaoausland', 'Grundkarte: OpenStreetMap'); + break; + case BackgroundLayer.Sosm: + insertSwissLayer(); + break; }