@npm9912/v-map 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/cjs/{cesium-provider-CTtu9eTD.js → cesium-provider-eoUKuWMQ.js} +19 -1
  2. package/dist/cjs/{deck-provider-fNa818HH.js → deck-provider-VE8jCvBE.js} +28 -14
  3. package/dist/cjs/{index-ChrKyU6i.js → index-CCxwwaJl.js} +2 -2
  4. package/dist/cjs/{index-C1ubapwF.js → index-CE8CbKgP.js} +2 -2
  5. package/dist/cjs/{index-9APmzoa2.js → index-CF2WBqZp.js} +4 -4
  6. package/dist/cjs/{index-BJg0ncfC.js → index-CQEgnWQf.js} +2 -2
  7. package/dist/cjs/{layer-extension-D3a-1DFI.js → layer-extension-IlBQy451.js} +1 -1
  8. package/dist/cjs/{leaflet-provider-7Nw-AdV_.js → leaflet-provider-D_wmyi0D.js} +12 -1
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/{openlayers-provider-DMxYtFkS.js → openlayers-provider-BkvQVXZX.js} +14 -1
  11. package/dist/cjs/{polygon-layer-Dx1ZWZP0.js → polygon-layer-D7S9jutU.js} +1 -1
  12. package/dist/cjs/{scenegraph-layer-ctLehP0q.js → scenegraph-layer-h1u7G3QW.js} +1 -1
  13. package/dist/cjs/v-map.cjs.js +1 -1
  14. package/dist/cjs/{v-map.v-map-layer-osm.v-map-layergroup-BJ3_NqAj.js → v-map.v-map-layer-osm.v-map-layergroup-B-JDj4h8.js} +51 -5
  15. package/dist/cjs/v-map_3.cjs.entry.js +1 -1
  16. package/dist/collection/components/v-map/v-map.js +47 -1
  17. package/dist/collection/map-provider/cesium/cesium-provider.js +18 -0
  18. package/dist/collection/map-provider/deck/deck-provider.js +21 -7
  19. package/dist/collection/map-provider/leaflet/leaflet-provider.js +11 -0
  20. package/dist/collection/map-provider/ol/openlayers-provider.js +14 -1
  21. package/dist/components/cesium-provider.js +1 -1
  22. package/dist/components/deck-provider.js +1 -1
  23. package/dist/components/leaflet-provider.js +1 -1
  24. package/dist/components/openlayers-provider.js +1 -1
  25. package/dist/components/v-map2.js +1 -1
  26. package/dist/esm/{cesium-provider-Bh__cBGf.js → cesium-provider-BkuYkY7L.js} +19 -1
  27. package/dist/esm/{deck-provider-DxIpS4lY.js → deck-provider-Bi-KjKaQ.js} +28 -14
  28. package/dist/esm/{index-DxbztwCv.js → index-B1rgsDF8.js} +5 -5
  29. package/dist/esm/{index-C3mnOs0I.js → index-DnYCNw5P.js} +2 -2
  30. package/dist/esm/{index-Bh2gBu9u.js → index-KNhUl5HI.js} +3 -3
  31. package/dist/esm/{index-C63kfbil.js → index-W2-A_yhi.js} +4 -4
  32. package/dist/esm/{layer-extension-C5Y2UES3.js → layer-extension-IuMBMh1z.js} +1 -1
  33. package/dist/esm/{leaflet-provider-k6JSYiYX.js → leaflet-provider-LXeX9dPk.js} +12 -1
  34. package/dist/esm/loader.js +1 -1
  35. package/dist/esm/{openlayers-provider-DIquf3Tx.js → openlayers-provider-BZvqx4li.js} +15 -2
  36. package/dist/esm/{polygon-layer-ZIT5mJy5.js → polygon-layer-BPJjHK3y.js} +1 -1
  37. package/dist/esm/{scenegraph-layer-CNIRd2uu.js → scenegraph-layer-_1RQcOYZ.js} +1 -1
  38. package/dist/esm/v-map.js +1 -1
  39. package/dist/esm/{v-map.v-map-layer-osm.v-map-layergroup-Zwdvm9PG.js → v-map.v-map-layer-osm.v-map-layergroup-DIfNm6nG.js} +51 -5
  40. package/dist/esm/v-map_3.entry.js +1 -1
  41. package/dist/types/components/v-map/v-map.d.ts +15 -0
  42. package/dist/types/map-provider/cesium/cesium-provider.d.ts +4 -0
  43. package/dist/types/map-provider/deck/deck-provider.d.ts +5 -0
  44. package/dist/types/map-provider/leaflet/leaflet-provider.d.ts +4 -0
  45. package/dist/types/map-provider/ol/openlayers-provider.d.ts +4 -0
  46. package/dist/types/types/mapprovider.d.ts +11 -0
  47. package/dist/v-map/p-BFyBu5_1.js +1 -0
  48. package/dist/v-map/p-BOfJXm8U.js +1 -0
  49. package/dist/v-map/{p-DuJ_mTaq.js → p-Bl6vQpyl.js} +1 -1
  50. package/dist/v-map/{p-G6iftXUC.js → p-Bmo2hj1_.js} +1 -1
  51. package/dist/v-map/{p-Ci70E1EM.js → p-COhBo2OS.js} +1 -1
  52. package/dist/v-map/{p-9Rt23jlQ.js → p-Cp_e5ebg.js} +1 -1
  53. package/dist/v-map/{p-C0M0-Kvt.js → p-D5O720HV.js} +1 -1
  54. package/dist/v-map/{p-DAf4itFZ.js → p-D94rp5ir.js} +1 -1
  55. package/dist/v-map/{p-BpE6L1g0.js → p-DgXaR8AP.js} +1 -1
  56. package/dist/v-map/p-fca86e74.entry.js +1 -0
  57. package/dist/v-map/{p-rCyRSFJb.js → p-ns7UwFY9.js} +2 -2
  58. package/dist/v-map/{p-BSsFEMZP.js → p-qVwE-Ron.js} +1 -1
  59. package/dist/v-map/{p-vhbi5XXi.js → p-yoshb-P-.js} +1 -1
  60. package/dist/v-map/v-map.esm.js +1 -1
  61. package/package.json +1 -1
  62. package/dist/v-map/p-05ee633f.entry.js +0 -1
  63. package/dist/v-map/p-2-mR3oVa.js +0 -1
  64. package/dist/v-map/p-CbiLpFhO.js +0 -1
@@ -1 +1 @@
1
- import{i as t,L as e,s,w as i}from"./v-map2.js";import*as r from"leaflet";import{e as o,l as a}from"./logger.js";import{D as n}from"./styleconfig.js";import{l as c,G as l,g as h}from"./geotiff-source.js";import{w as u}from"./index5.js";import{GmlParser as f}from"./index.browser.js";const p=256;class y extends r.GridLayer{apiKey;highDpi;sessionRequest;scaleFactor;sessionToken;sessionPromise;sessionRefreshId;previousViewport;currentAttribution;mapInstance;onMoveEnd;constructor(t){super(),this.applyInitialGridOptions(t);const{apiKey:e,mapType:s,language:i,region:r,imageFormat:o,scale:a,highDpi:n,layerTypes:c,overlay:l,styles:h,apiOptions:u}=t;if(!e)throw new Error("Google Map Tiles layer requires an apiKey");this.apiKey=e,this.highDpi=n??(void 0===a||"scaleFactor1x"!==a),this.scaleFactor=this.mapScaleToFactor(a,this.highDpi);const f={mapType:s??"roadmap",language:i??"en-US",region:r??"US"};o&&(f.imageFormat=o),c?.length&&(f.layerTypes=c),u?.length&&(f.apiOptions=u),Array.isArray(h)&&h.length>0&&(f.styles=h),!0===l&&(f.overlay=!0);const p=a??(this.scaleFactor>1?this.factorToScale(this.scaleFactor):void 0);p&&(f.scale=p),this.highDpi&&(f.highDpi=!0),this.sessionRequest=f,this.onMoveEnd=()=>{this.updateAttribution()},this.sessionPromise=this.startSessionFetch()}onAdd(t){return this.mapInstance=t,t.on("moveend",this.onMoveEnd),t.on("zoomend",this.onMoveEnd),this.ensureSession().then((()=>this.updateAttribution())),super.onAdd(t)}onRemove(t){return t.off("moveend",this.onMoveEnd),t.off("zoomend",this.onMoveEnd),this.clearSessionRefresh(),this.removeCurrentAttribution(),this.mapInstance=void 0,super.onRemove(t)}createTile(t,e){const s=document.createElement("img");s.decoding="async",s.alt="",s.crossOrigin="anonymous";const i=this.resolveTileSize();s.width=i.x,s.height=i.y;const r=t=>{const i=t instanceof Error?t.message:"Google tile load error";e(new Error(i),s)};return s.onload=()=>e(null,s),s.onerror=t=>{const e=t instanceof ErrorEvent?t.error??new Error(t.message):new Error("Google tile failed to load");r(e)},this.ensureSession().then((()=>{this.sessionToken?s.src=this.buildTileUrl(t):r(new Error("Google Maps session unavailable"))})).catch((t=>{r(t)})),s}ensureSession(){return this.sessionToken?Promise.resolve():(this.sessionPromise||(this.sessionPromise=this.startSessionFetch()),this.sessionPromise)}startSessionFetch(t=!1){if(this.sessionPromise&&!t)return this.sessionPromise;const e=this.fetchAndApplySession().catch((t=>{const e=t instanceof Error?t:new Error("Failed to create Google Maps session");throw o("Google Map Tiles session error",e),this.sessionToken=void 0,e})).finally((()=>{this.sessionPromise===e&&(this.sessionPromise=void 0)}));return this.sessionPromise=e,e}async fetchAndApplySession(){const t=`https://tile.googleapis.com/v1/createSession?key=${this.apiKey}`,e=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.sessionRequest)});if(!e.ok){let t;try{const s=await e.json();t=s?.error?.message}catch{}throw new Error(t??`Google Maps session request failed (${e.status})`)}const s=await e.json();this.sessionToken=s.session,this.applyTileSize(s),this.scheduleSessionRefresh(this.parseExpiry(s.expiry)),this.mapInstance&&(this.updateAttribution(),this.redrawLayer()),a("Google Map Tiles session established")}scheduleSessionRefresh(t){if(!isFinite(t))return;const e=Math.max(t-Date.now()-6e4,1e3);this.clearSessionRefresh(),this.sessionRefreshId=setTimeout((()=>{this.startSessionFetch(!0).then((()=>{this.mapInstance&&(this.updateAttribution(),this.redrawLayer())}))}),e)}clearSessionRefresh(){void 0!==this.sessionRefreshId&&(clearTimeout(this.sessionRefreshId),this.sessionRefreshId=void 0)}async updateAttribution(){if(!this.mapInstance||!this.sessionToken)return;const t=this.mapInstance.getBounds();if(!t?.isValid())return;const e=`zoom=${this.mapInstance.getZoom()}&north=${t.getNorth()}&south=${t.getSouth()}&east=${t.getEast()}&west=${t.getWest()}`;if(this.previousViewport!==e){this.previousViewport=e;try{const t=await fetch(`https://tile.googleapis.com/tile/v1/viewport?session=${this.sessionToken}&key=${this.apiKey}&${e}`);if(!t.ok)throw new Error(`Attribution request failed (${t.status})`);const s=await t.json(),i=s?.copyright;"string"==typeof i&&i.length>0&&this.applyAttribution(i)}catch(t){o("Failed to fetch Google attribution",t)}}}applyAttribution(t){const e=this.mapInstance;e?.attributionControl&&(this.currentAttribution&&this.currentAttribution!==t&&e.attributionControl.removeAttribution(this.currentAttribution),this.currentAttribution&&this.currentAttribution===t||(e.attributionControl.addAttribution(t),this.currentAttribution=t))}removeCurrentAttribution(){const t=this.mapInstance;t?.attributionControl&&this.currentAttribution&&(t.attributionControl.removeAttribution(this.currentAttribution),this.currentAttribution=void 0)}applyTileSize(t){const e=Math.max(1,Math.round(t.tileWidth/this.scaleFactor)),s=Math.max(1,Math.round(t.tileHeight/this.scaleFactor)),i=r.point(e,s);this.setGridOptions({tileSize:i})}parseExpiry(t){const e=parseInt(t,10);return Number.isFinite(e)?1e3*e:Number.NaN}buildTileUrl(t){if(!this.sessionToken)throw new Error("Google Maps session missing");return`https://tile.googleapis.com/v1/2dtiles/${t.z}/${t.x}/${t.y}?session=${this.sessionToken}&key=${this.apiKey}`}mapScaleToFactor(t,e){switch(t){case"scaleFactor4x":return 4;case"scaleFactor2x":return 2;case"scaleFactor1x":return 1;default:return e?2:1}}factorToScale(t){switch(t){case 4:return"scaleFactor4x";case 2:return"scaleFactor2x";case 1:return"scaleFactor1x";default:return}}applyInitialGridOptions(t){const e={},s=["attribution","bounds","className","detectRetina","errorTileUrl","keepBuffer","maxNativeZoom","maxZoom","minNativeZoom","minZoom","noWrap","opacity","pane","reuseTiles","subdomains","tileSize","tms","updateInterval","updateWhenIdle","updateWhenZooming","zIndex","zoomOffset"];for(const i of s){const s=t[i];void 0!==s&&(e[i]=s)}void 0===e.maxZoom&&(e.maxZoom=22),this.setGridOptions(e)}setGridOptions(t){const e=r.Util?.setOptions;if("function"==typeof e)e(this,t);else{const e=this;e.options={...e.options,...t}}}resolveTileSize(){const t=this.options?.tileSize;if(t&&"object"==typeof t){if(Array.isArray(t)&&2===t.length){const[e,s]=t;return r.point(Number(e)||p,Number(s)||p)}if("x"in t&&"y"in t){const e=t;return r.point(Number(e.x)||p,Number(e.y)||p)}}return"number"==typeof t&&Number.isFinite(t)?r.point(t,t):r.point(p,p)}redrawLayer(){this.redraw()}}class d extends r.GridLayer{geotiffOptions;tileProcessor=null;colorStops;loadingPromise;defaultResolution=1;defaultResample="bilinear";constructor(t){super(t),this.geotiffOptions={...t}}onAdd(t){return super.onAdd(t),this.ensureReady().then((()=>this.redraw())),this}createTile(t,e){const s=this.getTileSize(),i=r.DomUtil.create("canvas","leaflet-tile");return i.width=s.x,i.height=s.y,this.ensureReady().then((async()=>{if(this.tileProcessor)try{const r=await this.tileProcessor.getTileData({x:t.x,y:t.y,z:t.z,tileSize:s.x,resolution:this.geotiffOptions.resolution??this.defaultResolution,resampleMethod:this.geotiffOptions.resampleMethod??this.defaultResample,colorStops:this.colorStops});if(!r)return void e(null,i);const o=i.getContext("2d");if(o){const t=o.createImageData(s.x,s.y);t.data.set(r),o.putImageData(t,0,0)}e(null,i)}catch(t){e(t,i)}else e(null,i)})).catch((t=>{e(t,i)})),i}async ensureReady(){return this.loadingPromise||(this.loadingPromise=this.initializeProcessor()),this.loadingPromise}async updateSource(t){Object.assign(this.geotiffOptions,t),this.tileProcessor=null,this.colorStops=void 0,this.loadingPromise=void 0,await this.ensureReady(),this.redraw()}async initializeProcessor(){if(this.tileProcessor)return;const[t,{default:e},s]=await Promise.all([import("./geotiff.js").then((function(t){return t.g})),import("./index4.js"),import("./main-dist.js").then((function(t){return t.m}))]),i=await c(this.geotiffOptions.url,{projection:void 0,forceProjection:!1,nodata:this.geotiffOptions.nodata},{geotiff:t,proj4:e,geokeysToProj4:s}),r=t=>{const e=i.proj4(i.fromProjection,this.geotiffOptions.viewProjection,t);return[Number(e[0]),Number(e[1])]};if(this.tileProcessor=new l({transformViewToSourceMapFn:t=>{const e=i.proj4(this.geotiffOptions.viewProjection,i.fromProjection,t);return[Number(e[0]),Number(e[1])]},transformSourceMapToViewFn:r,sourceBounds:i.sourceBounds,sourceRef:i.sourceRef,resolution:i.resolution,imageWidth:i.width,imageHeight:i.height,fromProjection:i.fromProjection,toProjection:this.geotiffOptions.viewProjection,baseImage:i.baseImage,overviewImages:i.overviewImages??[]}),this.tileProcessor.createGlobalTriangulation(),this.setViewBounds(i.sourceBounds,r),this.geotiffOptions.colorMap){const{stops:t}=h(this.geotiffOptions.colorMap,this.geotiffOptions.valueRange);this.colorStops=t}}setViewBounds(t,e){const[s,i,o,a]=t,n=e([s,i]),c=e([o,i]),l=e([s,a]),h=e([o,a]),u=Math.min(n[0],c[0],l[0],h[0]),f=Math.max(n[0],c[0],l[0],h[0]),p=Math.min(n[1],c[1],l[1],h[1]),y=Math.max(n[1],c[1],l[1],h[1]),d=r.CRS.EPSG3857.unproject(r.point(u,y)),m=r.CRS.EPSG3857.unproject(r.point(f,p));this.options.bounds=r.latLngBounds(d,m)}}const m="v-map - leaflet - wcs - tile - ";class w extends r.GridLayer{wcsOptions;constructor(t){super(t),this.wcsOptions={...t,version:t.version??"2.0.1",format:t.format??"image/tiff",projection:t.projection??"EPSG:4326"}}buildWCSUrl(t){const{url:e,coverageName:s,version:i,format:r,projection:o,params:a}=this.wcsOptions,n=this._tileCoordsToBounds(t),c=n.getSouthWest(),l=n.getNorthEast(),h=c.lng,u=c.lat,f=l.lng,p=l.lat,y={SERVICE:"WCS",REQUEST:"GetCoverage",VERSION:i,FORMAT:r};if(i.startsWith("2.0")){y.coverageId=s;const t=a?{...a}:{},i={...y,...t};(r.includes("tiff")||r.includes("geotiff"))&&(i["geotiff:compression"]="LZW");const o=new URLSearchParams;Object.entries(i).forEach((([t,e])=>{null!=e&&o.set(t,String(e))}));const n=o.toString(),c=`subset=X(${h},${f})`,l=`subset=Y(${u},${p})`;return`${e}${e.includes("?")?"&":"?"}${n}&${c}&${l}`}{y.COVERAGE=s,y.BBOX=`${h},${u},${f},${p}`,y.CRS=o;const t=this.getTileSize();y.WIDTH="number"==typeof t?t:t.x,y.HEIGHT="number"==typeof t?t:t.y;const i=a?{...a}:{},r={...y,...i},n=new URLSearchParams;return Object.entries(r).forEach((([t,e])=>{null!=e&&n.set(t,String(e))})),`${e}${e.includes("?")?"&":"?"}${n.toString()}`}}createTile(t,e){const s=document.createElement("img"),i=this.buildWCSUrl(t);return a(`${m}load: coords=(${t.x},${t.y},${t.z})`),a(`${m}url: ${i}`),s.onload=()=>{e(null,s)},s.onerror=t=>{o(`${m}failed to load tile:`,t),e(t instanceof Error?t:new Error(String(t)),s)},s.crossOrigin="anonymous",s.src=i,s}updateOptions(t){this.wcsOptions={...this.wcsOptions,...t},this.redraw()}}class g{map;layers=[];baseLayers=[];hiddenLayerGroups=[];googleLogoAdded=!1;unsubscribeResize;shadowRoot;injectedStyle;layerErrorCallbacks=new Map;layerErrorCleanups=new Map;async init(o){if(!t())return;this.shadowRoot=o.shadowRoot,this.injectedStyle=function(i,o){if(t()){switch(i){case"cdn":return function(s,i=e,o="jsdelivr"){if(!t())return;const a="unpkg"===o?`https://unpkg.com/leaflet@${i}/dist/leaflet.css`:`https://cdn.jsdelivr.net/npm/leaflet@${i}/dist/leaflet.css`;r.Icon.Default.imagePath="unpkg"===o?`https://unpkg.com/npm/leaflet@${i}/dist/images/`:`https://cdn.jsdelivr.net/npm/leaflet@${i}/dist/images/`;const n=s??document;if(n.querySelector?.(`link[rel="stylesheet"][href="${a}"]`)||document.head.querySelector(`link[rel="stylesheet"][href="${a}"]`))return null;const c=document.createElement("link");return c.rel="stylesheet",c.href=a,(s??document.head).appendChild(c),c}(o);case"inline-min":return function(e){if(!t())return;const i="\n :host { display:block; }\n #map { width:100%; height:100%; display:block; }\n ";if(s()){const t=new CSSStyleSheet;t.replaceSync(i);const s=e??document;return s.adoptedStyleSheets=[...s.adoptedStyleSheets??[],t],null}{const t=document.createElement("style");return t.textContent=i,(e??document.head).appendChild(t),t}}(o)}return null}}(o.cssMode,this.shadowRoot);const[a,n]=o?.mapInitOptions?.center??[0,0];this.map=r.map(o.target,{zoomControl:!0,attributionControl:!0}).setView([n,a],o?.mapInitOptions?.zoom??2),this.unsubscribeResize=i(o.target,(()=>{this.map?.invalidateSize()}),{attributes:!0,attributeFilter:["style","class"]})}async updateLayer(t,e){const s=await this._getLayerById(t);switch(e.type){case"geojson":await this.updateGeoJSONLayer(s,e.data);break;case"osm":await this.updateOSMLayer(s,e.data);break;case"arcgis":await this.updateArcGISLayer(s,e.data);break;case"wkt":await this.updateWKTLayer(s,e.data);break;case"geotiff":await this.updateGeoTIFFLayer(s,e.data);break;case"wcs":await this.updateWCSLayer(s,e.data);break;case"wfs":s instanceof r.GeoJSON&&await this.updateWFSLayer(s,e.data)}}async addLayerToGroup(t){const e=await this._ensureGroup(t.groupId,t.groupVisible),s=await this.createLayer(t);if(null==s)return null;e.addLayer(s);const i=this.getLayerId(s);return s.vmapVisible=!0,s.vmapOpacity=1,void 0!==t.opacity&&this.setOpacityByLayer(s,t.opacity),void 0!==t.zIndex&&s.setZIndex?.(t.zIndex),t.visible?this.setVisibleByLayer(s,!0):!1===t.visible&&this.setVisibleByLayer(s,!1),i}async addBaseLayer(t,e,s){if(null==s)return a("leaflet - addBaseLayer - layerElementId not set."),null;null==e&&a("leaflet - addBaseLayer - basemapid not set.");const i=await this._ensureGroup(t.groupId,t.groupVisible);i.basemap=!0;const r=await this.createLayer(t);if(this.baseLayers.push(r),null==r)return null;r.layerElementId=s;const o=this.getLayerId(r);if(r.vmapVisible=!0,r.vmapOpacity=1,void 0!==t.opacity&&this.setOpacityByLayer(r,t.opacity),void 0!==t.zIndex&&r.setZIndex?.(t.zIndex),t.visible?this.setVisibleByLayer(r,!0):!1===t.visible&&this.setVisibleByLayer(r,!1),e===s){const t=i.getLayers()[0];t&&(this.map.removeLayer(t),i.clearLayers()),i.addLayer(r),i.visible&&r.addTo(this.map)}return o}async setBaseLayer(t,e){if(null===e)return void a("leaflet - setBaseLayer - layerElementId is null.");const s=this.layers.find((e=>e._groupId===t)),i=this.baseLayers.find((t=>t.layerElementId===e));if(void 0===i)return void a("leaflet - setBaseLayer - layer not found. layerElementId: "+e);if(!s)return;const r=s.getLayers()[0];r&&(this.map.removeLayer(r),s.clearLayers()),s.addLayer(i)}getLayerId(t){return String(r.Util.stamp(t))}normalizeAttribution(t){return Array.isArray(t)?t.join(", "):t}async _getLayerById(t){let e=null;return this.map?.eachLayer((s=>{this.getLayerId(s)===t&&(e=s)})),e||(e=this.baseLayers.find((e=>this.getLayerId(e)===t))??null,void 0===e?null:e)}async createLayer(t){switch(t.type){case"geojson":return this.createGeoJSONLayer(t);case"xyz":return this.createXYZLayer(t);case"osm":return this.createOSMLayer(t);case"wms":return this.createWMSLayer(t);case"wcs":return this.createWCSLayer(t);case"wfs":return this.createWFSLayer(t);case"arcgis":return this.createArcGISLayer(t);case"google":return this.createGoogleLayer(t);case"wkt":return this.createWKTLayer(t);case"geotiff":return this.createGeoTIFFLayer(t);default:throw new Error(`Unsupported layer type: ${t.type}`)}}async updateGeoJSONLayer(t,e){if(!(t instanceof r.GeoJSON))return;let s=null;if(e.geojson)s=JSON.parse(e.geojson);else if(e.url){const t=await fetch(e.url);if(!t.ok)throw new Error(`GeoJSON fetch failed: ${t.status} ${t.statusText}`);s=await t.json()}t.clearLayers(),t.addData(s)}async createGeoJSONLayer(t){let e=null;if(t.geojson)e=JSON.parse(t.geojson);else if(t.url){const s=await fetch(t.url);if(!s.ok)throw new Error(`GeoJSON fetch failed: ${s.status} ${s.statusText}`);e=await s.json()}if(e){let s={};if(t.geostylerStyle)s=await this.createGeostylerLeafletOptions(t.geostylerStyle);else{const e=t.style?{...n,...t.style}:n;s={style:this.createLeafletStyle(e),pointToLayer:(t,s)=>this.createLeafletPoint(t,s,e),onEachFeature:(t,s)=>this.bindLeafletPopup(t,s,e)}}return r.geoJSON(e,s)}return null}async createXYZLayer(t){return r.tileLayer(t.url,{attribution:this.normalizeAttribution(t.attributions),maxZoom:t.maxZoom??19,...t.options??{}})}async updateOSMLayer(t,e){if(!("setUrl"in t)||"function"!=typeof t.setUrl)return;let s="https://tile.openstreetmap.org/{z}/{x}/{y}.png";e.url&&(s=e.url+"/{z}/{x}/{y}.png"),t.setUrl(s)}async createOSMLayer(t){let e="https://tile.openstreetmap.org/{z}/{x}/{y}.png";return t.url&&(e=t.url+"/{z}/{x}/{y}.png"),r.tileLayer(e,{attribution:"© OpenStreetMap contributors",maxZoom:19})}async createWMSLayer(t){return r.tileLayer.wms(t.url,{layers:t.layers,format:t.format??"image/png",transparent:t.transparent??!0,...t.extraParams??{}})}buildArcGISUrl(t,e){if(!e||0===Object.keys(e).length)return t;const s=new URLSearchParams;return Object.entries(e).forEach((([t,e])=>{null!=e&&s.set(t,String(e))})),0===s.toString().length?t:`${t}${t.includes("?")?"&":"?"}${s.toString()}`}async createArcGISLayer(t){const e={...t.params??{}};t.token&&(e.token=t.token);const s=this.buildArcGISUrl(t.url,e),i={attribution:this.normalizeAttribution(t.attributions),minZoom:t.minZoom,maxZoom:t.maxZoom,...t.options??{}};return r.tileLayer(s,i)}async updateArcGISLayer(t,e){const s={...e?.params??{}};e?.token&&(s.token=e.token);const i=t,r=this.buildArcGISUrl(e?.url??i.options?.url??"",s);"setUrl"in i&&"function"==typeof i.setUrl&&i.setUrl(r)}async createGoogleLayer(t){if(!this.map)throw new Error("Map not initialized");if(!t.apiKey)throw new Error("Google-Layer benötigt 'apiKey' (Google Maps Platform).");const e="string"==typeof t.styles?this.tryParseStyles(t.styles):t.styles,s=new y({apiKey:t.apiKey,mapType:t.mapType??"roadmap",language:t.language,region:t.region,scale:t.scale,highDpi:t.highDpi,layerTypes:t.layerTypes,overlay:t.overlay,styles:Array.isArray(e)?e:void 0,imageFormat:t.imageFormat,apiOptions:t.apiOptions,maxZoom:t.maxZoom??22});return o=()=>{this.googleLogoAdded=!0,a("v-map - provider - leaflet - googleLogoAdded: ",this.googleLogoAdded)},(i=this.map)._googleLogoAdded||(new(r.Control.extend({onAdd(){const t=r.DomUtil.create("img");return t.src="https://developers.google.com/static/maps/documentation/images/google_on_white.png",t.alt="Google",t.style.pointerEvents="none",t.style.height="18px",t.style.margin="0 0 6px 6px",t},onRemove(){}}))({position:"bottomleft"}).addTo(i),i._googleLogoAdded=!0,o()),s;var i,o}tryParseStyles(t){try{const e=JSON.parse(t);return Array.isArray(e)?e:void 0}catch{return void o("Failed to parse Google styles JSON")}}async destroy(){var t;this.unsubscribeResize?.(),t=this.injectedStyle,this.shadowRoot&&t&&t.remove();for(const t of this.layers)this.map?.removeLayer(t);this.layers=[],this.map?.remove(),this.map=void 0}async setView([t,e],s){this.map?.setView([e,t],s,{animate:!1})}onLayerError(t,e){this.layerErrorCallbacks.set(t,e),this._getLayerById(t).then((s=>{if(!s)return;const i=()=>{e({type:"network",message:"Tile load error"})};s.on("tileerror",i),this.layerErrorCleanups.set(t,(()=>s.off("tileerror",i)))}))}offLayerError(t){this.layerErrorCleanups.get(t)?.(),this.layerErrorCleanups.delete(t),this.layerErrorCallbacks.delete(t)}async removeLayer(t){if(!t)return;this.offLayerError(t);const e=await this._getLayerById(t);e&&this.map.removeLayer(e)}async setZIndex(t,e){if(!t)return;const s=await this._getLayerById(t);s&&"function"==typeof s.setZIndex&&s.setZIndex(e)}async setOpacity(t,e){if(!t)return;const s=await this._getLayerById(t);this.setOpacityByLayer(s,e)}setOpacityByLayer(t,e){t&&(t.vmapOpacity=e,void 0===t.vmapVisible&&(t.vmapVisible=!0),!1!==t.vmapVisible&&this.setLayerOpacity(t,e))}async setVisible(t,e){if(!t)return;const s=await this._getLayerById(t);this.setVisibleByLayer(s,e)}setVisibleByLayer(t,e){t&&(t.vmapVisible=e,void 0===t.vmapOpacity&&(t.vmapOpacity=1),this.setLayerOpacity(t,e?t.vmapOpacity:0))}setLayerOpacity(t,e){if(!t)return;const s="number"==typeof e?e:e.opacity??1,i="number"==typeof e?e:e.fillOpacity??s,o=(t,e)=>{if(!(e in r))return!1;const s=r[e];return"function"==typeof s&&t instanceof s};var a;o(a=t,"GeoJSON")||o(a,"LayerGroup")?t.eachLayer((t=>this.setLayerOpacity(t,e))):(t=>o(t,"Path"))(t)?t.setStyle({opacity:s,fillOpacity:i}):((t=>o(t,"Marker"))(t)||"setOpacity"in t)&&t.setOpacity(s)}async ensureGroup(t,e,s){await this._ensureGroup(t,e)}async _ensureGroup(t,e){let s=await this._getLayerGroupById(t);return s||(s=r.layerGroup(),s._groupId=t,s.visible=!0,s.addTo(this.map),this.layers.push(s)),this.setGroupVisible(t,void 0===e||e),s}async _getLayerGroupById(t){if(!this.map)return null;let e=this.layers.find((e=>e instanceof r.LayerGroup&&e._groupId===t));return e||(e=this.hiddenLayerGroups.find((e=>e._groupId===t)),e)?e:null}async setGroupVisible(t,e){const s=await this._getLayerGroupById(t);if(s){if(s.visible===e)return;!1===s.visible?(s.addTo(this.map),this.hiddenLayerGroups=this.hiddenLayerGroups.filter((e=>e._groupId!==t)),s.visible=e):!0===s.visible&&(this.map.removeLayer(s),s.visible=e,this.hiddenLayerGroups.push(s))}}async updateWKTLayer(t,e){if(!(t instanceof r.GeoJSON))return;let s=null;if(e.wkt)s=await this.wktToGeoJSON(e.wkt);else if(e.url)try{const t=await fetch(e.url);if(!t.ok)throw new Error(`Failed to fetch WKT: ${t.status}`);const i=await t.text();s=await this.wktToGeoJSON(i)}catch(t){return void o("Failed to load WKT from URL:",t)}if(s){t.clearLayers();const i=t;i.options.style=this.createLeafletStyle(e.style),i.options.pointToLayer=(t,s)=>this.createLeafletPoint(t,s,e.style),i.options.onEachFeature=(t,s)=>this.bindLeafletPopup(t,s,e.style),i.addData(s)}}async createWKTLayer(t){let e=null;const s={type:"FeatureCollection",features:[]};if(t.wkt)e=await this.wktToGeoJSON(t.wkt);else if(t.url)try{const s=await fetch(t.url);if(!s.ok)throw new Error(`Failed to fetch WKT: ${s.status}`);const i=await s.text();e=await this.wktToGeoJSON(i)}catch(t){o("Failed to load WKT from URL:",t),e=s}else e=s;a("[Leaflet WKT] Creating layer with GeoJSON data:",e),a("[Leaflet WKT] Config:",t);let i={};if(t.geostylerStyle)i=await this.createGeostylerLeafletOptions(t.geostylerStyle);else{const e=t.style?{...n,...t.style}:n;i={style:this.createLeafletStyle(e),pointToLayer:(t,s)=>this.createLeafletPoint(t,s,e),onEachFeature:(t,s)=>this.bindLeafletPopup(t,s,e)}}a("[Leaflet WKT] Layer options:",i);const c=r.geoJSON(e,i);return a("[Leaflet WKT] Created layer:",c),"function"==typeof c.getBounds&&a("[Leaflet WKT] Layer bounds:",c.getBounds()),c}async wktToGeoJSON(t){try{const e=u.wellknown.parse(t);if(!e)throw new Error("Failed to parse WKT - returned null");const s={type:"Feature",geometry:e,properties:{}};return a("[Leaflet WKT] Input WKT:",t),a("[Leaflet WKT] Generated GeoJSON:",JSON.stringify(s,null,2)),{type:"FeatureCollection",features:[s]}}catch(e){return o("[Leaflet WKT] Failed to parse WKT:",t,e),{type:"FeatureCollection",features:[]}}}async createGeoTIFFLayer(t){if(!t.url)throw new Error("GeoTIFF layer requires a URL");try{const e=new d({url:t.url,tileSize:256,colorMap:t.colorMap,valueRange:t.valueRange,nodata:t.nodata,resolution:t.resolution,resampleMethod:t.resampleMethod,viewProjection:this.map.options.crs.code});return void 0!==t.opacity&&e.setOpacity?.(t.opacity),void 0!==t.zIndex&&e.setZIndex?.(t.zIndex),e}catch(t){return o("Failed to create GeoTIFF layer:",t),r.layerGroup([])}}async updateGeoTIFFLayer(t,e){if(!e.url)throw new Error("GeoTIFF update requires a URL");if(!t)return;if(!(t instanceof d))return;const s=e;await t.updateSource({url:e.url,colorMap:e.colorMap,valueRange:e.valueRange,nodata:e.nodata,resolution:s.resolution,resampleMethod:s.resampleMethod})}async createWCSLayer(t){if(!t.url)throw new Error("WCS layer requires a URL");if(!t.coverageName)throw new Error("WCS layer requires a coverageName");try{const e={url:t.url,coverageName:t.coverageName,version:t.version??"2.0.1",format:t.format??"image/tiff",projection:t.projection??"EPSG:4326",params:t.params};t.tileSize&&(e.tileSize=t.tileSize),void 0!==t.minZoom&&(e.minZoom=t.minZoom),void 0!==t.maxZoom&&(e.maxZoom=t.maxZoom);const s=new w(e);return void 0!==t.opacity&&s.setOpacity?.(t.opacity),void 0!==t.zIndex&&s.setZIndex?.(t.zIndex),s}catch(t){return o("[Leaflet WCS] Failed to create WCS layer:",t),r.layerGroup([])}}async updateWCSLayer(t,e){if(t&&t instanceof w){const s={};e.url&&(s.url=e.url),e.coverageName&&(s.coverageName=e.coverageName),e.version&&(s.version=e.version),e.format&&(s.format=e.format),e.projection&&(s.projection=e.projection),e.params&&(s.params=e.params),t.updateOptions(s)}}async createGeostylerLeafletOptions(t){const e=(t,e)=>null==t||"object"==typeof t&&t.name?e:t;return{style:s=>{const i=s?.geometry?.type;let r={};if(t.rules)for(const s of t.rules)if(s.symbolizers)for(const t of s.symbolizers)switch(t.kind){case"Fill":if("Polygon"===i||"MultiPolygon"===i){const s=e(t.color,"rgba(0,100,255,0.3)"),i=e(t.opacity,.3),o=e(t.outlineColor,"rgba(0,100,255,1)"),a=e(t.outlineWidth,1);r={...r,fillColor:s,fillOpacity:i,color:o,weight:a}}break;case"Line":const s=e(t.color,"rgba(0,100,255,1)"),o=e(t.width,2),a=t.dasharray&&Array.isArray(t.dasharray)?t.dasharray.map((t=>e(t,0))).join(","):void 0;r={...r,color:s,weight:o,dashArray:a}}return r},pointToLayer:(s,i)=>{if(t.rules)for(const s of t.rules)if(s.symbolizers)for(const t of s.symbolizers)switch(t.kind){case"Mark":const s=e(t.color,"rgba(0,100,255,1)"),o=e(t.radius,6),a=e(t.strokeColor,"rgba(0,100,255,1)"),n=e(t.strokeWidth,2);return r.circleMarker(i,{radius:o,fillColor:s,fillOpacity:1,color:a,weight:n});case"Icon":const c=e(t.image),l=e(t.size,32);if(c&&"string"==typeof c){const t=r.icon({iconUrl:c,iconSize:[l,l],iconAnchor:[l/2,l]});return r.marker(i,{icon:t})}}return r.circleMarker(i,{radius:6,fillColor:"rgba(0,100,255,1)",fillOpacity:1,color:"rgba(0,100,255,1)",weight:2})},onEachFeature:(s,i)=>{if(t.rules)for(const r of t.rules)if(r.symbolizers)for(const t of r.symbolizers)if("Text"===t.kind){const r=t.label;if(r&&"string"==typeof r&&s.properties&&s.properties[r]){const o=String(s.properties[r]),a=e(t.color,"#000000"),n=e(t.size,12);i.bindTooltip(`<div style="color: ${a}; font-size: ${n}px; font-family: Arial, sans-serif;">${o}</div>`,{permanent:!0,direction:"center",className:"leaflet-tooltip-custom"})}}}}}createLeafletStyle(t){return e=>{const s=e?.geometry?.type,i=t?.fillColor??"rgba(0,100,255,0.3)",r=t?.fillOpacity??.3,o=t?.strokeColor??"rgba(0,100,255,1)",a=t?.strokeOpacity??1,n=t?.strokeWidth??2;return"Polygon"===s||"MultiPolygon"===s?{fillColor:i,fillOpacity:r,color:o,opacity:a,weight:n,dashArray:t?.strokeDashArray?t.strokeDashArray.join(","):void 0}:"LineString"===s||"MultiLineString"===s?{color:o,opacity:a,weight:n,dashArray:t?.strokeDashArray?t.strokeDashArray.join(","):void 0}:{}}}createLeafletPoint(t,e,s){let i={...s??{}};if(s?.styleFunction){const e=s.styleFunction(t);e&&(i={...s,...e})}if(i?.iconUrl){const t=i.iconSize||[32,32],s=r.icon({iconUrl:i.iconUrl,iconSize:t,iconAnchor:i.iconAnchor||[t[0]/2,t[1]]});return r.marker(e,{icon:s})}{const t=i?.pointColor??"rgba(0,100,255,1)",s=i?.pointOpacity??1;return r.circleMarker(e,{radius:i?.pointRadius??6,fillColor:t,fillOpacity:s,color:i?.strokeColor??"rgba(0,100,255,1)",opacity:i?.strokeOpacity??1,weight:i?.strokeWidth??2})}}bindLeafletPopup(t,e,s){if(s?.textProperty&&t.properties&&t.properties[s.textProperty]){const i=String(t.properties[s.textProperty]);e.bindTooltip(`<div style="color: ${s?.textColor??"#000000"}; font-size: ${s?.textSize??12}px; font-family: Arial, sans-serif;">${i}</div>`,{permanent:!0,direction:"center",className:"leaflet-tooltip-custom"})}}async createWFSLayer(t){const e=await this.fetchWFSFromUrl(t);let s={};if(t.geostylerStyle)s=await this.createGeostylerLeafletOptions(t.geostylerStyle);else{const e=t.style?{...n,...t.style}:n;s={style:this.createLeafletStyle(e),pointToLayer:(t,s)=>this.createLeafletPoint(t,s,e),onEachFeature:(t,s)=>this.bindLeafletPopup(t,s,e)}}return r.geoJSON(e,s)}async updateWFSLayer(t,e){const s=await this.fetchWFSFromUrl(e);t.clearLayers(),t.addData(s)}async fetchWFSFromUrl(t){const e={service:"WFS",request:"GetFeature",version:t.version??"1.1.0",typeName:t.typeName,outputFormat:t.outputFormat??"application/json",srsName:t.srsName??"EPSG:4326",...t.params??{}},s=this.appendParams(t.url,e),i=await fetch(s);if(!i.ok)throw new Error(`WFS request failed (${i.status} ${i.statusText})`);const r=(t.outputFormat??"application/json").toLowerCase();if(r.includes("json")||r.includes("geojson")||"application/json"===r)return await i.json();if(r.includes("gml")||r.includes("xml")){const t=await i.text(),e=new f;return await e.parse(t)}return await i.json()}appendParams(t,e){const s=new URLSearchParams;return Object.entries(e).forEach((([t,e])=>{null!=e&&s.set(t,String(e))})),s.toString()?`${t}${t.includes("?")?"&":"?"}${s.toString()}`:t}getMap(){return this.map}}export{g as LeafletProvider}
1
+ import{i as t,L as e,s as i,w as s}from"./v-map2.js";import*as r from"leaflet";import{e as o,l as n}from"./logger.js";import{D as a}from"./styleconfig.js";import{l as c,G as l,g as h}from"./geotiff-source.js";import{w as u}from"./index5.js";import{GmlParser as f}from"./index.browser.js";const p=256;class y extends r.GridLayer{apiKey;highDpi;sessionRequest;scaleFactor;sessionToken;sessionPromise;sessionRefreshId;previousViewport;currentAttribution;mapInstance;onMoveEnd;constructor(t){super(),this.applyInitialGridOptions(t);const{apiKey:e,mapType:i,language:s,region:r,imageFormat:o,scale:n,highDpi:a,layerTypes:c,overlay:l,styles:h,apiOptions:u}=t;if(!e)throw new Error("Google Map Tiles layer requires an apiKey");this.apiKey=e,this.highDpi=a??(void 0===n||"scaleFactor1x"!==n),this.scaleFactor=this.mapScaleToFactor(n,this.highDpi);const f={mapType:i??"roadmap",language:s??"en-US",region:r??"US"};o&&(f.imageFormat=o),c?.length&&(f.layerTypes=c),u?.length&&(f.apiOptions=u),Array.isArray(h)&&h.length>0&&(f.styles=h),!0===l&&(f.overlay=!0);const p=n??(this.scaleFactor>1?this.factorToScale(this.scaleFactor):void 0);p&&(f.scale=p),this.highDpi&&(f.highDpi=!0),this.sessionRequest=f,this.onMoveEnd=()=>{this.updateAttribution()},this.sessionPromise=this.startSessionFetch()}onAdd(t){return this.mapInstance=t,t.on("moveend",this.onMoveEnd),t.on("zoomend",this.onMoveEnd),this.ensureSession().then((()=>this.updateAttribution())),super.onAdd(t)}onRemove(t){return t.off("moveend",this.onMoveEnd),t.off("zoomend",this.onMoveEnd),this.clearSessionRefresh(),this.removeCurrentAttribution(),this.mapInstance=void 0,super.onRemove(t)}createTile(t,e){const i=document.createElement("img");i.decoding="async",i.alt="",i.crossOrigin="anonymous";const s=this.resolveTileSize();i.width=s.x,i.height=s.y;const r=t=>{const s=t instanceof Error?t.message:"Google tile load error";e(new Error(s),i)};return i.onload=()=>e(null,i),i.onerror=t=>{const e=t instanceof ErrorEvent?t.error??new Error(t.message):new Error("Google tile failed to load");r(e)},this.ensureSession().then((()=>{this.sessionToken?i.src=this.buildTileUrl(t):r(new Error("Google Maps session unavailable"))})).catch((t=>{r(t)})),i}ensureSession(){return this.sessionToken?Promise.resolve():(this.sessionPromise||(this.sessionPromise=this.startSessionFetch()),this.sessionPromise)}startSessionFetch(t=!1){if(this.sessionPromise&&!t)return this.sessionPromise;const e=this.fetchAndApplySession().catch((t=>{const e=t instanceof Error?t:new Error("Failed to create Google Maps session");throw o("Google Map Tiles session error",e),this.sessionToken=void 0,e})).finally((()=>{this.sessionPromise===e&&(this.sessionPromise=void 0)}));return this.sessionPromise=e,e}async fetchAndApplySession(){const t=`https://tile.googleapis.com/v1/createSession?key=${this.apiKey}`,e=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.sessionRequest)});if(!e.ok){let t;try{const i=await e.json();t=i?.error?.message}catch{}throw new Error(t??`Google Maps session request failed (${e.status})`)}const i=await e.json();this.sessionToken=i.session,this.applyTileSize(i),this.scheduleSessionRefresh(this.parseExpiry(i.expiry)),this.mapInstance&&(this.updateAttribution(),this.redrawLayer()),n("Google Map Tiles session established")}scheduleSessionRefresh(t){if(!isFinite(t))return;const e=Math.max(t-Date.now()-6e4,1e3);this.clearSessionRefresh(),this.sessionRefreshId=setTimeout((()=>{this.startSessionFetch(!0).then((()=>{this.mapInstance&&(this.updateAttribution(),this.redrawLayer())}))}),e)}clearSessionRefresh(){void 0!==this.sessionRefreshId&&(clearTimeout(this.sessionRefreshId),this.sessionRefreshId=void 0)}async updateAttribution(){if(!this.mapInstance||!this.sessionToken)return;const t=this.mapInstance.getBounds();if(!t?.isValid())return;const e=`zoom=${this.mapInstance.getZoom()}&north=${t.getNorth()}&south=${t.getSouth()}&east=${t.getEast()}&west=${t.getWest()}`;if(this.previousViewport!==e){this.previousViewport=e;try{const t=await fetch(`https://tile.googleapis.com/tile/v1/viewport?session=${this.sessionToken}&key=${this.apiKey}&${e}`);if(!t.ok)throw new Error(`Attribution request failed (${t.status})`);const i=await t.json(),s=i?.copyright;"string"==typeof s&&s.length>0&&this.applyAttribution(s)}catch(t){o("Failed to fetch Google attribution",t)}}}applyAttribution(t){const e=this.mapInstance;e?.attributionControl&&(this.currentAttribution&&this.currentAttribution!==t&&e.attributionControl.removeAttribution(this.currentAttribution),this.currentAttribution&&this.currentAttribution===t||(e.attributionControl.addAttribution(t),this.currentAttribution=t))}removeCurrentAttribution(){const t=this.mapInstance;t?.attributionControl&&this.currentAttribution&&(t.attributionControl.removeAttribution(this.currentAttribution),this.currentAttribution=void 0)}applyTileSize(t){const e=Math.max(1,Math.round(t.tileWidth/this.scaleFactor)),i=Math.max(1,Math.round(t.tileHeight/this.scaleFactor)),s=r.point(e,i);this.setGridOptions({tileSize:s})}parseExpiry(t){const e=parseInt(t,10);return Number.isFinite(e)?1e3*e:Number.NaN}buildTileUrl(t){if(!this.sessionToken)throw new Error("Google Maps session missing");return`https://tile.googleapis.com/v1/2dtiles/${t.z}/${t.x}/${t.y}?session=${this.sessionToken}&key=${this.apiKey}`}mapScaleToFactor(t,e){switch(t){case"scaleFactor4x":return 4;case"scaleFactor2x":return 2;case"scaleFactor1x":return 1;default:return e?2:1}}factorToScale(t){switch(t){case 4:return"scaleFactor4x";case 2:return"scaleFactor2x";case 1:return"scaleFactor1x";default:return}}applyInitialGridOptions(t){const e={},i=["attribution","bounds","className","detectRetina","errorTileUrl","keepBuffer","maxNativeZoom","maxZoom","minNativeZoom","minZoom","noWrap","opacity","pane","reuseTiles","subdomains","tileSize","tms","updateInterval","updateWhenIdle","updateWhenZooming","zIndex","zoomOffset"];for(const s of i){const i=t[s];void 0!==i&&(e[s]=i)}void 0===e.maxZoom&&(e.maxZoom=22),this.setGridOptions(e)}setGridOptions(t){const e=r.Util?.setOptions;if("function"==typeof e)e(this,t);else{const e=this;e.options={...e.options,...t}}}resolveTileSize(){const t=this.options?.tileSize;if(t&&"object"==typeof t){if(Array.isArray(t)&&2===t.length){const[e,i]=t;return r.point(Number(e)||p,Number(i)||p)}if("x"in t&&"y"in t){const e=t;return r.point(Number(e.x)||p,Number(e.y)||p)}}return"number"==typeof t&&Number.isFinite(t)?r.point(t,t):r.point(p,p)}redrawLayer(){this.redraw()}}class d extends r.GridLayer{geotiffOptions;tileProcessor=null;colorStops;loadingPromise;defaultResolution=1;defaultResample="bilinear";constructor(t){super(t),this.geotiffOptions={...t}}onAdd(t){return super.onAdd(t),this.ensureReady().then((()=>this.redraw())),this}createTile(t,e){const i=this.getTileSize(),s=r.DomUtil.create("canvas","leaflet-tile");return s.width=i.x,s.height=i.y,this.ensureReady().then((async()=>{if(this.tileProcessor)try{const r=await this.tileProcessor.getTileData({x:t.x,y:t.y,z:t.z,tileSize:i.x,resolution:this.geotiffOptions.resolution??this.defaultResolution,resampleMethod:this.geotiffOptions.resampleMethod??this.defaultResample,colorStops:this.colorStops});if(!r)return void e(null,s);const o=s.getContext("2d");if(o){const t=o.createImageData(i.x,i.y);t.data.set(r),o.putImageData(t,0,0)}e(null,s)}catch(t){e(t,s)}else e(null,s)})).catch((t=>{e(t,s)})),s}async ensureReady(){return this.loadingPromise||(this.loadingPromise=this.initializeProcessor()),this.loadingPromise}async updateSource(t){Object.assign(this.geotiffOptions,t),this.tileProcessor=null,this.colorStops=void 0,this.loadingPromise=void 0,await this.ensureReady(),this.redraw()}async initializeProcessor(){if(this.tileProcessor)return;const[t,{default:e},i]=await Promise.all([import("./geotiff.js").then((function(t){return t.g})),import("./index4.js"),import("./main-dist.js").then((function(t){return t.m}))]),s=await c(this.geotiffOptions.url,{projection:void 0,forceProjection:!1,nodata:this.geotiffOptions.nodata},{geotiff:t,proj4:e,geokeysToProj4:i}),r=t=>{const e=s.proj4(s.fromProjection,this.geotiffOptions.viewProjection,t);return[Number(e[0]),Number(e[1])]};if(this.tileProcessor=new l({transformViewToSourceMapFn:t=>{const e=s.proj4(this.geotiffOptions.viewProjection,s.fromProjection,t);return[Number(e[0]),Number(e[1])]},transformSourceMapToViewFn:r,sourceBounds:s.sourceBounds,sourceRef:s.sourceRef,resolution:s.resolution,imageWidth:s.width,imageHeight:s.height,fromProjection:s.fromProjection,toProjection:this.geotiffOptions.viewProjection,baseImage:s.baseImage,overviewImages:s.overviewImages??[]}),this.tileProcessor.createGlobalTriangulation(),this.setViewBounds(s.sourceBounds,r),this.geotiffOptions.colorMap){const{stops:t}=h(this.geotiffOptions.colorMap,this.geotiffOptions.valueRange);this.colorStops=t}}setViewBounds(t,e){const[i,s,o,n]=t,a=e([i,s]),c=e([o,s]),l=e([i,n]),h=e([o,n]),u=Math.min(a[0],c[0],l[0],h[0]),f=Math.max(a[0],c[0],l[0],h[0]),p=Math.min(a[1],c[1],l[1],h[1]),y=Math.max(a[1],c[1],l[1],h[1]),d=r.CRS.EPSG3857.unproject(r.point(u,y)),m=r.CRS.EPSG3857.unproject(r.point(f,p));this.options.bounds=r.latLngBounds(d,m)}}const m="v-map - leaflet - wcs - tile - ";class w extends r.GridLayer{wcsOptions;constructor(t){super(t),this.wcsOptions={...t,version:t.version??"2.0.1",format:t.format??"image/tiff",projection:t.projection??"EPSG:4326"}}buildWCSUrl(t){const{url:e,coverageName:i,version:s,format:r,projection:o,params:n}=this.wcsOptions,a=this._tileCoordsToBounds(t),c=a.getSouthWest(),l=a.getNorthEast(),h=c.lng,u=c.lat,f=l.lng,p=l.lat,y={SERVICE:"WCS",REQUEST:"GetCoverage",VERSION:s,FORMAT:r};if(s.startsWith("2.0")){y.coverageId=i;const t=n?{...n}:{},s={...y,...t};(r.includes("tiff")||r.includes("geotiff"))&&(s["geotiff:compression"]="LZW");const o=new URLSearchParams;Object.entries(s).forEach((([t,e])=>{null!=e&&o.set(t,String(e))}));const a=o.toString(),c=`subset=X(${h},${f})`,l=`subset=Y(${u},${p})`;return`${e}${e.includes("?")?"&":"?"}${a}&${c}&${l}`}{y.COVERAGE=i,y.BBOX=`${h},${u},${f},${p}`,y.CRS=o;const t=this.getTileSize();y.WIDTH="number"==typeof t?t:t.x,y.HEIGHT="number"==typeof t?t:t.y;const s=n?{...n}:{},r={...y,...s},a=new URLSearchParams;return Object.entries(r).forEach((([t,e])=>{null!=e&&a.set(t,String(e))})),`${e}${e.includes("?")?"&":"?"}${a.toString()}`}}createTile(t,e){const i=document.createElement("img"),s=this.buildWCSUrl(t);return n(`${m}load: coords=(${t.x},${t.y},${t.z})`),n(`${m}url: ${s}`),i.onload=()=>{e(null,i)},i.onerror=t=>{o(`${m}failed to load tile:`,t),e(t instanceof Error?t:new Error(String(t)),i)},i.crossOrigin="anonymous",i.src=s,i}updateOptions(t){this.wcsOptions={...this.wcsOptions,...t},this.redraw()}}class g{map;layers=[];baseLayers=[];hiddenLayerGroups=[];googleLogoAdded=!1;unsubscribeResize;shadowRoot;injectedStyle;layerErrorCallbacks=new Map;layerErrorCleanups=new Map;async init(o){if(!t())return;this.shadowRoot=o.shadowRoot,this.injectedStyle=function(s,o){if(t()){switch(s){case"cdn":return function(i,s=e,o="jsdelivr"){if(!t())return;const n="unpkg"===o?`https://unpkg.com/leaflet@${s}/dist/leaflet.css`:`https://cdn.jsdelivr.net/npm/leaflet@${s}/dist/leaflet.css`;r.Icon.Default.imagePath="unpkg"===o?`https://unpkg.com/npm/leaflet@${s}/dist/images/`:`https://cdn.jsdelivr.net/npm/leaflet@${s}/dist/images/`;const a=i??document;if(a.querySelector?.(`link[rel="stylesheet"][href="${n}"]`)||document.head.querySelector(`link[rel="stylesheet"][href="${n}"]`))return null;const c=document.createElement("link");return c.rel="stylesheet",c.href=n,(i??document.head).appendChild(c),c}(o);case"inline-min":return function(e){if(!t())return;const s="\n :host { display:block; }\n #map { width:100%; height:100%; display:block; }\n ";if(i()){const t=new CSSStyleSheet;t.replaceSync(s);const i=e??document;return i.adoptedStyleSheets=[...i.adoptedStyleSheets??[],t],null}{const t=document.createElement("style");return t.textContent=s,(e??document.head).appendChild(t),t}}(o)}return null}}(o.cssMode,this.shadowRoot);const[n,a]=o?.mapInitOptions?.center??[0,0];this.map=r.map(o.target,{zoomControl:!0,attributionControl:!0}).setView([a,n],o?.mapInitOptions?.zoom??2),this.unsubscribeResize=s(o.target,(()=>{this.map?.invalidateSize()}),{attributes:!0,attributeFilter:["style","class"]})}async updateLayer(t,e){const i=await this._getLayerById(t);switch(e.type){case"geojson":await this.updateGeoJSONLayer(i,e.data);break;case"osm":await this.updateOSMLayer(i,e.data);break;case"arcgis":await this.updateArcGISLayer(i,e.data);break;case"wkt":await this.updateWKTLayer(i,e.data);break;case"geotiff":await this.updateGeoTIFFLayer(i,e.data);break;case"wcs":await this.updateWCSLayer(i,e.data);break;case"wfs":i instanceof r.GeoJSON&&await this.updateWFSLayer(i,e.data)}}async addLayerToGroup(t){const e=await this._ensureGroup(t.groupId,t.groupVisible),i=await this.createLayer(t);if(null==i)return null;e.addLayer(i);const s=this.getLayerId(i);return i.vmapVisible=!0,i.vmapOpacity=1,void 0!==t.opacity&&this.setOpacityByLayer(i,t.opacity),void 0!==t.zIndex&&i.setZIndex?.(t.zIndex),t.visible?this.setVisibleByLayer(i,!0):!1===t.visible&&this.setVisibleByLayer(i,!1),s}async addBaseLayer(t,e,i){if(null==i)return n("leaflet - addBaseLayer - layerElementId not set."),null;null==e&&n("leaflet - addBaseLayer - basemapid not set.");const s=await this._ensureGroup(t.groupId,t.groupVisible);s.basemap=!0;const r=await this.createLayer(t);if(this.baseLayers.push(r),null==r)return null;r.layerElementId=i;const o=this.getLayerId(r);if(r.vmapVisible=!0,r.vmapOpacity=1,void 0!==t.opacity&&this.setOpacityByLayer(r,t.opacity),void 0!==t.zIndex&&r.setZIndex?.(t.zIndex),t.visible?this.setVisibleByLayer(r,!0):!1===t.visible&&this.setVisibleByLayer(r,!1),e===i){const t=s.getLayers()[0];t&&(this.map.removeLayer(t),s.clearLayers()),s.addLayer(r),s.visible&&r.addTo(this.map)}return o}async setBaseLayer(t,e){if(null===e)return void n("leaflet - setBaseLayer - layerElementId is null.");const i=this.layers.find((e=>e._groupId===t)),s=this.baseLayers.find((t=>t.layerElementId===e));if(void 0===s)return void n("leaflet - setBaseLayer - layer not found. layerElementId: "+e);if(!i)return;const r=i.getLayers()[0];r&&(this.map.removeLayer(r),i.clearLayers()),i.addLayer(s)}getLayerId(t){return String(r.Util.stamp(t))}normalizeAttribution(t){return Array.isArray(t)?t.join(", "):t}async _getLayerById(t){let e=null;return this.map?.eachLayer((i=>{this.getLayerId(i)===t&&(e=i)})),e||(e=this.baseLayers.find((e=>this.getLayerId(e)===t))??null,void 0===e?null:e)}async createLayer(t){switch(t.type){case"geojson":return this.createGeoJSONLayer(t);case"xyz":return this.createXYZLayer(t);case"osm":return this.createOSMLayer(t);case"wms":return this.createWMSLayer(t);case"wcs":return this.createWCSLayer(t);case"wfs":return this.createWFSLayer(t);case"arcgis":return this.createArcGISLayer(t);case"google":return this.createGoogleLayer(t);case"wkt":return this.createWKTLayer(t);case"geotiff":return this.createGeoTIFFLayer(t);default:throw new Error(`Unsupported layer type: ${t.type}`)}}async updateGeoJSONLayer(t,e){if(!(t instanceof r.GeoJSON))return;let i=null;if(e.geojson)i=JSON.parse(e.geojson);else if(e.url){const t=await fetch(e.url);if(!t.ok)throw new Error(`GeoJSON fetch failed: ${t.status} ${t.statusText}`);i=await t.json()}t.clearLayers(),t.addData(i)}async createGeoJSONLayer(t){let e=null;if(t.geojson)e=JSON.parse(t.geojson);else if(t.url){const i=await fetch(t.url);if(!i.ok)throw new Error(`GeoJSON fetch failed: ${i.status} ${i.statusText}`);e=await i.json()}if(e){let i={};if(t.geostylerStyle)i=await this.createGeostylerLeafletOptions(t.geostylerStyle);else{const e=t.style?{...a,...t.style}:a;i={style:this.createLeafletStyle(e),pointToLayer:(t,i)=>this.createLeafletPoint(t,i,e),onEachFeature:(t,i)=>this.bindLeafletPopup(t,i,e)}}return r.geoJSON(e,i)}return null}async createXYZLayer(t){return r.tileLayer(t.url,{attribution:this.normalizeAttribution(t.attributions),maxZoom:t.maxZoom??19,...t.options??{}})}async updateOSMLayer(t,e){if(!("setUrl"in t)||"function"!=typeof t.setUrl)return;let i="https://tile.openstreetmap.org/{z}/{x}/{y}.png";e.url&&(i=e.url+"/{z}/{x}/{y}.png"),t.setUrl(i)}async createOSMLayer(t){let e="https://tile.openstreetmap.org/{z}/{x}/{y}.png";return t.url&&(e=t.url+"/{z}/{x}/{y}.png"),r.tileLayer(e,{attribution:"© OpenStreetMap contributors",maxZoom:19})}async createWMSLayer(t){return r.tileLayer.wms(t.url,{layers:t.layers,format:t.format??"image/png",transparent:t.transparent??!0,...t.extraParams??{}})}buildArcGISUrl(t,e){if(!e||0===Object.keys(e).length)return t;const i=new URLSearchParams;return Object.entries(e).forEach((([t,e])=>{null!=e&&i.set(t,String(e))})),0===i.toString().length?t:`${t}${t.includes("?")?"&":"?"}${i.toString()}`}async createArcGISLayer(t){const e={...t.params??{}};t.token&&(e.token=t.token);const i=this.buildArcGISUrl(t.url,e),s={attribution:this.normalizeAttribution(t.attributions),minZoom:t.minZoom,maxZoom:t.maxZoom,...t.options??{}};return r.tileLayer(i,s)}async updateArcGISLayer(t,e){const i={...e?.params??{}};e?.token&&(i.token=e.token);const s=t,r=this.buildArcGISUrl(e?.url??s.options?.url??"",i);"setUrl"in s&&"function"==typeof s.setUrl&&s.setUrl(r)}async createGoogleLayer(t){if(!this.map)throw new Error("Map not initialized");if(!t.apiKey)throw new Error("Google-Layer benötigt 'apiKey' (Google Maps Platform).");const e="string"==typeof t.styles?this.tryParseStyles(t.styles):t.styles,i=new y({apiKey:t.apiKey,mapType:t.mapType??"roadmap",language:t.language,region:t.region,scale:t.scale,highDpi:t.highDpi,layerTypes:t.layerTypes,overlay:t.overlay,styles:Array.isArray(e)?e:void 0,imageFormat:t.imageFormat,apiOptions:t.apiOptions,maxZoom:t.maxZoom??22});return o=()=>{this.googleLogoAdded=!0,n("v-map - provider - leaflet - googleLogoAdded: ",this.googleLogoAdded)},(s=this.map)._googleLogoAdded||(new(r.Control.extend({onAdd(){const t=r.DomUtil.create("img");return t.src="https://developers.google.com/static/maps/documentation/images/google_on_white.png",t.alt="Google",t.style.pointerEvents="none",t.style.height="18px",t.style.margin="0 0 6px 6px",t},onRemove(){}}))({position:"bottomleft"}).addTo(s),s._googleLogoAdded=!0,o()),i;var s,o}tryParseStyles(t){try{const e=JSON.parse(t);return Array.isArray(e)?e:void 0}catch{return void o("Failed to parse Google styles JSON")}}async destroy(){var t;this.unsubscribeResize?.(),t=this.injectedStyle,this.shadowRoot&&t&&t.remove();for(const t of this.layers)this.map?.removeLayer(t);this.layers=[],this.map?.remove(),this.map=void 0}async setView([t,e],i){this.map?.setView([e,t],i,{animate:!1})}getView(){if(!this.map)return null;const t=this.map.getCenter();return{center:[t.lng,t.lat],zoom:this.map.getZoom()}}onLayerError(t,e){this.layerErrorCallbacks.set(t,e),this._getLayerById(t).then((i=>{if(!i)return;const s=()=>{e({type:"network",message:"Tile load error"})};i.on("tileerror",s),this.layerErrorCleanups.set(t,(()=>i.off("tileerror",s)))}))}offLayerError(t){this.layerErrorCleanups.get(t)?.(),this.layerErrorCleanups.delete(t),this.layerErrorCallbacks.delete(t)}async removeLayer(t){if(!t)return;this.offLayerError(t);const e=await this._getLayerById(t);e&&this.map.removeLayer(e)}async setZIndex(t,e){if(!t)return;const i=await this._getLayerById(t);i&&"function"==typeof i.setZIndex&&i.setZIndex(e)}async setOpacity(t,e){if(!t)return;const i=await this._getLayerById(t);this.setOpacityByLayer(i,e)}setOpacityByLayer(t,e){t&&(t.vmapOpacity=e,void 0===t.vmapVisible&&(t.vmapVisible=!0),!1!==t.vmapVisible&&this.setLayerOpacity(t,e))}async setVisible(t,e){if(!t)return;const i=await this._getLayerById(t);this.setVisibleByLayer(i,e)}setVisibleByLayer(t,e){t&&(t.vmapVisible=e,void 0===t.vmapOpacity&&(t.vmapOpacity=1),this.setLayerOpacity(t,e?t.vmapOpacity:0))}setLayerOpacity(t,e){if(!t)return;const i="number"==typeof e?e:e.opacity??1,s="number"==typeof e?e:e.fillOpacity??i,o=(t,e)=>{if(!(e in r))return!1;const i=r[e];return"function"==typeof i&&t instanceof i};var n;o(n=t,"GeoJSON")||o(n,"LayerGroup")?t.eachLayer((t=>this.setLayerOpacity(t,e))):(t=>o(t,"Path"))(t)?t.setStyle({opacity:i,fillOpacity:s}):((t=>o(t,"Marker"))(t)||"setOpacity"in t)&&t.setOpacity(i)}async ensureGroup(t,e,i){await this._ensureGroup(t,e)}async _ensureGroup(t,e){let i=await this._getLayerGroupById(t);return i||(i=r.layerGroup(),i._groupId=t,i.visible=!0,i.addTo(this.map),this.layers.push(i)),this.setGroupVisible(t,void 0===e||e),i}async _getLayerGroupById(t){if(!this.map)return null;let e=this.layers.find((e=>e instanceof r.LayerGroup&&e._groupId===t));return e||(e=this.hiddenLayerGroups.find((e=>e._groupId===t)),e)?e:null}async setGroupVisible(t,e){const i=await this._getLayerGroupById(t);if(i){if(i.visible===e)return;!1===i.visible?(i.addTo(this.map),this.hiddenLayerGroups=this.hiddenLayerGroups.filter((e=>e._groupId!==t)),i.visible=e):!0===i.visible&&(this.map.removeLayer(i),i.visible=e,this.hiddenLayerGroups.push(i))}}async updateWKTLayer(t,e){if(!(t instanceof r.GeoJSON))return;let i=null;if(e.wkt)i=await this.wktToGeoJSON(e.wkt);else if(e.url)try{const t=await fetch(e.url);if(!t.ok)throw new Error(`Failed to fetch WKT: ${t.status}`);const s=await t.text();i=await this.wktToGeoJSON(s)}catch(t){return void o("Failed to load WKT from URL:",t)}if(i){t.clearLayers();const s=t;s.options.style=this.createLeafletStyle(e.style),s.options.pointToLayer=(t,i)=>this.createLeafletPoint(t,i,e.style),s.options.onEachFeature=(t,i)=>this.bindLeafletPopup(t,i,e.style),s.addData(i)}}async createWKTLayer(t){let e=null;const i={type:"FeatureCollection",features:[]};if(t.wkt)e=await this.wktToGeoJSON(t.wkt);else if(t.url)try{const i=await fetch(t.url);if(!i.ok)throw new Error(`Failed to fetch WKT: ${i.status}`);const s=await i.text();e=await this.wktToGeoJSON(s)}catch(t){o("Failed to load WKT from URL:",t),e=i}else e=i;n("[Leaflet WKT] Creating layer with GeoJSON data:",e),n("[Leaflet WKT] Config:",t);let s={};if(t.geostylerStyle)s=await this.createGeostylerLeafletOptions(t.geostylerStyle);else{const e=t.style?{...a,...t.style}:a;s={style:this.createLeafletStyle(e),pointToLayer:(t,i)=>this.createLeafletPoint(t,i,e),onEachFeature:(t,i)=>this.bindLeafletPopup(t,i,e)}}n("[Leaflet WKT] Layer options:",s);const c=r.geoJSON(e,s);return n("[Leaflet WKT] Created layer:",c),"function"==typeof c.getBounds&&n("[Leaflet WKT] Layer bounds:",c.getBounds()),c}async wktToGeoJSON(t){try{const e=u.wellknown.parse(t);if(!e)throw new Error("Failed to parse WKT - returned null");const i={type:"Feature",geometry:e,properties:{}};return n("[Leaflet WKT] Input WKT:",t),n("[Leaflet WKT] Generated GeoJSON:",JSON.stringify(i,null,2)),{type:"FeatureCollection",features:[i]}}catch(e){return o("[Leaflet WKT] Failed to parse WKT:",t,e),{type:"FeatureCollection",features:[]}}}async createGeoTIFFLayer(t){if(!t.url)throw new Error("GeoTIFF layer requires a URL");try{const e=new d({url:t.url,tileSize:256,colorMap:t.colorMap,valueRange:t.valueRange,nodata:t.nodata,resolution:t.resolution,resampleMethod:t.resampleMethod,viewProjection:this.map.options.crs.code});return void 0!==t.opacity&&e.setOpacity?.(t.opacity),void 0!==t.zIndex&&e.setZIndex?.(t.zIndex),e}catch(t){return o("Failed to create GeoTIFF layer:",t),r.layerGroup([])}}async updateGeoTIFFLayer(t,e){if(!e.url)throw new Error("GeoTIFF update requires a URL");if(!t)return;if(!(t instanceof d))return;const i=e;await t.updateSource({url:e.url,colorMap:e.colorMap,valueRange:e.valueRange,nodata:e.nodata,resolution:i.resolution,resampleMethod:i.resampleMethod})}async createWCSLayer(t){if(!t.url)throw new Error("WCS layer requires a URL");if(!t.coverageName)throw new Error("WCS layer requires a coverageName");try{const e={url:t.url,coverageName:t.coverageName,version:t.version??"2.0.1",format:t.format??"image/tiff",projection:t.projection??"EPSG:4326",params:t.params};t.tileSize&&(e.tileSize=t.tileSize),void 0!==t.minZoom&&(e.minZoom=t.minZoom),void 0!==t.maxZoom&&(e.maxZoom=t.maxZoom);const i=new w(e);return void 0!==t.opacity&&i.setOpacity?.(t.opacity),void 0!==t.zIndex&&i.setZIndex?.(t.zIndex),i}catch(t){return o("[Leaflet WCS] Failed to create WCS layer:",t),r.layerGroup([])}}async updateWCSLayer(t,e){if(t&&t instanceof w){const i={};e.url&&(i.url=e.url),e.coverageName&&(i.coverageName=e.coverageName),e.version&&(i.version=e.version),e.format&&(i.format=e.format),e.projection&&(i.projection=e.projection),e.params&&(i.params=e.params),t.updateOptions(i)}}async createGeostylerLeafletOptions(t){const e=(t,e)=>null==t||"object"==typeof t&&t.name?e:t;return{style:i=>{const s=i?.geometry?.type;let r={};if(t.rules)for(const i of t.rules)if(i.symbolizers)for(const t of i.symbolizers)switch(t.kind){case"Fill":if("Polygon"===s||"MultiPolygon"===s){const i=e(t.color,"rgba(0,100,255,0.3)"),s=e(t.opacity,.3),o=e(t.outlineColor,"rgba(0,100,255,1)"),n=e(t.outlineWidth,1);r={...r,fillColor:i,fillOpacity:s,color:o,weight:n}}break;case"Line":const i=e(t.color,"rgba(0,100,255,1)"),o=e(t.width,2),n=t.dasharray&&Array.isArray(t.dasharray)?t.dasharray.map((t=>e(t,0))).join(","):void 0;r={...r,color:i,weight:o,dashArray:n}}return r},pointToLayer:(i,s)=>{if(t.rules)for(const i of t.rules)if(i.symbolizers)for(const t of i.symbolizers)switch(t.kind){case"Mark":const i=e(t.color,"rgba(0,100,255,1)"),o=e(t.radius,6),n=e(t.strokeColor,"rgba(0,100,255,1)"),a=e(t.strokeWidth,2);return r.circleMarker(s,{radius:o,fillColor:i,fillOpacity:1,color:n,weight:a});case"Icon":const c=e(t.image),l=e(t.size,32);if(c&&"string"==typeof c){const t=r.icon({iconUrl:c,iconSize:[l,l],iconAnchor:[l/2,l]});return r.marker(s,{icon:t})}}return r.circleMarker(s,{radius:6,fillColor:"rgba(0,100,255,1)",fillOpacity:1,color:"rgba(0,100,255,1)",weight:2})},onEachFeature:(i,s)=>{if(t.rules)for(const r of t.rules)if(r.symbolizers)for(const t of r.symbolizers)if("Text"===t.kind){const r=t.label;if(r&&"string"==typeof r&&i.properties&&i.properties[r]){const o=String(i.properties[r]),n=e(t.color,"#000000"),a=e(t.size,12);s.bindTooltip(`<div style="color: ${n}; font-size: ${a}px; font-family: Arial, sans-serif;">${o}</div>`,{permanent:!0,direction:"center",className:"leaflet-tooltip-custom"})}}}}}createLeafletStyle(t){return e=>{const i=e?.geometry?.type,s=t?.fillColor??"rgba(0,100,255,0.3)",r=t?.fillOpacity??.3,o=t?.strokeColor??"rgba(0,100,255,1)",n=t?.strokeOpacity??1,a=t?.strokeWidth??2;return"Polygon"===i||"MultiPolygon"===i?{fillColor:s,fillOpacity:r,color:o,opacity:n,weight:a,dashArray:t?.strokeDashArray?t.strokeDashArray.join(","):void 0}:"LineString"===i||"MultiLineString"===i?{color:o,opacity:n,weight:a,dashArray:t?.strokeDashArray?t.strokeDashArray.join(","):void 0}:{}}}createLeafletPoint(t,e,i){let s={...i??{}};if(i?.styleFunction){const e=i.styleFunction(t);e&&(s={...i,...e})}if(s?.iconUrl){const t=s.iconSize||[32,32],i=r.icon({iconUrl:s.iconUrl,iconSize:t,iconAnchor:s.iconAnchor||[t[0]/2,t[1]]});return r.marker(e,{icon:i})}{const t=s?.pointColor??"rgba(0,100,255,1)",i=s?.pointOpacity??1;return r.circleMarker(e,{radius:s?.pointRadius??6,fillColor:t,fillOpacity:i,color:s?.strokeColor??"rgba(0,100,255,1)",opacity:s?.strokeOpacity??1,weight:s?.strokeWidth??2})}}bindLeafletPopup(t,e,i){if(i?.textProperty&&t.properties&&t.properties[i.textProperty]){const s=String(t.properties[i.textProperty]);e.bindTooltip(`<div style="color: ${i?.textColor??"#000000"}; font-size: ${i?.textSize??12}px; font-family: Arial, sans-serif;">${s}</div>`,{permanent:!0,direction:"center",className:"leaflet-tooltip-custom"})}}async createWFSLayer(t){const e=await this.fetchWFSFromUrl(t);let i={};if(t.geostylerStyle)i=await this.createGeostylerLeafletOptions(t.geostylerStyle);else{const e=t.style?{...a,...t.style}:a;i={style:this.createLeafletStyle(e),pointToLayer:(t,i)=>this.createLeafletPoint(t,i,e),onEachFeature:(t,i)=>this.bindLeafletPopup(t,i,e)}}return r.geoJSON(e,i)}async updateWFSLayer(t,e){const i=await this.fetchWFSFromUrl(e);t.clearLayers(),t.addData(i)}async fetchWFSFromUrl(t){const e={service:"WFS",request:"GetFeature",version:t.version??"1.1.0",typeName:t.typeName,outputFormat:t.outputFormat??"application/json",srsName:t.srsName??"EPSG:4326",...t.params??{}},i=this.appendParams(t.url,e),s=await fetch(i);if(!s.ok)throw new Error(`WFS request failed (${s.status} ${s.statusText})`);const r=(t.outputFormat??"application/json").toLowerCase();if(r.includes("json")||r.includes("geojson")||"application/json"===r)return await s.json();if(r.includes("gml")||r.includes("xml")){const t=await s.text(),e=new f;return await e.parse(t)}return await s.json()}appendParams(t,e){const i=new URLSearchParams;return Object.entries(e).forEach((([t,e])=>{null!=e&&i.set(t,String(e))})),i.toString()?`${t}${t.includes("?")?"&":"?"}${i.toString()}`:t}getMap(){return this.map}}export{g as LeafletProvider}
@@ -1 +1 @@
1
- import e from"ol/Map";import t from"ol/View";import r from"ol/layer/Vector";import o from"ol/layer/Group";import s from"ol/layer/Tile";import n from"ol/layer/Image";import a from"ol/source/Vector";import i from"ol/source/TileWMS";import c from"ol/source/OSM";import l from"ol/source/XYZ";import u from"ol/source/Google";import f from"ol/source/TileArcGISRest";import w from"ol/Image";import y from"ol/source/Image";import h from"ol/format/GeoJSON";import m from"ol/format/GML2";import p from"ol/format/GML3";import g from"ol/format/GML32";import d from"ol/format/WKT";import b from"ol/control/Control";import S from"ol/style/Style";import L from"ol/style/Fill";import G from"ol/style/Stroke";import I from"ol/style/Circle";import j from"ol/style/Icon";import v from"ol/style/Text";import{bbox as E}from"ol/loadingstrategy";import{get as k,fromLonLat as F}from"ol/proj";import{D as $}from"./styleconfig.js";import{w as P,e as T,l as x}from"./logger.js";import{O as W}from"./v-map2.js";import C from"./index4.js";import O from"ol/source/GeoTIFF";import{g as M}from"./main-dist.js";import{register as R}from"ol/proj/proj4";import N from"ol/layer/WebGLTile";async function z(e){return class extends O{geoKeys_=null;constructor(){super(e)}async getGeoKeys(){if(null!==this.geoKeys_)return this.geoKeys_;await this.getView();const e=this.sourceImagery_;return e&&e.length>0&&this.determineGeoKeys(e),this.geoKeys_}determineGeoKeys(e){if(!e||0===e.length)return;const t=e[0];for(let e=t.length-1;e>=0;--e){const o="function"==typeof(r=t[e]).getGeoKeys?r.getGeoKeys()||null:r.geoKeys||null;if(o){this.geoKeys_=o;break}}var r}async getProjectionParameters(){const e=await this.getGeoKeys();return e?M.toProj4(e):null}async getProj4String(){const e=await this.getProjectionParameters();return e&&e.proj4||null}async registerProjectionIfNeeded(){try{const e=await this.getProj4String(),t=this.getProjection()?.getCode();return k(t)||(null===e?(P(`Can not get proj string for code: ${t}`),null):(C.defs(t,e),R(C),k(t)))}catch(e){return T("Fehler bei der Registrierung der Projektion:",e),null}}}}class A{map;layers=[];baseLayers=[];googleLogoAdded=!1;projection="EPSG:3857";layerErrorCallbacks=new globalThis.Map;layerErrorCleanups=new globalThis.Map;async init(r){await async function(e){if(!e)return;const t="ol-css-sheet";if(e.querySelector(`style[data-id="${t}"]`))return;const r=`https://cdn.jsdelivr.net/npm/ol@${W}/ol.css`,o=await(await fetch(r)).text();if("adoptedStyleSheets"in Document.prototype){const t=new CSSStyleSheet;await t.replace(o),e.adoptedStyleSheets=[...e.adoptedStyleSheets??[],t]}else{const r=document.createElement("style");r.setAttribute("data-id",t),r.textContent=o,e.appendChild(r)}}(r.shadowRoot),Object.assign(r.target.style,{width:"100%",height:"100%",position:"relative",background:"#fff"}),this.map=new e({target:r.target,layers:[],view:new t({projection:this.projection,center:F(r?.mapInitOptions?.center??[0,0]),zoom:r?.mapInitOptions?.zoom??2})}),new ResizeObserver((()=>this.map?.updateSize())).observe(r.target)}async destroy(){this.map?.setTarget(void 0),this.map=void 0}async updateLayer(e,t){const r=await this._getLayerById(e);switch(t.type){case"geojson":await this.updateGeoJSONLayer(r,t.data);break;case"osm":await this.updateOSMLayer(r,t.data);break;case"wms":await this.updateWMSLayer(r,t.data);break;case"wfs":await this.updateWFSLayer(r,t.data);break;case"wcs":await this.updateWCSLayer(r,t.data);break;case"arcgis":await this.updateArcGISLayer(r,t.data);break;case"wkt":await this.updateWKTLayer(r,t.data);break;case"geotiff":await this.updateGeoTIFFLayer(r,t.data)}}async ensureGroup(e,t,r){await this._ensureGroup(e,t)}async _ensureGroup(e,t){if(!this.map)return null;let r=this.layers.find((t=>t.get?.("groupId")===e));return r||(r=new o({layers:[],properties:{groupId:e,visible:void 0===typeof t||t}}),this.map.addLayer(r),this.layers.push(r)),r}async setBaseLayer(e,t){if(null===t)return void x("ol - setBaseLayer - layerElementId is null.");const r=this.layers.find((t=>t.get?.("groupId")===e)),o=this.baseLayers.find((e=>e.get("layerElementId")===t));void 0!==o?(r.getLayers().clear(),r.getLayers().push(o)):x("ol - setBaseLayer - layer not found. layerElementId: "+t)}async addBaseLayer(e,t,r){if(null==r)return x("ol - addBaseLayer - layerElementId not set."),null;null==t&&x("ol - addBaseLayer - basemapid not set.");const o=await this._ensureGroup(e.groupId,e.groupVisible);if(null==o)return null;o.set("basemap",!0,!1);const s=await this.createLayer(e);if(null==s)return null;s.set("group",o),this.baseLayers.push(s);let n=null;if(s){n=crypto.randomUUID(),s.set("id",n,!1),s.set("layerElementId",r,!1);const a=e;void 0!==a.opacity&&s.setOpacity(a.opacity),void 0!==a.zIndex&&s.setZIndex(a.zIndex),a.visible?s.setVisible(!0):!1===a.visible&&s.setVisible(!1),t===r&&(o.getLayers().clear(),o.getLayers().push(s))}return n}async addLayerToGroup(e){const t=await this._ensureGroup(e.groupId,e.groupVisible);if(null==t)return null;const r=await this.createLayer(e);if(null===r)return null;r.set("group",t),t.getLayers().push(r);const o=crypto.randomUUID();r.set("id",o,!1);const s=e;return void 0!==s.opacity&&r.setOpacity(s.opacity),void 0!==s.zIndex&&r.setZIndex(s.zIndex),s.visible?r.setVisible(!0):!1===s.visible&&r.setVisible(!1),o}async createLayer(e){switch(e.type){case"geojson":return this.createGeoJSONLayer(e);case"xyz":return this.createXYZLayer(e);case"google":return this.createGoogleLayer(e);case"osm":return this.createOSMLayer(e);case"wms":return this.createWMSLayer(e);case"wfs":return this.createWFSLayer(e);case"wcs":return this.createWCSLayer(e);case"arcgis":return this.createArcGISLayer(e);case"wkt":return this.createWKTLayer(e);case"geotiff":return this.createGeoTIFFLayer(e);default:throw new Error(`Unsupported layer type: ${e.type}`)}}async updateWMSLayer(e,t){e.setSource(new i({url:t.url,params:{LAYERS:t.layers,TILED:!0,...t.extraParams??{}}}))}async updateOSMLayer(e,t){let r="https://tile.openstreetmap.org/{z}/{x}/{y}.png";t.url&&(r=t.url+"/{z}/{x}/{y}.png"),e.setSource(new c({url:r}))}async updateGeoJSONLayer(e,t){let r=null;const o={featureProjection:this.projection};if(t.geojson){const e=JSON.parse(t.geojson);r=new a({features:new h(o).readFeatures(e)})}else r=new a({url:t.url,format:new h(o)});let s;e.setSource(r),t.geostylerStyle?s=await this.createGeostylerStyleFunction(t.geostylerStyle):t.style&&(s=await this.createEnhancedStyleFunction(t.style)),s&&e.setStyle(s)}async updateWFSLayer(e,t){const r=this.mergeLayerConfig(e,"wfsConfig",t),o=await this.createWFSSpource(r);let s;e.setSource(o),r.geostylerStyle?s=await this.createGeostylerStyleFunction(r.geostylerStyle):r.style&&(s=await this.createEnhancedStyleFunction(r.style)),s&&e.setStyle(s)}async updateWCSLayer(e,t){const r=this.mergeLayerConfig(e,"wcsConfig",t),o=await this.createWcsSource(r);e.setSource(o)}async updateArcGISLayer(e,t){const r=e,o=r.getSource(),s={...o?.getParams?.()??{},...t?.params??{}};t?.token&&(s.token=t.token);const n={url:t?.url??o?.getUrls?.()?.[0],params:s,...t?.options??{}},a=new f(n);r.setSource(a)}async createEnhancedStyleFunction(e){function t(e,t){if(e.startsWith("rgba")){const r=e.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(r){const[,e,o,s]=r;return`rgba(${e}, ${o}, ${s}, ${t})`}}else if(e.startsWith("rgb")){const r=e.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(r){const[,e,o,s]=r;return`rgba(${e}, ${o}, ${s}, ${t})`}}else if(e.startsWith("#")){const r=e.slice(1);return`rgba(${parseInt(r.slice(0,2),16)}, ${parseInt(r.slice(2,4),16)}, ${parseInt(r.slice(4,6),16)}, ${t})`}return e}return r=>{const o=[],s=r.getGeometry().getType(),n=new L({color:t(e.fillColor??"rgba(0,100,255,0.3)",e.fillOpacity??.3)}),a=e.strokeWidth??2,i=new G({color:t(e.strokeColor??"rgba(0,100,255,1)",e.strokeOpacity??1),width:a,lineDash:e.strokeDashArray});if(o.push(new S("Point"===s?e.iconUrl?{image:new j({src:e.iconUrl,size:e.iconSize||[32,32],anchor:e.iconAnchor||[.5,1]})}:{image:new I({radius:e.pointRadius??6,fill:new L({color:t(e.pointColor??"rgba(0,100,255,1)",e.pointOpacity??1)}),stroke:i})}:{fill:s.includes("Polygon")?n:void 0,stroke:i})),e.textProperty&&r.get(e.textProperty)){const t=e.textColor??"#000000",s=e.textSize??12,n=e.textHaloColor,a=e.textHaloWidth??2,i=e.textOffset||[0,0];o.push(new S({text:new v({text:String(r.get(e.textProperty)),font:`${s}px Arial`,fill:new L({color:t}),stroke:n?new G({color:n,width:a}):void 0,offsetX:i[0],offsetY:i[1]})}))}return o}}async createGeoJSONLayer(e){let t=null;const o={featureProjection:this.projection};if(e.geojson){const r=JSON.parse(e.geojson);t=new a({features:new h(o).readFeatures(r)})}else t=new a({url:e.url,format:new h(o)});let s;if(e.geostylerStyle)s=await this.createGeostylerStyleFunction(e.geostylerStyle);else{const t=e.style?{...$,...e.style}:$;s=await this.createEnhancedStyleFunction(t)}return new r({source:t,style:s})}async createWFSSpource(e){const t=(e.outputFormat??"application/json").toLowerCase();let r=new h;switch(t){case"gml2":r=new m;break;case"gml3":r=new p;break;case"gml32":r=new g}const o=this.getWFSGetFeatureUrl(e);return new a({format:r,url:o,strategy:E})}async createWFSLayer(e){const t=await this.createWFSSpource(e);let o;if(e.geostylerStyle)o=await this.createGeostylerStyleFunction(e.geostylerStyle);else{const t=e.style?{...$,...e.style}:$;o=await this.createEnhancedStyleFunction(t)}const s=new r({source:t,style:o});return s.set("wfsConfig",e,!1),s}async createGeostylerStyleFunction(e){const t=(e,t)=>null==e||"object"==typeof e&&e.name?t:e;return r=>{const o=[],s=r.getGeometry().getType();if(e.rules)for(const n of e.rules)if(n.symbolizers)for(const e of n.symbolizers)switch(e.kind){case"Fill":if(s.includes("Polygon")){const r=t(e.color,"rgba(0,100,255,0.3)"),s=t(e.outlineColor),n=t(e.outlineWidth,1);o.push(new S({fill:new L({color:r}),stroke:s?new G({color:s,width:n}):void 0}))}break;case"Line":{const r=t(e.color,"rgba(0,100,255,1)"),s=t(e.width,1),n=e.dasharray&&Array.isArray(e.dasharray)?e.dasharray.map((e=>t(e,0))):void 0;o.push(new S({stroke:new G({color:r,width:s,lineDash:n})}))}break;case"Mark":if("Point"===s){const r=t(e.color,"rgba(0,100,255,1)"),s=t(e.radius,6),n=t(e.strokeColor),a=t(e.strokeWidth,1);o.push(new S({image:new I({radius:s,fill:new L({color:r}),stroke:n?new G({color:n,width:a}):void 0})}))}break;case"Icon":if("Point"===s){const r=t(e.image),s=t(e.size,32),n=t(e.opacity,1);r&&"string"==typeof r&&o.push(new S({image:new j({src:r,size:[s,s],opacity:n})}))}break;case"Text":{const s=e,n=t(s.label);if(n&&r.get(n)){const e=t(s.color,"#000000"),a=t(s.size,12),i=t(s.font?.[0],"Arial"),c=t(s.haloColor),l=t(s.haloWidth,1),u=s.offset,f=u&&Array.isArray(u)?t(u[0],0):0,w=u&&Array.isArray(u)?t(u[1],0):0;o.push(new S({text:new v({text:String(r.get(n)),font:`${a}px ${i}`,fill:new L({color:e}),stroke:c?new G({color:c,width:l}):void 0,offsetX:f,offsetY:w})}))}}}return o.length>0?o:void 0}}async createXYZLayer(e){return new s({source:new l({url:e.url,attributions:e.attributions,maxZoom:e.maxZoom??19,...e.options??{}})})}async createGoogleLayer(e){if(!e.apiKey)throw new Error("Google-Layer benötigt 'apiKey' (Google Maps Platform).");const t=new u({key:e.apiKey,mapType:e.mapType??"roadmap",scale:e.scale??"scaleFactor2x",highDpi:e.highDpi??!0,language:e.language,region:e.region,imageFormat:e.imageFormat,styles:e.styles,layerTypes:e.layerTypes});t.on("change",(()=>{if("error"===t.getState()){const e=t.getError();T("Google source error",e),this.map.getTargetElement()?.dispatchEvent(new CustomEvent("google-source-error",{detail:{message:e??"Google source error"},bubbles:!0,composed:!0}))}}));const r=new s({source:t});if(!this.googleLogoAdded){class e extends b{constructor(){const e=document.createElement("img");e.style.pointerEvents="none",e.style.position="absolute",e.style.bottom="5px",e.style.left="5px",e.style.height="18px",e.alt="Google",e.src="https://developers.google.com/static/maps/documentation/images/google_on_white.png",super({element:e})}}this.map.addControl(new e),this.googleLogoAdded=!0}return r}async createOSMLayer(e){let t="https://tile.openstreetmap.org/{z}/{x}/{y}.png";return e.url&&(t=e.url+"/{z}/{x}/{y}.png"),new s({source:new c({url:t})})}async createWMSLayer(e){return new s({source:new i({url:e.url,params:{LAYERS:e.layers,TILED:!0,...e.extraParams??{}}})})}onLayerError(e,t){this.layerErrorCallbacks.set(e,t),this._getLayerById(e).then((t=>{t&&this.attachSourceErrorListeners(e,t)}))}offLayerError(e){this.layerErrorCleanups.get(e)?.(),this.layerErrorCleanups.delete(e),this.layerErrorCallbacks.delete(e)}attachSourceErrorListeners(e,t){this.layerErrorCleanups.get(e)?.();const r=this.layerErrorCallbacks.get(e);if(!r)return;const o=t.getSource?.();if(!o)return;const s=[];if("getTile"in o||o instanceof i||o instanceof c||o instanceof l||o instanceof u||o instanceof f){const e=()=>{r({type:"network",message:"Tile load error"})};o.on("tileloaderror",e),s.push((()=>o.un("tileloaderror",e)))}if(o instanceof a){const e=()=>{r({type:"network",message:"Feature load error"})};o.on("featuresloaderror",e),s.push((()=>o.un("featuresloaderror",e)))}if(o instanceof y){const e=()=>{r({type:"network",message:"Image load error"})};o.on("imageloaderror",e),s.push((()=>o.un("imageloaderror",e)))}const n=()=>{this.attachSourceErrorListeners(e,t)};t.on("change:source",n),s.push((()=>t.un("change:source",n))),this.layerErrorCleanups.set(e,(()=>s.forEach((e=>e()))))}async setView(e,t){this.map&&this.map.getView().animate({center:F(e),zoom:t,duration:0})}async _forEachLayer(e,t){if(e instanceof o){const r=e.getLayers().getArray();for(const e of r)if(await this._forEachLayer(e,t))return!0}else if(t(e))return!0;return!1}async _getLayerById(e){if(!this.map)return null;let t=null;return await this._forEachLayer(this.map.getLayerGroup(),(r=>{if(r.get("id")===e)return t=r,!0})),t||(t=this.baseLayers.find((t=>t.get("id")===e)),void 0===t?null:t)}async _getLayerGroupById(e){if(!this.map)return null;const t=this.layers.find((t=>t.get?.("groupId")===e));return void 0!==t?t:null}async removeLayer(e){if(!e)return;this.offLayerError(e);const t=await this._getLayerById(e);if(t){const e=t.get("group");e&&e.getLayers().remove(t)}}async setOpacity(e,t){if(!e)return;const r=await this._getLayerById(e);r&&r.setOpacity(t)}async setZIndex(e,t){if(!e)return;const r=await this._getLayerById(e);r&&r.setZIndex(t)}async setVisible(e,t){const r=await this._getLayerById(e);r&&r.setVisible(t)}async setGroupVisible(e,t){const r=await this._getLayerGroupById(e);r&&r.setVisible(t)}async updateWKTLayer(e,t){const r=new d;let o=null;const s=this.map?.getView()?.getProjection();if(t.wkt){const e=r.readFeature(t.wkt,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[e]})}else if(t.url){const e=await fetch(t.url);if(!e.ok)throw new Error(`Failed to fetch WKT: ${e.status}`);const n=await e.text(),i=r.readFeature(n,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[i]})}let n;o&&e.setSource(o),t.geostylerStyle?n=await this.createGeostylerStyleFunction(t.geostylerStyle):t.style&&(n=await this.createEnhancedStyleFunction(t.style)),n&&e.setStyle(n)}async createWKTLayer(e){const t=new d;let o=null;const s=this.map?.getView()?.getProjection();if(e.wkt)try{const r=t.readFeature(e.wkt,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[r]})}catch(e){T("Failed to parse WKT:",e),o=new a({features:[]})}else if(e.url)try{const r=await fetch(e.url);if(!r.ok)throw new Error(`Failed to fetch WKT: ${r.status}`);const n=await r.text(),i=t.readFeature(n,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[i]})}catch(e){T("Failed to load WKT from URL:",e),o=new a({features:[]})}else o=new a({features:[]});let n;if(e.geostylerStyle)n=await this.createGeostylerStyleFunction(e.geostylerStyle);else{const t=e.style?{...$,...e.style}:$;n=await this.createEnhancedStyleFunction(t)}return new r({source:o,style:n,opacity:e.opacity??1,visible:e.visible??!0,zIndex:e.zIndex??1e3})}async createGeoTIFFLayer(e){if(!e.url)throw new Error("GeoTIFF layer requires a URL");const t={url:e.url};null===e.nodata||isNaN(e.nodata)||(t.nodata=e.nodata);const r=new(await z({sources:[t],wrapX:!1}));return await r.registerProjectionIfNeeded(),new N({source:r,opacity:e.opacity??1,visible:e.visible??!0,zIndex:e.zIndex??100})}async createWCSLayer(e){const t=await this.createWcsSource(e),r=new n({source:t,visible:e.visible??!0,opacity:e.opacity??1});return r.set("wcsConfig",e,!1),r}getWFSGetFeatureUrl(e){return t=>{const r={service:"WFS",request:"GetFeature",version:e.version??"1.1.0",typeName:e.typeName,outputFormat:e.outputFormat??"application/json",bbox:t.join(","),srsName:e.srsName??this.projection,...e.params??{}};return this.appendParams(e.url,r)}}getWCSGetCoverageUrl(e,t){return r=>{const o=e.version??"2.0.1",s=e.format??"image/tiff",n=e.projection??this.projection,a={SERVICE:"WCS",REQUEST:"GetCoverage",VERSION:o,FORMAT:s};if(o.startsWith("2.0")){a.coverageId=e.coverageName;const[t,o,n,i]=r;a.subset=`X(${t},${n})`,a.subset2=`Y(${o},${i})`,(s.includes("tiff")||s.includes("geotiff"))&&(a["geotiff:compression"]="LZW")}else{a.COVERAGE=e.coverageName,a.BBOX=r.join(","),a.CRS=n;const o=Math.round((r[2]-r[0])/t),s=Math.round((r[3]-r[1])/t);a.WIDTH=o,a.HEIGHT=s}if(e.params&&Object.entries(e.params).forEach((([e,t])=>{"string"!=typeof t&&"number"!=typeof t||(a[e]=t)})),o.startsWith("2.0")){const t=a.subset2;delete a.subset2;const r=new URLSearchParams;Object.entries(a).forEach((([e,t])=>{null!=t&&r.append(e,String(t))})),t&&r.append("subset",String(t));const o=e.url;return`${o}${o.includes("?")?"&":"?"}${r.toString()}`}return this.appendParams(e.url,a)}}mergeLayerConfig(e,t,r){const o={...e.get(t)??{},...r};return e.set(t,o,!1),o}appendParams(e,t){const r=new URLSearchParams;return Object.entries(t).forEach((([e,t])=>{null!=t&&r.set(e,String(t))})),r.toString()?`${e}${e.includes("?")?"&":"?"}${r.toString()}`:e}async createWcsSource(e){const t=e.projection??this.projection,r=this.map?.getView()?.getResolution()??1,o=this.getWCSGetCoverageUrl(e,r);return new class extends y{urlFunction_;constructor(r){super({projection:t,resolutions:e.resolutions}),this.urlFunction_=r}getImageInternal(e,t,r,o){const s=this.urlFunction_(e),n=new w(e,t,r,s);return n.load=()=>{const e=n.getImage();e.src!==s&&(e.crossOrigin="anonymous",e.src=s)},n}}(o)}async createArcGISLayer(e){const t={...e.params??{}};e.token&&(t.token=e.token);const r={url:e.url,params:t,...e.options??{}};return new s({source:new f(r),visible:e.visible??!0})}async updateGeoTIFFLayer(e,t){if(!t.url)throw new Error("GeoTIFF update requires a URL");const r={url:t.url};null==t.nodata||isNaN(t.nodata)||(r.nodata=t.nodata);const o=new(await z({sources:[r],wrapX:!1}));await o.registerProjectionIfNeeded(),e.setSource(o)}getMap(){return this.map}}export{A as OpenLayersProvider}
1
+ import e from"ol/Map";import t from"ol/View";import r from"ol/layer/Vector";import o from"ol/layer/Group";import s from"ol/layer/Tile";import n from"ol/layer/Image";import a from"ol/source/Vector";import i from"ol/source/TileWMS";import c from"ol/source/OSM";import l from"ol/source/XYZ";import u from"ol/source/Google";import f from"ol/source/TileArcGISRest";import w from"ol/Image";import h from"ol/source/Image";import y from"ol/format/GeoJSON";import m from"ol/format/GML2";import p from"ol/format/GML3";import g from"ol/format/GML32";import d from"ol/format/WKT";import b from"ol/control/Control";import S from"ol/style/Style";import L from"ol/style/Fill";import G from"ol/style/Stroke";import I from"ol/style/Circle";import j from"ol/style/Icon";import v from"ol/style/Text";import{bbox as E}from"ol/loadingstrategy";import{get as k,fromLonLat as F,toLonLat as $}from"ol/proj";import{D as P}from"./styleconfig.js";import{w as T,e as x,l as W}from"./logger.js";import{O as C}from"./v-map2.js";import O from"./index4.js";import M from"ol/source/GeoTIFF";import{g as R}from"./main-dist.js";import{register as z}from"ol/proj/proj4";import N from"ol/layer/WebGLTile";async function A(e){return class extends M{geoKeys_=null;constructor(){super(e)}async getGeoKeys(){if(null!==this.geoKeys_)return this.geoKeys_;await this.getView();const e=this.sourceImagery_;return e&&e.length>0&&this.determineGeoKeys(e),this.geoKeys_}determineGeoKeys(e){if(!e||0===e.length)return;const t=e[0];for(let e=t.length-1;e>=0;--e){const o="function"==typeof(r=t[e]).getGeoKeys?r.getGeoKeys()||null:r.geoKeys||null;if(o){this.geoKeys_=o;break}}var r}async getProjectionParameters(){const e=await this.getGeoKeys();return e?R.toProj4(e):null}async getProj4String(){const e=await this.getProjectionParameters();return e&&e.proj4||null}async registerProjectionIfNeeded(){try{const e=await this.getProj4String(),t=this.getProjection()?.getCode();return k(t)||(null===e?(T(`Can not get proj string for code: ${t}`),null):(O.defs(t,e),z(O),k(t)))}catch(e){return x("Fehler bei der Registrierung der Projektion:",e),null}}}}class K{map;layers=[];baseLayers=[];googleLogoAdded=!1;projection="EPSG:3857";layerErrorCallbacks=new globalThis.Map;layerErrorCleanups=new globalThis.Map;async init(r){await async function(e){if(!e)return;const t="ol-css-sheet";if(e.querySelector(`style[data-id="${t}"]`))return;const r=`https://cdn.jsdelivr.net/npm/ol@${C}/ol.css`,o=await(await fetch(r)).text();if("adoptedStyleSheets"in Document.prototype){const t=new CSSStyleSheet;await t.replace(o),e.adoptedStyleSheets=[...e.adoptedStyleSheets??[],t]}else{const r=document.createElement("style");r.setAttribute("data-id",t),r.textContent=o,e.appendChild(r)}}(r.shadowRoot),Object.assign(r.target.style,{width:"100%",height:"100%",position:"relative",background:"#fff"}),this.map=new e({target:r.target,layers:[],view:new t({projection:this.projection,center:F(r?.mapInitOptions?.center??[0,0]),zoom:r?.mapInitOptions?.zoom??2})}),new ResizeObserver((()=>this.map?.updateSize())).observe(r.target)}async destroy(){this.map?.setTarget(void 0),this.map=void 0}async updateLayer(e,t){const r=await this._getLayerById(e);switch(t.type){case"geojson":await this.updateGeoJSONLayer(r,t.data);break;case"osm":await this.updateOSMLayer(r,t.data);break;case"wms":await this.updateWMSLayer(r,t.data);break;case"wfs":await this.updateWFSLayer(r,t.data);break;case"wcs":await this.updateWCSLayer(r,t.data);break;case"arcgis":await this.updateArcGISLayer(r,t.data);break;case"wkt":await this.updateWKTLayer(r,t.data);break;case"geotiff":await this.updateGeoTIFFLayer(r,t.data)}}async ensureGroup(e,t,r){await this._ensureGroup(e,t)}async _ensureGroup(e,t){if(!this.map)return null;let r=this.layers.find((t=>t.get?.("groupId")===e));return r||(r=new o({layers:[],properties:{groupId:e,visible:void 0===typeof t||t}}),this.map.addLayer(r),this.layers.push(r)),r}async setBaseLayer(e,t){if(null===t)return void W("ol - setBaseLayer - layerElementId is null.");const r=this.layers.find((t=>t.get?.("groupId")===e)),o=this.baseLayers.find((e=>e.get("layerElementId")===t));void 0!==o?(r.getLayers().clear(),r.getLayers().push(o)):W("ol - setBaseLayer - layer not found. layerElementId: "+t)}async addBaseLayer(e,t,r){if(null==r)return W("ol - addBaseLayer - layerElementId not set."),null;null==t&&W("ol - addBaseLayer - basemapid not set.");const o=await this._ensureGroup(e.groupId,e.groupVisible);if(null==o)return null;o.set("basemap",!0,!1);const s=await this.createLayer(e);if(null==s)return null;s.set("group",o),this.baseLayers.push(s);let n=null;if(s){n=crypto.randomUUID(),s.set("id",n,!1),s.set("layerElementId",r,!1);const a=e;void 0!==a.opacity&&s.setOpacity(a.opacity),void 0!==a.zIndex&&s.setZIndex(a.zIndex),a.visible?s.setVisible(!0):!1===a.visible&&s.setVisible(!1),t===r&&(o.getLayers().clear(),o.getLayers().push(s))}return n}async addLayerToGroup(e){const t=await this._ensureGroup(e.groupId,e.groupVisible);if(null==t)return null;const r=await this.createLayer(e);if(null===r)return null;r.set("group",t),t.getLayers().push(r);const o=crypto.randomUUID();r.set("id",o,!1);const s=e;return void 0!==s.opacity&&r.setOpacity(s.opacity),void 0!==s.zIndex&&r.setZIndex(s.zIndex),s.visible?r.setVisible(!0):!1===s.visible&&r.setVisible(!1),o}async createLayer(e){switch(e.type){case"geojson":return this.createGeoJSONLayer(e);case"xyz":return this.createXYZLayer(e);case"google":return this.createGoogleLayer(e);case"osm":return this.createOSMLayer(e);case"wms":return this.createWMSLayer(e);case"wfs":return this.createWFSLayer(e);case"wcs":return this.createWCSLayer(e);case"arcgis":return this.createArcGISLayer(e);case"wkt":return this.createWKTLayer(e);case"geotiff":return this.createGeoTIFFLayer(e);default:throw new Error(`Unsupported layer type: ${e.type}`)}}async updateWMSLayer(e,t){e.setSource(new i({url:t.url,params:{LAYERS:t.layers,TILED:!0,...t.extraParams??{}}}))}async updateOSMLayer(e,t){let r="https://tile.openstreetmap.org/{z}/{x}/{y}.png";t.url&&(r=t.url+"/{z}/{x}/{y}.png"),e.setSource(new c({url:r}))}async updateGeoJSONLayer(e,t){let r=null;const o={featureProjection:this.projection};if(t.geojson){const e=JSON.parse(t.geojson);r=new a({features:new y(o).readFeatures(e)})}else r=new a({url:t.url,format:new y(o)});let s;e.setSource(r),t.geostylerStyle?s=await this.createGeostylerStyleFunction(t.geostylerStyle):t.style&&(s=await this.createEnhancedStyleFunction(t.style)),s&&e.setStyle(s)}async updateWFSLayer(e,t){const r=this.mergeLayerConfig(e,"wfsConfig",t),o=await this.createWFSSpource(r);let s;e.setSource(o),r.geostylerStyle?s=await this.createGeostylerStyleFunction(r.geostylerStyle):r.style&&(s=await this.createEnhancedStyleFunction(r.style)),s&&e.setStyle(s)}async updateWCSLayer(e,t){const r=this.mergeLayerConfig(e,"wcsConfig",t),o=await this.createWcsSource(r);e.setSource(o)}async updateArcGISLayer(e,t){const r=e,o=r.getSource(),s={...o?.getParams?.()??{},...t?.params??{}};t?.token&&(s.token=t.token);const n={url:t?.url??o?.getUrls?.()?.[0],params:s,...t?.options??{}},a=new f(n);r.setSource(a)}async createEnhancedStyleFunction(e){function t(e,t){if(e.startsWith("rgba")){const r=e.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(r){const[,e,o,s]=r;return`rgba(${e}, ${o}, ${s}, ${t})`}}else if(e.startsWith("rgb")){const r=e.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);if(r){const[,e,o,s]=r;return`rgba(${e}, ${o}, ${s}, ${t})`}}else if(e.startsWith("#")){const r=e.slice(1);return`rgba(${parseInt(r.slice(0,2),16)}, ${parseInt(r.slice(2,4),16)}, ${parseInt(r.slice(4,6),16)}, ${t})`}return e}return r=>{const o=[],s=r.getGeometry().getType(),n=new L({color:t(e.fillColor??"rgba(0,100,255,0.3)",e.fillOpacity??.3)}),a=e.strokeWidth??2,i=new G({color:t(e.strokeColor??"rgba(0,100,255,1)",e.strokeOpacity??1),width:a,lineDash:e.strokeDashArray});if(o.push(new S("Point"===s?e.iconUrl?{image:new j({src:e.iconUrl,size:e.iconSize||[32,32],anchor:e.iconAnchor||[.5,1]})}:{image:new I({radius:e.pointRadius??6,fill:new L({color:t(e.pointColor??"rgba(0,100,255,1)",e.pointOpacity??1)}),stroke:i})}:{fill:s.includes("Polygon")?n:void 0,stroke:i})),e.textProperty&&r.get(e.textProperty)){const t=e.textColor??"#000000",s=e.textSize??12,n=e.textHaloColor,a=e.textHaloWidth??2,i=e.textOffset||[0,0];o.push(new S({text:new v({text:String(r.get(e.textProperty)),font:`${s}px Arial`,fill:new L({color:t}),stroke:n?new G({color:n,width:a}):void 0,offsetX:i[0],offsetY:i[1]})}))}return o}}async createGeoJSONLayer(e){let t=null;const o={featureProjection:this.projection};if(e.geojson){const r=JSON.parse(e.geojson);t=new a({features:new y(o).readFeatures(r)})}else t=new a({url:e.url,format:new y(o)});let s;if(e.geostylerStyle)s=await this.createGeostylerStyleFunction(e.geostylerStyle);else{const t=e.style?{...P,...e.style}:P;s=await this.createEnhancedStyleFunction(t)}return new r({source:t,style:s})}async createWFSSpource(e){const t=(e.outputFormat??"application/json").toLowerCase();let r=new y;switch(t){case"gml2":r=new m;break;case"gml3":r=new p;break;case"gml32":r=new g}const o=this.getWFSGetFeatureUrl(e);return new a({format:r,url:o,strategy:E})}async createWFSLayer(e){const t=await this.createWFSSpource(e);let o;if(e.geostylerStyle)o=await this.createGeostylerStyleFunction(e.geostylerStyle);else{const t=e.style?{...P,...e.style}:P;o=await this.createEnhancedStyleFunction(t)}const s=new r({source:t,style:o});return s.set("wfsConfig",e,!1),s}async createGeostylerStyleFunction(e){const t=(e,t)=>null==e||"object"==typeof e&&e.name?t:e;return r=>{const o=[],s=r.getGeometry().getType();if(e.rules)for(const n of e.rules)if(n.symbolizers)for(const e of n.symbolizers)switch(e.kind){case"Fill":if(s.includes("Polygon")){const r=t(e.color,"rgba(0,100,255,0.3)"),s=t(e.outlineColor),n=t(e.outlineWidth,1);o.push(new S({fill:new L({color:r}),stroke:s?new G({color:s,width:n}):void 0}))}break;case"Line":{const r=t(e.color,"rgba(0,100,255,1)"),s=t(e.width,1),n=e.dasharray&&Array.isArray(e.dasharray)?e.dasharray.map((e=>t(e,0))):void 0;o.push(new S({stroke:new G({color:r,width:s,lineDash:n})}))}break;case"Mark":if("Point"===s){const r=t(e.color,"rgba(0,100,255,1)"),s=t(e.radius,6),n=t(e.strokeColor),a=t(e.strokeWidth,1);o.push(new S({image:new I({radius:s,fill:new L({color:r}),stroke:n?new G({color:n,width:a}):void 0})}))}break;case"Icon":if("Point"===s){const r=t(e.image),s=t(e.size,32),n=t(e.opacity,1);r&&"string"==typeof r&&o.push(new S({image:new j({src:r,size:[s,s],opacity:n})}))}break;case"Text":{const s=e,n=t(s.label);if(n&&r.get(n)){const e=t(s.color,"#000000"),a=t(s.size,12),i=t(s.font?.[0],"Arial"),c=t(s.haloColor),l=t(s.haloWidth,1),u=s.offset,f=u&&Array.isArray(u)?t(u[0],0):0,w=u&&Array.isArray(u)?t(u[1],0):0;o.push(new S({text:new v({text:String(r.get(n)),font:`${a}px ${i}`,fill:new L({color:e}),stroke:c?new G({color:c,width:l}):void 0,offsetX:f,offsetY:w})}))}}}return o.length>0?o:void 0}}async createXYZLayer(e){return new s({source:new l({url:e.url,attributions:e.attributions,maxZoom:e.maxZoom??19,...e.options??{}})})}async createGoogleLayer(e){if(!e.apiKey)throw new Error("Google-Layer benötigt 'apiKey' (Google Maps Platform).");const t=new u({key:e.apiKey,mapType:e.mapType??"roadmap",scale:e.scale??"scaleFactor2x",highDpi:e.highDpi??!0,language:e.language,region:e.region,imageFormat:e.imageFormat,styles:e.styles,layerTypes:e.layerTypes});t.on("change",(()=>{if("error"===t.getState()){const e=t.getError();x("Google source error",e),this.map.getTargetElement()?.dispatchEvent(new CustomEvent("google-source-error",{detail:{message:e??"Google source error"},bubbles:!0,composed:!0}))}}));const r=new s({source:t});if(!this.googleLogoAdded){class e extends b{constructor(){const e=document.createElement("img");e.style.pointerEvents="none",e.style.position="absolute",e.style.bottom="5px",e.style.left="5px",e.style.height="18px",e.alt="Google",e.src="https://developers.google.com/static/maps/documentation/images/google_on_white.png",super({element:e})}}this.map.addControl(new e),this.googleLogoAdded=!0}return r}async createOSMLayer(e){let t="https://tile.openstreetmap.org/{z}/{x}/{y}.png";return e.url&&(t=e.url+"/{z}/{x}/{y}.png"),new s({source:new c({url:t})})}async createWMSLayer(e){return new s({source:new i({url:e.url,params:{LAYERS:e.layers,TILED:!0,...e.extraParams??{}}})})}onLayerError(e,t){this.layerErrorCallbacks.set(e,t),this._getLayerById(e).then((t=>{t&&this.attachSourceErrorListeners(e,t)}))}offLayerError(e){this.layerErrorCleanups.get(e)?.(),this.layerErrorCleanups.delete(e),this.layerErrorCallbacks.delete(e)}attachSourceErrorListeners(e,t){this.layerErrorCleanups.get(e)?.();const r=this.layerErrorCallbacks.get(e);if(!r)return;const o=t.getSource?.();if(!o)return;const s=[];if("getTile"in o||o instanceof i||o instanceof c||o instanceof l||o instanceof u||o instanceof f){const e=()=>{r({type:"network",message:"Tile load error"})};o.on("tileloaderror",e),s.push((()=>o.un("tileloaderror",e)))}if(o instanceof a){const e=()=>{r({type:"network",message:"Feature load error"})};o.on("featuresloaderror",e),s.push((()=>o.un("featuresloaderror",e)))}if(o instanceof h){const e=()=>{r({type:"network",message:"Image load error"})};o.on("imageloaderror",e),s.push((()=>o.un("imageloaderror",e)))}const n=()=>{this.attachSourceErrorListeners(e,t)};t.on("change:source",n),s.push((()=>t.un("change:source",n))),this.layerErrorCleanups.set(e,(()=>s.forEach((e=>e()))))}async setView(e,t){this.map&&this.map.getView().animate({center:F(e),zoom:t,duration:0})}getView(){if(!this.map)return null;const e=this.map.getView(),t=e.getCenter();if(!t)return null;const[r,o]=$(t);return{center:[r,o],zoom:e.getZoom()??0}}async _forEachLayer(e,t){if(e instanceof o){const r=e.getLayers().getArray();for(const e of r)if(await this._forEachLayer(e,t))return!0}else if(t(e))return!0;return!1}async _getLayerById(e){if(!this.map)return null;let t=null;return await this._forEachLayer(this.map.getLayerGroup(),(r=>{if(r.get("id")===e)return t=r,!0})),t||(t=this.baseLayers.find((t=>t.get("id")===e)),void 0===t?null:t)}async _getLayerGroupById(e){if(!this.map)return null;const t=this.layers.find((t=>t.get?.("groupId")===e));return void 0!==t?t:null}async removeLayer(e){if(!e)return;this.offLayerError(e);const t=await this._getLayerById(e);if(t){const e=t.get("group");e&&e.getLayers().remove(t)}}async setOpacity(e,t){if(!e)return;const r=await this._getLayerById(e);r&&r.setOpacity(t)}async setZIndex(e,t){if(!e)return;const r=await this._getLayerById(e);r&&r.setZIndex(t)}async setVisible(e,t){const r=await this._getLayerById(e);r&&r.setVisible(t)}async setGroupVisible(e,t){const r=await this._getLayerGroupById(e);r&&r.setVisible(t)}async updateWKTLayer(e,t){const r=new d;let o=null;const s=this.map?.getView()?.getProjection();if(t.wkt){const e=r.readFeature(t.wkt,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[e]})}else if(t.url){const e=await fetch(t.url);if(!e.ok)throw new Error(`Failed to fetch WKT: ${e.status}`);const n=await e.text(),i=r.readFeature(n,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[i]})}let n;o&&e.setSource(o),t.geostylerStyle?n=await this.createGeostylerStyleFunction(t.geostylerStyle):t.style&&(n=await this.createEnhancedStyleFunction(t.style)),n&&e.setStyle(n)}async createWKTLayer(e){const t=new d;let o=null;const s=this.map?.getView()?.getProjection();if(e.wkt)try{const r=t.readFeature(e.wkt,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[r]})}catch(e){x("Failed to parse WKT:",e),o=new a({features:[]})}else if(e.url)try{const r=await fetch(e.url);if(!r.ok)throw new Error(`Failed to fetch WKT: ${r.status}`);const n=await r.text(),i=t.readFeature(n,{dataProjection:"EPSG:4326",featureProjection:s});o=new a({features:[i]})}catch(e){x("Failed to load WKT from URL:",e),o=new a({features:[]})}else o=new a({features:[]});let n;if(e.geostylerStyle)n=await this.createGeostylerStyleFunction(e.geostylerStyle);else{const t=e.style?{...P,...e.style}:P;n=await this.createEnhancedStyleFunction(t)}return new r({source:o,style:n,opacity:e.opacity??1,visible:e.visible??!0,zIndex:e.zIndex??1e3})}async createGeoTIFFLayer(e){if(!e.url)throw new Error("GeoTIFF layer requires a URL");const t={url:e.url};null===e.nodata||isNaN(e.nodata)||(t.nodata=e.nodata);const r=new(await A({sources:[t],wrapX:!1}));return await r.registerProjectionIfNeeded(),new N({source:r,opacity:e.opacity??1,visible:e.visible??!0,zIndex:e.zIndex??100})}async createWCSLayer(e){const t=await this.createWcsSource(e),r=new n({source:t,visible:e.visible??!0,opacity:e.opacity??1});return r.set("wcsConfig",e,!1),r}getWFSGetFeatureUrl(e){return t=>{const r={service:"WFS",request:"GetFeature",version:e.version??"1.1.0",typeName:e.typeName,outputFormat:e.outputFormat??"application/json",bbox:t.join(","),srsName:e.srsName??this.projection,...e.params??{}};return this.appendParams(e.url,r)}}getWCSGetCoverageUrl(e,t){return r=>{const o=e.version??"2.0.1",s=e.format??"image/tiff",n=e.projection??this.projection,a={SERVICE:"WCS",REQUEST:"GetCoverage",VERSION:o,FORMAT:s};if(o.startsWith("2.0")){a.coverageId=e.coverageName;const[t,o,n,i]=r;a.subset=`X(${t},${n})`,a.subset2=`Y(${o},${i})`,(s.includes("tiff")||s.includes("geotiff"))&&(a["geotiff:compression"]="LZW")}else{a.COVERAGE=e.coverageName,a.BBOX=r.join(","),a.CRS=n;const o=Math.round((r[2]-r[0])/t),s=Math.round((r[3]-r[1])/t);a.WIDTH=o,a.HEIGHT=s}if(e.params&&Object.entries(e.params).forEach((([e,t])=>{"string"!=typeof t&&"number"!=typeof t||(a[e]=t)})),o.startsWith("2.0")){const t=a.subset2;delete a.subset2;const r=new URLSearchParams;Object.entries(a).forEach((([e,t])=>{null!=t&&r.append(e,String(t))})),t&&r.append("subset",String(t));const o=e.url;return`${o}${o.includes("?")?"&":"?"}${r.toString()}`}return this.appendParams(e.url,a)}}mergeLayerConfig(e,t,r){const o={...e.get(t)??{},...r};return e.set(t,o,!1),o}appendParams(e,t){const r=new URLSearchParams;return Object.entries(t).forEach((([e,t])=>{null!=t&&r.set(e,String(t))})),r.toString()?`${e}${e.includes("?")?"&":"?"}${r.toString()}`:e}async createWcsSource(e){const t=e.projection??this.projection,r=this.map?.getView()?.getResolution()??1,o=this.getWCSGetCoverageUrl(e,r);return new class extends h{urlFunction_;constructor(r){super({projection:t,resolutions:e.resolutions}),this.urlFunction_=r}getImageInternal(e,t,r,o){const s=this.urlFunction_(e),n=new w(e,t,r,s);return n.load=()=>{const e=n.getImage();e.src!==s&&(e.crossOrigin="anonymous",e.src=s)},n}}(o)}async createArcGISLayer(e){const t={...e.params??{}};e.token&&(t.token=e.token);const r={url:e.url,params:t,...e.options??{}};return new s({source:new f(r),visible:e.visible??!0})}async updateGeoTIFFLayer(e,t){if(!t.url)throw new Error("GeoTIFF update requires a URL");const r={url:t.url};null==t.nodata||isNaN(t.nodata)||(r.nodata=t.nodata);const o=new(await A({sources:[r],wrapX:!1}));await o.registerProjectionIfNeeded(),e.setSource(o)}getMap(){return this.map}}export{K as OpenLayersProvider}
@@ -1 +1 @@
1
- import{transformTag as e,proxyCustomElement as t,HTMLElement as s,createEvent as a,h as n}from"@stencil/core/internal/client";import{l as i}from"./logger.js";import{V as o}from"./events.js";import{M as r}from"./messages.js";const l="1.139.1",d="10.8.0",c="1.9.4",h=()=>"undefined"!=typeof window&&"undefined"!=typeof document,p=()=>h()&&"adoptedStyleSheets"in document&&"function"==typeof CSSStyleSheet.prototype.replaceSync;function m(e){"undefined"!=typeof requestAnimationFrame?requestAnimationFrame(e):setTimeout(e,0)}function u(e,t,s){if(void 0!==globalThis.ResizeObserver){const s=new globalThis.ResizeObserver((()=>t()));return s.observe(e),()=>s.disconnect()}const a=()=>m(t);let n;"undefined"!=typeof window&&window.addEventListener("resize",a),"undefined"!=typeof MutationObserver&&(n=new MutationObserver((()=>m(t))),s?n.observe(e,s):n.observe(e));const i="undefined"==typeof window?void 0:setInterval((()=>t()),250);return()=>{"undefined"!=typeof window&&window.removeEventListener("resize",a),n?.disconnect(),i&&clearInterval(i)}}const y={async init(){},async destroy(){},async setOpacity(){},async setVisible(){},async setZIndex(){},addLayerToGroup:async()=>null,async updateLayer(){},async removeLayer(){},async setView(){},addBaseLayer:async()=>null,async setBaseLayer(){},async ensureGroup(){},async setGroupVisible(){}},v="v-map - ",f=t(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.mapProviderReady=a(this,"mapProviderReady",5)}get el(){return this}flavour="ol";center="0,0";zoom=2;useDefaultImportMap=!0;cssMode="cdn";mapProviderReady;mapProvider;mapState="unavailable";mapContainer;unsubscribeResize;unsubscribePointerMove=null;async onFlavourChanged(e,t){i(v+"onFlavourChanged"),e!==t&&this.reset()}reset(){this.unsubscribeResize?.(),this.unsubscribePointerMove?.(),this.unsubscribePointerMove=null;const e=this.mapProvider;this.mapProvider=null,this.el.__vMapProvider=null,this.el.dispatchEvent(new CustomEvent(o.MapProviderWillShutdown,{detail:{mapProvider:y},bubbles:!1,composed:!1,cancelable:!0})),e?.destroy(),this.mapState="unavailable"}async createMap(){if(this.mapContainer=this.ensureContainer(),"creating"===this.mapState)return void i("Map already in creating state.");this.mapState="creating",this.mapProvider=await async function(e){try{switch(e){case"ol":{const{OpenLayersProvider:e}=await import("./openlayers-provider.js");return new e}case"cesium":{const{CesiumProvider:e}=await import("./cesium-provider.js");return new e}case"deck":{const{DeckProvider:e}=await import("./deck-provider.js").then((function(e){return e.aX}));return new e}case"leaflet":{const{LeafletProvider:e}=await import("./leaflet-provider.js");return new e}default:return function(e,t){throw new Error(t??`Unbekannte Engine: ${String(e)}`)}(e,`Unbekannte Engine: ${e}`)}}catch(e){throw i(e),e}}(this.flavour);const e={zoom:this.zoom};if(this.center){const t=this.center.split(",").map(parseFloat),[s,a]=t;if(!Number.isFinite(s)||!Number.isFinite(a))throw new Error(`<v-map>: Ungültiges center-Prop: "${this.center}" (erwartet "lon,lat")`);e.center=t}const t={target:this.mapContainer,shadowRoot:this.el.shadowRoot,mapInitOptions:e,cssMode:this.cssMode};await this.mapProvider.init(t),this.mapState="available",this.el.__vMapProvider=this.mapProvider,this.unsubscribeResize=u(this.el,(async()=>{await(this.mapProvider?.setView(e.center,e.zoom))})),this.el.dispatchEvent(new CustomEvent(o.MapProviderReady,{detail:{mapProvider:this.mapProvider},bubbles:!1,composed:!1,cancelable:!0})),this.mapProvider?.onPointerMove&&(this.unsubscribePointerMove=this.mapProvider.onPointerMove(((e,t)=>{this.el.dispatchEvent(new CustomEvent(o.MapMouseMove,{detail:{coordinate:e,pixel:t},bubbles:!0,composed:!0}))})))}async componentWillLoad(){i(v+r.COMPONENT_WILL_LOAD),this.useDefaultImportMap&&(i(v+r.COMPONENT_WILL_LOAD+" - useDefaultImportMap"),function({allowOverride:e=!0}={}){if(!(e&&document.querySelector('script[type="importmap"]')||document.querySelector('script[type="importmap"][data-v-map]'))){const e=document.createElement("script");e.type="importmap",e.dataset.vMap="true",e.textContent='{\n "imports": {\n "ol/": "https://esm.sh/ol@10.8.0/",\n "ol": "https://esm.sh/ol@10.8.0",\n "leaflet": "https://esm.sh/leaflet@1.9.4",\n "deck": "https://esm.sh/deck@9.2.11",\n "@loaders.gl/core": "https://esm.sh/@loaders.gl/core@4.3.4",\n "@loaders.gl/3d-tiles": "https://esm.sh/@loaders.gl/3d-tiles@4.3.4",\n "@loaders.gl/gis": "https://esm.sh/@loaders.gl/gis@4.3.4",\n "@loaders.gl/gltf": "https://esm.sh/@loaders.gl/gltf@4.3.4",\n "@loaders.gl/images": "https://esm.sh/@loaders.gl/images@4.3.4",\n "@loaders.gl/loader-utils": "https://esm.sh/@loaders.gl/loader-utils@4.3.4",\n "@loaders.gl/mvt": "https://esm.sh/@loaders.gl/mvt@4.3.4",\n "@loaders.gl/schema": "https://esm.sh/@loaders.gl/schema@4.3.4",\n "@loaders.gl/terrain": "https://esm.sh/@loaders.gl/terrain@4.3.4",\n "@loaders.gl/textures": "https://esm.sh/@loaders.gl/textures@4.3.4",\n "@loaders.gl/tiles": "https://esm.sh/@loaders.gl/tiles@4.3.4",\n "@loaders.gl/wms": "https://esm.sh/@loaders.gl/wms@4.3.4"\n }\n}',document.head.appendChild(e)}}())}async componentWillRender(){i(v+r.COMPONENT_WILL_RENDER)}async componentDidRender(){i(v+r.COMPONENT_DID_RENDER),await this.createMap(),this.el.addEventListener(o.MapProviderReady,(e=>{i(v+"test - event: ",e)}))}disconnectedCallback(){i(v+r.COMPONENT_DISCONNECTED_CALLBACK),this.reset()}async isMapProviderReady(){const e=null!=this.mapProvider&&this.mapProvider!==y;return e||i(v+"Map provider not yet ready."),e}async setView(e,t){if(!this.mapProvider||this.mapProvider==y)throw new Error(v+"Map-Provider noch nicht initialisiert.");await Promise.resolve(this.mapProvider?.setView(e,t))}ensureContainer(){let e=this.el.shadowRoot.querySelector("#map");return e||(e=document.createElement("div"),e.id="map",e.style.cssText="position:relative;width:100%;height:100%;display:block;",this.el.shadowRoot.appendChild(e)),e}render(){return i(v+r.COMPONENT_RENDER),n("div",{key:"41aca26c5cab5a3d7fef6169e9c4b8d27c7e65db"},n("slot",{key:"4b04986c721a478cdfb900491e44106778c07df7"}))}static get watchers(){return{flavour:[{onFlavourChanged:0}]}}static get style(){return":host{display:block;position:relative}"}},[769,"v-map",{flavour:[513],center:[1],zoom:[2],useDefaultImportMap:[4,"use-default-import-map"],cssMode:[1,"css-mode"],isMapProviderReady:[64],setView:[64]},void 0,{flavour:[{onFlavourChanged:0}]}]);function g(){"undefined"!=typeof customElements&&["v-map"].forEach((t=>{"v-map"===t&&(customElements.get(e(t))||customElements.define(e(t),f))}))}g();export{l as C,c as L,d as O,f as V,g as d,h as i,p as s,u as w}
1
+ import{transformTag as e,proxyCustomElement as t,HTMLElement as s,createEvent as n,h as a}from"@stencil/core/internal/client";import{l as o}from"./logger.js";import{V as r}from"./events.js";import{M as i}from"./messages.js";const l="1.139.1",d="10.8.0",c="1.9.4",h=()=>"undefined"!=typeof window&&"undefined"!=typeof document,m=()=>h()&&"adoptedStyleSheets"in document&&"function"==typeof CSSStyleSheet.prototype.replaceSync;function p(e){"undefined"!=typeof requestAnimationFrame?requestAnimationFrame(e):setTimeout(e,0)}function u(e,t,s){if(void 0!==globalThis.ResizeObserver){const s=new globalThis.ResizeObserver((()=>t()));return s.observe(e),()=>s.disconnect()}const n=()=>p(t);let a;"undefined"!=typeof window&&window.addEventListener("resize",n),"undefined"!=typeof MutationObserver&&(a=new MutationObserver((()=>p(t))),s?a.observe(e,s):a.observe(e));const o="undefined"==typeof window?void 0:setInterval((()=>t()),250);return()=>{"undefined"!=typeof window&&window.removeEventListener("resize",n),a?.disconnect(),o&&clearInterval(o)}}const f={async init(){},async destroy(){},async setOpacity(){},async setVisible(){},async setZIndex(){},addLayerToGroup:async()=>null,async updateLayer(){},async removeLayer(){},async setView(){},addBaseLayer:async()=>null,async setBaseLayer(){},async ensureGroup(){},async setGroupVisible(){}},g="v-map - ",v=t(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.mapProviderReady=n(this,"mapProviderReady",5)}get el(){return this}flavour="ol";center="0,0";zoom=2;useDefaultImportMap=!0;cssMode="cdn";mapProviderReady;mapProvider;mapState="unavailable";mapContainer;unsubscribeResize;unsubscribePointerMove=null;async onFlavourChanged(e,t){o(g+"onFlavourChanged"),e!==t&&this.reset()}async onZoomChanged(e,t){if(e===t)return;if("available"!==this.mapState||!this.mapProvider)return;const s=this.mapProvider.getView?.(),n=s?.center??this.parseCenter();o(g+"onZoomChanged "+t),await this.mapProvider.setView(n,t)}async onCenterChanged(e,t){if(e===t)return;if("available"!==this.mapState||!this.mapProvider)return;const s=this.mapProvider.getView?.(),n=s?.zoom??this.zoom,a=this.parseCenter(t);o(g+"onCenterChanged "+t),await this.mapProvider.setView(a,n)}parseCenter(e=this.center){const t=e.split(",").map(parseFloat);if(!Number.isFinite(t[0])||!Number.isFinite(t[1]))throw new Error(`<v-map>: Ungültiges center-Prop: "${e}" (erwartet "lon,lat")`);return t}reset(){this.unsubscribeResize?.(),this.unsubscribePointerMove?.(),this.unsubscribePointerMove=null;const e=this.mapProvider;this.mapProvider=null,this.el.__vMapProvider=null,this.el.dispatchEvent(new CustomEvent(r.MapProviderWillShutdown,{detail:{mapProvider:f},bubbles:!1,composed:!1,cancelable:!0})),e?.destroy(),this.mapState="unavailable"}async createMap(){if(this.mapContainer=this.ensureContainer(),"creating"===this.mapState)return void o("Map already in creating state.");this.mapState="creating",this.mapProvider=await async function(e){try{switch(e){case"ol":{const{OpenLayersProvider:e}=await import("./openlayers-provider.js");return new e}case"cesium":{const{CesiumProvider:e}=await import("./cesium-provider.js");return new e}case"deck":{const{DeckProvider:e}=await import("./deck-provider.js").then((function(e){return e.aX}));return new e}case"leaflet":{const{LeafletProvider:e}=await import("./leaflet-provider.js");return new e}default:return function(e,t){throw new Error(t??`Unbekannte Engine: ${String(e)}`)}(e,`Unbekannte Engine: ${e}`)}}catch(e){throw o(e),e}}(this.flavour);const e={zoom:this.zoom};if(this.center){const t=this.center.split(",").map(parseFloat),[s,n]=t;if(!Number.isFinite(s)||!Number.isFinite(n))throw new Error(`<v-map>: Ungültiges center-Prop: "${this.center}" (erwartet "lon,lat")`);e.center=t}const t={target:this.mapContainer,shadowRoot:this.el.shadowRoot,mapInitOptions:e,cssMode:this.cssMode};await this.mapProvider.init(t),this.mapState="available",this.el.__vMapProvider=this.mapProvider,this.unsubscribeResize=u(this.el,(async()=>{await(this.mapProvider?.setView(e.center,e.zoom))})),this.el.dispatchEvent(new CustomEvent(r.MapProviderReady,{detail:{mapProvider:this.mapProvider},bubbles:!1,composed:!1,cancelable:!0})),this.mapProvider?.onPointerMove&&(this.unsubscribePointerMove=this.mapProvider.onPointerMove(((e,t)=>{this.el.dispatchEvent(new CustomEvent(r.MapMouseMove,{detail:{coordinate:e,pixel:t},bubbles:!0,composed:!0}))})))}async componentWillLoad(){o(g+i.COMPONENT_WILL_LOAD),this.useDefaultImportMap&&(o(g+i.COMPONENT_WILL_LOAD+" - useDefaultImportMap"),function({allowOverride:e=!0}={}){if(!(e&&document.querySelector('script[type="importmap"]')||document.querySelector('script[type="importmap"][data-v-map]'))){const e=document.createElement("script");e.type="importmap",e.dataset.vMap="true",e.textContent='{\n "imports": {\n "ol/": "https://esm.sh/ol@10.8.0/",\n "ol": "https://esm.sh/ol@10.8.0",\n "leaflet": "https://esm.sh/leaflet@1.9.4",\n "deck": "https://esm.sh/deck@9.2.11",\n "@loaders.gl/core": "https://esm.sh/@loaders.gl/core@4.3.4",\n "@loaders.gl/3d-tiles": "https://esm.sh/@loaders.gl/3d-tiles@4.3.4",\n "@loaders.gl/gis": "https://esm.sh/@loaders.gl/gis@4.3.4",\n "@loaders.gl/gltf": "https://esm.sh/@loaders.gl/gltf@4.3.4",\n "@loaders.gl/images": "https://esm.sh/@loaders.gl/images@4.3.4",\n "@loaders.gl/loader-utils": "https://esm.sh/@loaders.gl/loader-utils@4.3.4",\n "@loaders.gl/mvt": "https://esm.sh/@loaders.gl/mvt@4.3.4",\n "@loaders.gl/schema": "https://esm.sh/@loaders.gl/schema@4.3.4",\n "@loaders.gl/terrain": "https://esm.sh/@loaders.gl/terrain@4.3.4",\n "@loaders.gl/textures": "https://esm.sh/@loaders.gl/textures@4.3.4",\n "@loaders.gl/tiles": "https://esm.sh/@loaders.gl/tiles@4.3.4",\n "@loaders.gl/wms": "https://esm.sh/@loaders.gl/wms@4.3.4"\n }\n}',document.head.appendChild(e)}}())}async componentWillRender(){o(g+i.COMPONENT_WILL_RENDER)}async componentDidRender(){o(g+i.COMPONENT_DID_RENDER),await this.createMap(),this.el.addEventListener(r.MapProviderReady,(e=>{o(g+"test - event: ",e)}))}disconnectedCallback(){o(g+i.COMPONENT_DISCONNECTED_CALLBACK),this.reset()}async isMapProviderReady(){const e=null!=this.mapProvider&&this.mapProvider!==f;return e||o(g+"Map provider not yet ready."),e}async setView(e,t){if(!this.mapProvider||this.mapProvider==f)throw new Error(g+"Map-Provider noch nicht initialisiert.");await Promise.resolve(this.mapProvider?.setView(e,t))}ensureContainer(){let e=this.el.shadowRoot.querySelector("#map");return e||(e=document.createElement("div"),e.id="map",e.style.cssText="position:relative;width:100%;height:100%;display:block;",this.el.shadowRoot.appendChild(e)),e}render(){return o(g+i.COMPONENT_RENDER),a("div",{key:"fdedf29697c3e46e3f3ee14dc8cd7beb937167ee"},a("slot",{key:"4e8370c56d14e11f9bf98fad44c78c689d570653"}))}static get watchers(){return{flavour:[{onFlavourChanged:0}],zoom:[{onZoomChanged:0}],center:[{onCenterChanged:0}]}}static get style(){return":host{display:block;position:relative}"}},[769,"v-map",{flavour:[513],center:[1],zoom:[2],useDefaultImportMap:[4,"use-default-import-map"],cssMode:[1,"css-mode"],isMapProviderReady:[64],setView:[64]},void 0,{flavour:[{onFlavourChanged:0}],zoom:[{onZoomChanged:0}],center:[{onCenterChanged:0}]}]);function y(){"undefined"!=typeof customElements&&["v-map"].forEach((t=>{"v-map"===t&&(customElements.get(e(t))||customElements.define(e(t),v))}))}y();export{l as C,c as L,d as O,v as V,y as d,h as i,m as s,u as w}
@@ -1,5 +1,5 @@
1
1
  import { w as warn, l as log, e as error } from './messages-QJHuuz0g.js';
2
- import { C as CESIUM_VERSION } from './v-map.v-map-layer-osm.v-map-layergroup-Zwdvm9PG.js';
2
+ import { C as CESIUM_VERSION } from './v-map.v-map-layer-osm.v-map-layergroup-DIfNm6nG.js';
3
3
  import { l as loadGeoTIFFSource, a as getGeoTIFFSource, b as getTileProcessorConfig, G as GeoTIFFTileProcessor, g as getColorStops } from './geotiff-source-BRjO-Dvr.js';
4
4
  import './index-BoNyIrdq.js';
5
5
  import './events-CrV_misM.js';
@@ -2543,6 +2543,24 @@ class CesiumProvider {
2543
2543
  cancel: () => warn('v-map - provider - cesium - Fly‑to cancelled'),
2544
2544
  });
2545
2545
  }
2546
+ getView() {
2547
+ if (!this.viewer)
2548
+ return null;
2549
+ const camera = this.viewer.camera;
2550
+ const position = camera.positionCartographic;
2551
+ if (!position)
2552
+ return null;
2553
+ const lon = this.Cesium.Math.toDegrees(position.longitude);
2554
+ const lat = this.Cesium.Math.toDegrees(position.latitude);
2555
+ // Cesium has no native zoom level - we approximate it from the
2556
+ // camera height using the inverse of the formula in setView()
2557
+ // (height = 1_000_000 / zoom). This is the same approximation
2558
+ // setView uses, so a roundtrip getView()/setView() preserves the
2559
+ // same camera height.
2560
+ const height = position.height;
2561
+ const zoom = height > 0 ? 1_000_000 / height : 0;
2562
+ return { center: [lon, lat], zoom };
2563
+ }
2546
2564
  async fetchWFSFromUrl(config) {
2547
2565
  const baseParams = {
2548
2566
  service: 'WFS',
@@ -39,9 +39,9 @@ async function createDeckGLGeoTIFFLayer(props) {
39
39
  const [
40
40
  //{ Layer: BaseLayer },
41
41
  { CompositeLayer }, { TileLayer }, { BitmapLayer }, { default: proj4 }, geotiffModule, geokeysModule,] = await Promise.all([
42
- import('./index-Bh2gBu9u.js'),
43
- import('./index-DxbztwCv.js'),
44
- import('./index-C63kfbil.js'),
42
+ import('./index-KNhUl5HI.js'),
43
+ import('./index-B1rgsDF8.js'),
44
+ import('./index-W2-A_yhi.js'),
45
45
  import('./index-RpJarvr_.js'),
46
46
  import('./geotiff-BEWxTIfH.js').then(function (n) { return n.g; }),
47
47
  import('./main-dist-CwnA7_Xn.js').then(function (n) { return n.m; }),
@@ -503,10 +503,10 @@ const TILE_LAYER_LOG_PREFIX = 'v-map - deck - terrain-geotiff - tilelayer - ';
503
503
  */
504
504
  async function createDeckGLGeoTIFFTerrainLayer(props) {
505
505
  const [{ CompositeLayer }, { TileLayer }, { BitmapLayer }, { SimpleMeshLayer }, MartiniModule, { default: proj4 }, geotiffModule, geokeysModule,] = await Promise.all([
506
- import('./index-Bh2gBu9u.js'),
507
- import('./index-DxbztwCv.js'),
508
- import('./index-C63kfbil.js'),
509
- import('./index-C3mnOs0I.js'),
506
+ import('./index-KNhUl5HI.js'),
507
+ import('./index-B1rgsDF8.js'),
508
+ import('./index-W2-A_yhi.js'),
509
+ import('./index-DnYCNw5P.js'),
510
510
  import('./index-BBpiaTpT.js'),
511
511
  import('./index-RpJarvr_.js'),
512
512
  import('./geotiff-BEWxTIfH.js').then(function (n) { return n.g; }),
@@ -46152,6 +46152,7 @@ class LayerGroupWithModel {
46152
46152
 
46153
46153
  class DeckProvider {
46154
46154
  deck;
46155
+ currentViewState = null;
46155
46156
  target;
46156
46157
  shadowRoot;
46157
46158
  injectedStyle;
@@ -46171,7 +46172,7 @@ class DeckProvider {
46171
46172
  const lon = opts.mapInitOptions?.center?.[0] ?? 8.5417;
46172
46173
  const lat = opts.mapInitOptions?.center?.[1] ?? 49.0069;
46173
46174
  const zoom = opts.mapInitOptions?.zoom ?? 5;
46174
- let viewState = {
46175
+ this.currentViewState = {
46175
46176
  longitude: lon,
46176
46177
  latitude: lat,
46177
46178
  zoom,
@@ -46195,10 +46196,10 @@ class DeckProvider {
46195
46196
  doubleClickZoom: true,
46196
46197
  keyboard: true,
46197
46198
  },
46198
- viewState,
46199
+ viewState: this.currentViewState,
46199
46200
  onViewStateChange: ({ viewState: vs }) => {
46200
- viewState = vs;
46201
- this.deck.setProps({ viewState });
46201
+ this.currentViewState = vs;
46202
+ this.deck.setProps({ viewState: this.currentViewState });
46202
46203
  },
46203
46204
  layers: [],
46204
46205
  _typedArrayManagerProps: { overAlloc: 1 },
@@ -47460,9 +47461,22 @@ class DeckProvider {
47460
47461
  this.layerGroups.setGroupVisible(groupId, visible);
47461
47462
  }
47462
47463
  async setView([lon, lat], zoom) {
47463
- this.deck?.setProps({
47464
- viewState: { longitude: lon, latitude: lat, zoom, bearing: 0, pitch: 0 },
47465
- });
47464
+ this.currentViewState = {
47465
+ longitude: lon,
47466
+ latitude: lat,
47467
+ zoom,
47468
+ bearing: 0,
47469
+ pitch: 0,
47470
+ };
47471
+ this.deck?.setProps({ viewState: this.currentViewState });
47472
+ }
47473
+ getView() {
47474
+ if (!this.currentViewState)
47475
+ return null;
47476
+ return {
47477
+ center: [this.currentViewState.longitude, this.currentViewState.latitude],
47478
+ zoom: this.currentViewState.zoom,
47479
+ };
47466
47480
  }
47467
47481
  async createWKTLayer(config, layerId) {
47468
47482
  const geoJsonData = await this.resolveWktToGeoJSON(config);
@@ -1,15 +1,15 @@
1
- import { C as CompositeLayer, ae as lerp, E as lngLatToWorld, d as deepEqual, B as BitmapLayer, O as COORDINATE_SYSTEM, D as worldToLngLat, P as PathLayer, l as createIterable, S as SimpleMeshLayer, M as Model, j as defaultLogger, G as Geometry, aP as TileLayer, aQ as isURLTemplate, aR as getURLFromTemplate, a0 as Matrix4, e as GeoJsonLayer, aS as isGeoBoundingBox, aT as urlType } from './deck-provider-DxIpS4lY.js';
2
- export { aU as TerrainLayer, aW as _Tile2DHeader, aV as _Tileset2D } from './deck-provider-DxIpS4lY.js';
3
- import { a as PolygonLayer, A as ArcLayer, C as ColumnLayer, P as PointCloudLayer } from './polygon-layer-ZIT5mJy5.js';
1
+ import { C as CompositeLayer, ae as lerp, E as lngLatToWorld, d as deepEqual, B as BitmapLayer, O as COORDINATE_SYSTEM, D as worldToLngLat, P as PathLayer, l as createIterable, S as SimpleMeshLayer, M as Model, j as defaultLogger, G as Geometry, aP as TileLayer, aQ as isURLTemplate, aR as getURLFromTemplate, a0 as Matrix4, e as GeoJsonLayer, aS as isGeoBoundingBox, aT as urlType } from './deck-provider-Bi-KjKaQ.js';
2
+ export { aU as TerrainLayer, aW as _Tile2DHeader, aV as _Tileset2D } from './deck-provider-Bi-KjKaQ.js';
3
+ import { a as PolygonLayer, A as ArcLayer, C as ColumnLayer, P as PointCloudLayer } from './polygon-layer-BPJjHK3y.js';
4
4
  import { ImageSource, createImageSource } from '@loaders.gl/wms';
5
5
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers-E-ZsRS8r.js';
6
- import { p as pbrMaterial, a as parsePBRMaterial, S as ScenegraphLayer } from './scenegraph-layer-CNIRd2uu.js';
6
+ import { p as pbrMaterial, a as parsePBRMaterial, S as ScenegraphLayer } from './scenegraph-layer-_1RQcOYZ.js';
7
7
  import { load } from '@loaders.gl/core';
8
8
  import { Tileset3D, TILE_TYPE } from '@loaders.gl/tiles';
9
9
  import { Tiles3DLoader } from '@loaders.gl/3d-tiles';
10
10
  import { MVTWorkerLoader } from '@loaders.gl/mvt';
11
11
  import { binaryToGeojson } from '@loaders.gl/gis';
12
- import { L as LayerExtension } from './layer-extension-C5Y2UES3.js';
12
+ import { L as LayerExtension } from './layer-extension-IuMBMh1z.js';
13
13
  import './styleconfig-B-bAcABs.js';
14
14
  import './index.browser-DhQAXuA7.js';
15
15
  import './index-BUHa4Jj0.js';
@@ -1,5 +1,5 @@
1
- export { S as SimpleMeshLayer } from './deck-provider-DxIpS4lY.js';
2
- export { S as ScenegraphLayer } from './scenegraph-layer-CNIRd2uu.js';
1
+ export { S as SimpleMeshLayer } from './deck-provider-Bi-KjKaQ.js';
2
+ export { S as ScenegraphLayer } from './scenegraph-layer-_1RQcOYZ.js';
3
3
  import './styleconfig-B-bAcABs.js';
4
4
  import './index.browser-DhQAXuA7.js';
5
5
  import './index-BUHa4Jj0.js';
@@ -1,6 +1,6 @@
1
- import { o as config, q as formatValue, s as equals, t as degrees, v as radians, w as length, x as clamp, V as Vector3, y as lerp, z as scale, A as add, D as worldToLngLat, E as lngLatToWorld, F as sub, H as scaleToZoom, J as length$1, K as zoomToScale, N as projectPosition, O as COORDINATE_SYSTEM, Q as getUniformsFromViewport, R as DirectionalLight, M as Model, G as Geometry, u as uid, X as Pass, Y as initializeShaderModule, Z as Viewport, _ as fovyToAltitude, $ as pixelsToWorld, a0 as Matrix4, a1 as negate, a2 as getMeterZoom, a3 as Controller, a4 as LinearInterpolator, a5 as ViewState, a6 as mod, a7 as View, a8 as MapState, a9 as MAX_LATITUDE, aa as zoomAdjust, ab as WebMercatorViewport, ac as GlobeViewport, ad as TransitionInterpolator, ae as lerp$1 } from './deck-provider-DxIpS4lY.js';
2
- export { aj as AmbientLight, ao as Attribute, ap as AttributeManager, C as CompositeLayer, am as Deck, aq as DeckRenderer, L as Layer, an as LayerManager, ai as LightingEffect, au as MapController, at as MapView, ah as OPERATION, av as TRANSITION_EVENTS, ay as Tesselator, U as UNIT, af as VERSION, aH as Widget, aI as _Component, aJ as _ComponentState, ak as _LayersPass, al as _PickLayersPass, aF as _applyStyles, aE as _compareProps, aB as _count, d as _deepEqual, az as _fillArray, aA as _flatten, aC as _memoize, aD as _mergeShaders, aG as _removeStyles, aw as assert, c as color, l as createIterable, ax as fp64LowPart, ag as getShaderAssembler, i as gouraudMaterial, j as log, k as phongMaterial, a as picking, ar as project, p as project32, as as shadow } from './deck-provider-DxIpS4lY.js';
3
- export { L as LayerExtension } from './layer-extension-C5Y2UES3.js';
1
+ import { o as config, q as formatValue, s as equals, t as degrees, v as radians, w as length, x as clamp, V as Vector3, y as lerp, z as scale, A as add, D as worldToLngLat, E as lngLatToWorld, F as sub, H as scaleToZoom, J as length$1, K as zoomToScale, N as projectPosition, O as COORDINATE_SYSTEM, Q as getUniformsFromViewport, R as DirectionalLight, M as Model, G as Geometry, u as uid, X as Pass, Y as initializeShaderModule, Z as Viewport, _ as fovyToAltitude, $ as pixelsToWorld, a0 as Matrix4, a1 as negate, a2 as getMeterZoom, a3 as Controller, a4 as LinearInterpolator, a5 as ViewState, a6 as mod, a7 as View, a8 as MapState, a9 as MAX_LATITUDE, aa as zoomAdjust, ab as WebMercatorViewport, ac as GlobeViewport, ad as TransitionInterpolator, ae as lerp$1 } from './deck-provider-Bi-KjKaQ.js';
2
+ export { aj as AmbientLight, ao as Attribute, ap as AttributeManager, C as CompositeLayer, am as Deck, aq as DeckRenderer, L as Layer, an as LayerManager, ai as LightingEffect, au as MapController, at as MapView, ah as OPERATION, av as TRANSITION_EVENTS, ay as Tesselator, U as UNIT, af as VERSION, aH as Widget, aI as _Component, aJ as _ComponentState, ak as _LayersPass, al as _PickLayersPass, aF as _applyStyles, aE as _compareProps, aB as _count, d as _deepEqual, az as _fillArray, aA as _flatten, aC as _memoize, aD as _mergeShaders, aG as _removeStyles, aw as assert, c as color, l as createIterable, ax as fp64LowPart, ag as getShaderAssembler, i as gouraudMaterial, j as log, k as phongMaterial, a as picking, ar as project, p as project32, as as shadow } from './deck-provider-Bi-KjKaQ.js';
3
+ export { L as LayerExtension } from './layer-extension-IuMBMh1z.js';
4
4
  import './styleconfig-B-bAcABs.js';
5
5
  import './index.browser-DhQAXuA7.js';
6
6
  import './index-BUHa4Jj0.js';
@@ -1,7 +1,7 @@
1
- import { C as ColumnLayer } from './polygon-layer-ZIT5mJy5.js';
2
- export { A as ArcLayer, P as PointCloudLayer, a as PolygonLayer } from './polygon-layer-ZIT5mJy5.js';
3
- import { G as Geometry, u as uid, L as Layer, p as project32, c as color, a as picking, U as UNIT, M as Model } from './deck-provider-DxIpS4lY.js';
4
- export { B as BitmapLayer, e as GeoJsonLayer, I as IconLayer, P as PathLayer, b as ScatterplotLayer, f as SolidPolygonLayer, T as TextLayer, g as _MultiIconLayer, h as _TextBackgroundLayer } from './deck-provider-DxIpS4lY.js';
1
+ import { C as ColumnLayer } from './polygon-layer-BPJjHK3y.js';
2
+ export { A as ArcLayer, P as PointCloudLayer, a as PolygonLayer } from './polygon-layer-BPJjHK3y.js';
3
+ import { G as Geometry, u as uid, L as Layer, p as project32, c as color, a as picking, U as UNIT, M as Model } from './deck-provider-Bi-KjKaQ.js';
4
+ export { B as BitmapLayer, e as GeoJsonLayer, I as IconLayer, P as PathLayer, b as ScatterplotLayer, f as SolidPolygonLayer, T as TextLayer, g as _MultiIconLayer, h as _TextBackgroundLayer } from './deck-provider-Bi-KjKaQ.js';
5
5
  import './styleconfig-B-bAcABs.js';
6
6
  import './index.browser-DhQAXuA7.js';
7
7
  import './index-BUHa4Jj0.js';
@@ -1,4 +1,4 @@
1
- import { d as deepEqual } from './deck-provider-DxIpS4lY.js';
1
+ import { d as deepEqual } from './deck-provider-Bi-KjKaQ.js';
2
2
 
3
3
  // deck.gl
4
4
  // SPDX-License-Identifier: MIT
@@ -1,4 +1,4 @@
1
- import { i as isBrowser, L as LEAFLET_VERSION, s as supportsAdoptedStyleSheets, w as watchElementResize } from './v-map.v-map-layer-osm.v-map-layergroup-Zwdvm9PG.js';
1
+ import { i as isBrowser, L as LEAFLET_VERSION, s as supportsAdoptedStyleSheets, w as watchElementResize } from './v-map.v-map-layer-osm.v-map-layergroup-DIfNm6nG.js';
2
2
  import * as L from 'leaflet';
3
3
  import { e as error, l as log } from './messages-QJHuuz0g.js';
4
4
  import { D as DEFAULT_STYLE } from './styleconfig-B-bAcABs.js';
@@ -1129,6 +1129,17 @@ class LeafletProvider {
1129
1129
  async setView([lon, lat], zoom) {
1130
1130
  this.map?.setView([lat, lon], zoom, { animate: false });
1131
1131
  }
1132
+ getView() {
1133
+ if (!this.map)
1134
+ return null;
1135
+ const center = this.map.getCenter();
1136
+ return {
1137
+ // Leaflet stores coordinates as { lat, lng }; v-map's LonLat is
1138
+ // [lon, lat] - matches the [lat, lon] argument inversion above.
1139
+ center: [center.lng, center.lat],
1140
+ zoom: this.map.getZoom(),
1141
+ };
1142
+ }
1132
1143
  onLayerError(layerId, callback) {
1133
1144
  this.layerErrorCallbacks.set(layerId, callback);
1134
1145
  this._getLayerById(layerId).then(layer => {
@@ -5,7 +5,7 @@ import { g as globalScripts } from './app-globals-DQuL1Twl.js';
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
7
7
  await globalScripts();
8
- return bootstrapLazy([["v-map-builder",[[769,"v-map-builder",{"mapconfig":[1040]},null,{"mapconfig":[{"onMapConfigChanged":0}]}]]],["v-map-error",[[513,"v-map-error",{"for":[1],"position":[513],"autoDismiss":[2,"auto-dismiss"],"max":[2],"log":[1],"toasts":[32]}]]],["v-map-layer-terrain-geotiff",[[769,"v-map-layer-terrain-geotiff",{"loadState":[1537,"load-state"],"url":[1],"projection":[1],"forceProjection":[4,"force-projection"],"visible":[4],"opacity":[2],"zIndex":[2,"z-index"],"nodata":[2],"meshMaxError":[2,"mesh-max-error"],"wireframe":[4],"texture":[1],"color":[16],"colorMap":[1,"color-map"],"valueRange":[16],"elevationScale":[2,"elevation-scale"],"renderMode":[1,"render-mode"],"minZoom":[2,"min-zoom"],"maxZoom":[2,"max-zoom"],"tileSize":[2,"tile-size"],"getError":[64],"getLayerId":[64]},null,{"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"projection":[{"onPropertyChanged":0}],"forceProjection":[{"onPropertyChanged":0}],"nodata":[{"onPropertyChanged":0}],"meshMaxError":[{"onPropertyChanged":0}],"wireframe":[{"onPropertyChanged":0}],"texture":[{"onPropertyChanged":0}],"color":[{"onPropertyChanged":0}],"colorMap":[{"onPropertyChanged":0}],"valueRange":[{"onPropertyChanged":0}],"elevationScale":[{"onPropertyChanged":0}],"renderMode":[{"onPropertyChanged":0}],"minZoom":[{"onPropertyChanged":0}],"maxZoom":[{"onPropertyChanged":0}],"tileSize":[{"onPropertyChanged":0}]}]]],["v-map-layercontrol",[[513,"v-map-layercontrol",{"for":[1],"layerGroups":[32]}]]],["v-map_3",[[769,"v-map",{"flavour":[513],"center":[1],"zoom":[2],"useDefaultImportMap":[4,"use-default-import-map"],"cssMode":[1,"css-mode"],"isMapProviderReady":[64],"setView":[64]},null,{"flavour":[{"onFlavourChanged":0}]}],[513,"v-map-layer-osm",{"loadState":[1537,"load-state"],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"url":[513],"getError":[64],"getLayerId":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onUrlChanged":0}]}],[769,"v-map-layergroup",{"visible":[516],"opacity":[514],"basemapid":[513],"getGroupId":[64]},null,{"visible":[{"onVisibleChanged":0}],"basemapid":[{"onBaseMapIdChanged":0}]}]]],["v-map-layer-geojson_12",[[769,"v-map-layer-geojson",{"loadState":[1537,"load-state"],"geojson":[1025],"url":[513],"visible":[516],"zIndex":[514,"z-index"],"opacity":[514],"fillColor":[513,"fill-color"],"fillOpacity":[514,"fill-opacity"],"strokeColor":[513,"stroke-color"],"strokeWidth":[514,"stroke-width"],"strokeOpacity":[514,"stroke-opacity"],"pointRadius":[514,"point-radius"],"pointColor":[513,"point-color"],"iconUrl":[513,"icon-url"],"iconSize":[513,"icon-size"],"textProperty":[513,"text-property"],"textColor":[513,"text-color"],"textSize":[514,"text-size"],"getLayerId":[64],"getError":[64]},[[4,"styleReady","onStyleReady"]],{"geojson":[{"onGeoJsonChanged":0}],"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"fillColor":[{"onStyleChanged":0}],"fillOpacity":[{"onStyleChanged":0}],"strokeColor":[{"onStyleChanged":0}],"strokeWidth":[{"onStyleChanged":0}],"strokeOpacity":[{"onStyleChanged":0}],"pointRadius":[{"onStyleChanged":0}],"pointColor":[{"onStyleChanged":0}],"iconUrl":[{"onStyleChanged":0}],"iconSize":[{"onStyleChanged":0}],"textProperty":[{"onStyleChanged":0}],"textColor":[{"onStyleChanged":0}],"textSize":[{"onStyleChanged":0}]}],[513,"v-map-layer-geotiff",{"loadState":[1537,"load-state"],"url":[1],"visible":[4],"opacity":[2],"zIndex":[2,"z-index"],"nodata":[2],"colorMap":[1,"color-map"],"valueRange":[16],"getError":[64],"getLayerId":[64]},null,{"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"nodata":[{"onNodataChanged":0}],"colorMap":[{"onColorMapChanged":0}],"valueRange":[{"onValueRangeChanged":0}]}],[513,"v-map-layer-google",{"loadState":[1537,"load-state"],"mapType":[513,"map-type"],"apiKey":[513,"api-key"],"language":[513],"region":[513],"visible":[516],"opacity":[514],"scale":[513],"maxZoom":[514,"max-zoom"],"styles":[1025],"libraries":[513],"getError":[64]},null,{"styles":[{"parseStyles":0}]}],[513,"v-map-layer-scatterplot",{"loadState":[1537,"load-state"],"data":[513],"url":[513],"getFillColor":[513,"get-fill-color"],"getRadius":[514,"get-radius"],"opacity":[514],"visible":[516],"getError":[64]}],[769,"v-map-layer-terrain",{"loadState":[1537,"load-state"],"elevationData":[513,"elevation-data"],"texture":[513],"elevationDecoder":[513,"elevation-decoder"],"wireframe":[516],"color":[513],"minZoom":[514,"min-zoom"],"maxZoom":[514,"max-zoom"],"meshMaxError":[514,"mesh-max-error"],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"getError":[64],"isReady":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"elevationData":[{"onTerrainConfigChanged":0}],"texture":[{"onTerrainConfigChanged":0}],"elevationDecoder":[{"onTerrainConfigChanged":0}],"wireframe":[{"onTerrainConfigChanged":0}],"color":[{"onTerrainConfigChanged":0}],"minZoom":[{"onTerrainConfigChanged":0}],"maxZoom":[{"onTerrainConfigChanged":0}],"meshMaxError":[{"onTerrainConfigChanged":0}]}],[769,"v-map-layer-tile3d",{"loadState":[1537,"load-state"],"url":[513],"tilesetOptions":[1,"tileset-options"],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"isReady":[64],"getError":[64]},[[4,"styleReady","onStyleReady"]],{"url":[{"onUrlChanged":0}],"tilesetOptions":[{"onTilesetOptionsChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}]}],[769,"v-map-layer-wcs",{"loadState":[1537,"load-state"],"url":[513],"coverageName":[513,"coverage-name"],"format":[513],"version":[513],"projection":[513],"resolutions":[513],"params":[513],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"getError":[64],"isReady":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onSourceChanged":0}],"coverageName":[{"onSourceChanged":0}],"format":[{"onSourceChanged":0}],"version":[{"onSourceChanged":0}],"projection":[{"onSourceChanged":0}],"resolutions":[{"onSourceChanged":0}],"params":[{"onSourceChanged":0}]}],[769,"v-map-layer-wfs",{"loadState":[1537,"load-state"],"url":[513],"typeName":[513,"type-name"],"version":[513],"outputFormat":[513,"output-format"],"srsName":[513,"srs-name"],"params":[513],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"getError":[64],"isReady":[64]},[[4,"styleReady","onStyleReady"]],{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onSourceChanged":0}],"typeName":[{"onSourceChanged":0}],"version":[{"onSourceChanged":0}],"outputFormat":[{"onSourceChanged":0}],"srsName":[{"onSourceChanged":0}],"params":[{"onSourceChanged":0}]}],[513,"v-map-layer-wkt",{"loadState":[1537,"load-state"],"wkt":[513],"url":[513],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"fillColor":[513,"fill-color"],"fillOpacity":[514,"fill-opacity"],"strokeColor":[513,"stroke-color"],"strokeWidth":[514,"stroke-width"],"strokeOpacity":[514,"stroke-opacity"],"pointRadius":[514,"point-radius"],"pointColor":[513,"point-color"],"iconUrl":[513,"icon-url"],"iconSize":[513,"icon-size"],"textProperty":[513,"text-property"],"textColor":[513,"text-color"],"textSize":[514,"text-size"],"getError":[64],"getLayerId":[64]},[[4,"styleReady","onStyleReady"]],{"wkt":[{"onWktChanged":0}],"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"fillColor":[{"onStyleChanged":0}],"fillOpacity":[{"onStyleChanged":0}],"strokeColor":[{"onStyleChanged":0}],"strokeWidth":[{"onStyleChanged":0}],"strokeOpacity":[{"onStyleChanged":0}],"pointRadius":[{"onStyleChanged":0}],"pointColor":[{"onStyleChanged":0}],"iconUrl":[{"onStyleChanged":0}],"iconSize":[{"onStyleChanged":0}],"textProperty":[{"onStyleChanged":0}],"textColor":[{"onStyleChanged":0}],"textSize":[{"onStyleChanged":0}]}],[513,"v-map-layer-wms",{"loadState":[1537,"load-state"],"url":[513],"layers":[513],"styles":[513],"format":[513],"transparent":[516],"tiled":[516],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"getError":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onUrlChanged":0}],"layers":[{"onLayersChanged":0}],"styles":[{"onStylesChanged":0}]}],[513,"v-map-layer-xyz",{"loadState":[1537,"load-state"],"url":[513],"attributions":[513],"maxZoom":[514,"max-zoom"],"tileSize":[514,"tile-size"],"subdomains":[513],"visible":[516],"opacity":[514],"getError":[64]}],[769,"v-map-style",{"format":[513],"src":[513],"content":[513],"layerTargets":[513,"layer-targets"],"autoApply":[516,"auto-apply"],"parsedStyle":[32],"isLoading":[32],"error":[32],"getStyle":[64],"getLayerTargetIds":[64]},null,{"src":[{"onStyleSourceChanged":0}],"content":[{"onStyleSourceChanged":0}],"format":[{"onStyleSourceChanged":0}]}]]]], options);
8
+ return bootstrapLazy([["v-map-builder",[[769,"v-map-builder",{"mapconfig":[1040]},null,{"mapconfig":[{"onMapConfigChanged":0}]}]]],["v-map-error",[[513,"v-map-error",{"for":[1],"position":[513],"autoDismiss":[2,"auto-dismiss"],"max":[2],"log":[1],"toasts":[32]}]]],["v-map-layer-terrain-geotiff",[[769,"v-map-layer-terrain-geotiff",{"loadState":[1537,"load-state"],"url":[1],"projection":[1],"forceProjection":[4,"force-projection"],"visible":[4],"opacity":[2],"zIndex":[2,"z-index"],"nodata":[2],"meshMaxError":[2,"mesh-max-error"],"wireframe":[4],"texture":[1],"color":[16],"colorMap":[1,"color-map"],"valueRange":[16],"elevationScale":[2,"elevation-scale"],"renderMode":[1,"render-mode"],"minZoom":[2,"min-zoom"],"maxZoom":[2,"max-zoom"],"tileSize":[2,"tile-size"],"getError":[64],"getLayerId":[64]},null,{"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"projection":[{"onPropertyChanged":0}],"forceProjection":[{"onPropertyChanged":0}],"nodata":[{"onPropertyChanged":0}],"meshMaxError":[{"onPropertyChanged":0}],"wireframe":[{"onPropertyChanged":0}],"texture":[{"onPropertyChanged":0}],"color":[{"onPropertyChanged":0}],"colorMap":[{"onPropertyChanged":0}],"valueRange":[{"onPropertyChanged":0}],"elevationScale":[{"onPropertyChanged":0}],"renderMode":[{"onPropertyChanged":0}],"minZoom":[{"onPropertyChanged":0}],"maxZoom":[{"onPropertyChanged":0}],"tileSize":[{"onPropertyChanged":0}]}]]],["v-map-layercontrol",[[513,"v-map-layercontrol",{"for":[1],"layerGroups":[32]}]]],["v-map_3",[[769,"v-map",{"flavour":[513],"center":[1],"zoom":[2],"useDefaultImportMap":[4,"use-default-import-map"],"cssMode":[1,"css-mode"],"isMapProviderReady":[64],"setView":[64]},null,{"flavour":[{"onFlavourChanged":0}],"zoom":[{"onZoomChanged":0}],"center":[{"onCenterChanged":0}]}],[513,"v-map-layer-osm",{"loadState":[1537,"load-state"],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"url":[513],"getError":[64],"getLayerId":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onUrlChanged":0}]}],[769,"v-map-layergroup",{"visible":[516],"opacity":[514],"basemapid":[513],"getGroupId":[64]},null,{"visible":[{"onVisibleChanged":0}],"basemapid":[{"onBaseMapIdChanged":0}]}]]],["v-map-layer-geojson_12",[[769,"v-map-layer-geojson",{"loadState":[1537,"load-state"],"geojson":[1025],"url":[513],"visible":[516],"zIndex":[514,"z-index"],"opacity":[514],"fillColor":[513,"fill-color"],"fillOpacity":[514,"fill-opacity"],"strokeColor":[513,"stroke-color"],"strokeWidth":[514,"stroke-width"],"strokeOpacity":[514,"stroke-opacity"],"pointRadius":[514,"point-radius"],"pointColor":[513,"point-color"],"iconUrl":[513,"icon-url"],"iconSize":[513,"icon-size"],"textProperty":[513,"text-property"],"textColor":[513,"text-color"],"textSize":[514,"text-size"],"getLayerId":[64],"getError":[64]},[[4,"styleReady","onStyleReady"]],{"geojson":[{"onGeoJsonChanged":0}],"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"fillColor":[{"onStyleChanged":0}],"fillOpacity":[{"onStyleChanged":0}],"strokeColor":[{"onStyleChanged":0}],"strokeWidth":[{"onStyleChanged":0}],"strokeOpacity":[{"onStyleChanged":0}],"pointRadius":[{"onStyleChanged":0}],"pointColor":[{"onStyleChanged":0}],"iconUrl":[{"onStyleChanged":0}],"iconSize":[{"onStyleChanged":0}],"textProperty":[{"onStyleChanged":0}],"textColor":[{"onStyleChanged":0}],"textSize":[{"onStyleChanged":0}]}],[513,"v-map-layer-geotiff",{"loadState":[1537,"load-state"],"url":[1],"visible":[4],"opacity":[2],"zIndex":[2,"z-index"],"nodata":[2],"colorMap":[1,"color-map"],"valueRange":[16],"getError":[64],"getLayerId":[64]},null,{"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"nodata":[{"onNodataChanged":0}],"colorMap":[{"onColorMapChanged":0}],"valueRange":[{"onValueRangeChanged":0}]}],[513,"v-map-layer-google",{"loadState":[1537,"load-state"],"mapType":[513,"map-type"],"apiKey":[513,"api-key"],"language":[513],"region":[513],"visible":[516],"opacity":[514],"scale":[513],"maxZoom":[514,"max-zoom"],"styles":[1025],"libraries":[513],"getError":[64]},null,{"styles":[{"parseStyles":0}]}],[513,"v-map-layer-scatterplot",{"loadState":[1537,"load-state"],"data":[513],"url":[513],"getFillColor":[513,"get-fill-color"],"getRadius":[514,"get-radius"],"opacity":[514],"visible":[516],"getError":[64]}],[769,"v-map-layer-terrain",{"loadState":[1537,"load-state"],"elevationData":[513,"elevation-data"],"texture":[513],"elevationDecoder":[513,"elevation-decoder"],"wireframe":[516],"color":[513],"minZoom":[514,"min-zoom"],"maxZoom":[514,"max-zoom"],"meshMaxError":[514,"mesh-max-error"],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"getError":[64],"isReady":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"elevationData":[{"onTerrainConfigChanged":0}],"texture":[{"onTerrainConfigChanged":0}],"elevationDecoder":[{"onTerrainConfigChanged":0}],"wireframe":[{"onTerrainConfigChanged":0}],"color":[{"onTerrainConfigChanged":0}],"minZoom":[{"onTerrainConfigChanged":0}],"maxZoom":[{"onTerrainConfigChanged":0}],"meshMaxError":[{"onTerrainConfigChanged":0}]}],[769,"v-map-layer-tile3d",{"loadState":[1537,"load-state"],"url":[513],"tilesetOptions":[1,"tileset-options"],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"isReady":[64],"getError":[64]},[[4,"styleReady","onStyleReady"]],{"url":[{"onUrlChanged":0}],"tilesetOptions":[{"onTilesetOptionsChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}]}],[769,"v-map-layer-wcs",{"loadState":[1537,"load-state"],"url":[513],"coverageName":[513,"coverage-name"],"format":[513],"version":[513],"projection":[513],"resolutions":[513],"params":[513],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"getError":[64],"isReady":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onSourceChanged":0}],"coverageName":[{"onSourceChanged":0}],"format":[{"onSourceChanged":0}],"version":[{"onSourceChanged":0}],"projection":[{"onSourceChanged":0}],"resolutions":[{"onSourceChanged":0}],"params":[{"onSourceChanged":0}]}],[769,"v-map-layer-wfs",{"loadState":[1537,"load-state"],"url":[513],"typeName":[513,"type-name"],"version":[513],"outputFormat":[513,"output-format"],"srsName":[513,"srs-name"],"params":[513],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"didLoad":[32],"getError":[64],"isReady":[64]},[[4,"styleReady","onStyleReady"]],{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onSourceChanged":0}],"typeName":[{"onSourceChanged":0}],"version":[{"onSourceChanged":0}],"outputFormat":[{"onSourceChanged":0}],"srsName":[{"onSourceChanged":0}],"params":[{"onSourceChanged":0}]}],[513,"v-map-layer-wkt",{"loadState":[1537,"load-state"],"wkt":[513],"url":[513],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"fillColor":[513,"fill-color"],"fillOpacity":[514,"fill-opacity"],"strokeColor":[513,"stroke-color"],"strokeWidth":[514,"stroke-width"],"strokeOpacity":[514,"stroke-opacity"],"pointRadius":[514,"point-radius"],"pointColor":[513,"point-color"],"iconUrl":[513,"icon-url"],"iconSize":[513,"icon-size"],"textProperty":[513,"text-property"],"textColor":[513,"text-color"],"textSize":[514,"text-size"],"getError":[64],"getLayerId":[64]},[[4,"styleReady","onStyleReady"]],{"wkt":[{"onWktChanged":0}],"url":[{"onUrlChanged":0}],"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"fillColor":[{"onStyleChanged":0}],"fillOpacity":[{"onStyleChanged":0}],"strokeColor":[{"onStyleChanged":0}],"strokeWidth":[{"onStyleChanged":0}],"strokeOpacity":[{"onStyleChanged":0}],"pointRadius":[{"onStyleChanged":0}],"pointColor":[{"onStyleChanged":0}],"iconUrl":[{"onStyleChanged":0}],"iconSize":[{"onStyleChanged":0}],"textProperty":[{"onStyleChanged":0}],"textColor":[{"onStyleChanged":0}],"textSize":[{"onStyleChanged":0}]}],[513,"v-map-layer-wms",{"loadState":[1537,"load-state"],"url":[513],"layers":[513],"styles":[513],"format":[513],"transparent":[516],"tiled":[516],"visible":[516],"opacity":[514],"zIndex":[514,"z-index"],"getError":[64]},null,{"visible":[{"onVisibleChanged":0}],"opacity":[{"onOpacityChanged":0}],"zIndex":[{"onZIndexChanged":0}],"url":[{"onUrlChanged":0}],"layers":[{"onLayersChanged":0}],"styles":[{"onStylesChanged":0}]}],[513,"v-map-layer-xyz",{"loadState":[1537,"load-state"],"url":[513],"attributions":[513],"maxZoom":[514,"max-zoom"],"tileSize":[514,"tile-size"],"subdomains":[513],"visible":[516],"opacity":[514],"getError":[64]}],[769,"v-map-style",{"format":[513],"src":[513],"content":[513],"layerTargets":[513,"layer-targets"],"autoApply":[516,"auto-apply"],"parsedStyle":[32],"isLoading":[32],"error":[32],"getStyle":[64],"getLayerTargetIds":[64]},null,{"src":[{"onStyleSourceChanged":0}],"content":[{"onStyleSourceChanged":0}],"format":[{"onStyleSourceChanged":0}]}]]]], options);
9
9
  };
10
10
 
11
11
  export { defineCustomElements };