@npm9912/v-map 0.1.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.
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/cjs/_commonjsHelpers-B83fTs8d.js +36 -0
- package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
- package/dist/cjs/cesium-provider-BiFFyAl9.js +2598 -0
- package/dist/cjs/deck-provider-Ctq3Q8a1.js +47824 -0
- package/dist/cjs/geotiff-CEwvF9cG.js +47 -0
- package/dist/cjs/geotiff-source-RaNzzWkC.js +1522 -0
- package/dist/cjs/index-B1oGO1g-.js +10658 -0
- package/dist/cjs/index-B8LHqjyg.js +1765 -0
- package/dist/cjs/index-BIL4VsgP.js +310 -0
- package/dist/cjs/index-Blku2QY8.js +167 -0
- package/dist/cjs/index-CJvvX4yx.js +21 -0
- package/dist/cjs/index-CbVT-Con.js +699 -0
- package/dist/cjs/index-ISOEpMC3.js +20478 -0
- package/dist/cjs/index-JSwBbvGA.js +1621 -0
- package/dist/cjs/index.browser-DQhD8Jwl.js +6873 -0
- package/dist/cjs/index.cjs.js +2 -0
- package/dist/cjs/layer-extension-B_olS0rc.js +65 -0
- package/dist/cjs/leaflet-provider-DOqfs7g5.js +1815 -0
- package/dist/cjs/loader.cjs.js +13 -0
- package/dist/cjs/main-dist-7TykwFci.js +2655 -0
- package/dist/cjs/messages-D7h4m8Tx.js +186 -0
- package/dist/cjs/openlayers-provider-Dfeg6L4n.js +1604 -0
- package/dist/cjs/polygon-layer-B9PrN7vr.js +1300 -0
- package/dist/cjs/scenegraph-layer-DwNoxQdi.js +2530 -0
- package/dist/cjs/styleconfig-CVRqArk-.js +23 -0
- package/dist/cjs/v-map-builder.cjs.entry.js +3786 -0
- package/dist/cjs/v-map-layer-geojson_12.cjs.entry.js +40894 -0
- package/dist/cjs/v-map-layer-helper-iAzxAg9I.js +285 -0
- package/dist/cjs/v-map-layer-terrain-geotiff.cjs.entry.js +258 -0
- package/dist/cjs/v-map-layercontrol.cjs.entry.js +247 -0
- package/dist/cjs/v-map.cjs.js +25 -0
- package/dist/cjs/v-map.v-map-layer-osm.v-map-layergroup-BsXp3BoL.js +582 -0
- package/dist/cjs/v-map_3.cjs.entry.js +12 -0
- package/dist/collection/collection-manifest.json +30 -0
- package/dist/collection/components/v-map/v-map.css +3 -0
- package/dist/collection/components/v-map/v-map.js +467 -0
- package/dist/collection/components/v-map/v-map.test.js +33 -0
- package/dist/collection/components/v-map-builder/v-map-builder.css +1 -0
- package/dist/collection/components/v-map-builder/v-map-builder.js +913 -0
- package/dist/collection/components/v-map-builder/v-map-builder.test.js +56 -0
- package/dist/collection/components/v-map-layer-geojson/v-map-layer-geojson.js +862 -0
- package/dist/collection/components/v-map-layer-geojson/v-map-layer-geojson.test.js +42 -0
- package/dist/collection/components/v-map-layer-geotiff/v-map-layer-geotiff.css +4 -0
- package/dist/collection/components/v-map-layer-geotiff/v-map-layer-geotiff.js +500 -0
- package/dist/collection/components/v-map-layer-geotiff/v-map-layer-geotiff.test.js +38 -0
- package/dist/collection/components/v-map-layer-google/v-map-layer-google.css +1 -0
- package/dist/collection/components/v-map-layer-google/v-map-layer-google.js +442 -0
- package/dist/collection/components/v-map-layer-osm/error-api.test.js +108 -0
- package/dist/collection/components/v-map-layer-osm/v-map-layer-osm.css +4 -0
- package/dist/collection/components/v-map-layer-osm/v-map-layer-osm.js +311 -0
- package/dist/collection/components/v-map-layer-osm/v-map-layer-osm.test.js +36 -0
- package/dist/collection/components/v-map-layer-scatterplot/v-map-layer-scatterplot.css +1 -0
- package/dist/collection/components/v-map-layer-scatterplot/v-map-layer-scatterplot.js +305 -0
- package/dist/collection/components/v-map-layer-terrain/v-map-layer-terrain.css +3 -0
- package/dist/collection/components/v-map-layer-terrain/v-map-layer-terrain.js +548 -0
- package/dist/collection/components/v-map-layer-terrain/v-map-layer-terrain.test.js +36 -0
- package/dist/collection/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.css +3 -0
- package/dist/collection/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.js +735 -0
- package/dist/collection/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.test.js +42 -0
- package/dist/collection/components/v-map-layer-tile3d/v-map-layer-tile3d.css +3 -0
- package/dist/collection/components/v-map-layer-tile3d/v-map-layer-tile3d.js +449 -0
- package/dist/collection/components/v-map-layer-tile3d/v-map-layer-tile3d.test.js +50 -0
- package/dist/collection/components/v-map-layer-wcs/v-map-layer-wcs.css +1 -0
- package/dist/collection/components/v-map-layer-wcs/v-map-layer-wcs.js +448 -0
- package/dist/collection/components/v-map-layer-wcs/v-map-layer-wcs.test.js +39 -0
- package/dist/collection/components/v-map-layer-wfs/v-map-layer-wfs.css +1 -0
- package/dist/collection/components/v-map-layer-wfs/v-map-layer-wfs.js +489 -0
- package/dist/collection/components/v-map-layer-wfs/v-map-layer-wfs.test.js +43 -0
- package/dist/collection/components/v-map-layer-wkt/v-map-layer-wkt.css +1 -0
- package/dist/collection/components/v-map-layer-wkt/v-map-layer-wkt.js +811 -0
- package/dist/collection/components/v-map-layer-wkt/v-map-layer-wkt.test.js +34 -0
- package/dist/collection/components/v-map-layer-wms/v-map-layer-wms.css +1 -0
- package/dist/collection/components/v-map-layer-wms/v-map-layer-wms.js +453 -0
- package/dist/collection/components/v-map-layer-wms/v-map-layer-wms.test.js +36 -0
- package/dist/collection/components/v-map-layer-xyz/v-map-layer-xyz.css +1 -0
- package/dist/collection/components/v-map-layer-xyz/v-map-layer-xyz.js +331 -0
- package/dist/collection/components/v-map-layer-xyz/v-map-layer-xyz.test.js +28 -0
- package/dist/collection/components/v-map-layercontrol/v-map-layercontrol.css +74 -0
- package/dist/collection/components/v-map-layercontrol/v-map-layercontrol.js +277 -0
- package/dist/collection/components/v-map-layercontrol/v-map-layercontrol.test.js +134 -0
- package/dist/collection/components/v-map-layergroup/v-map-layergroup.css +4 -0
- package/dist/collection/components/v-map-layergroup/v-map-layergroup.js +212 -0
- package/dist/collection/components/v-map-layergroup/v-map-layergroup.test.js +39 -0
- package/dist/collection/components/v-map-style/v-map-style.css +38 -0
- package/dist/collection/components/v-map-style/v-map-style.js +492 -0
- package/dist/collection/components/v-map-style/v-map-style.unit.js +62 -0
- package/dist/collection/index.js +1 -0
- package/dist/collection/layer/v-map-layer-helper.js +281 -0
- package/dist/collection/layer/v-map-layer-helper.unit.js +234 -0
- package/dist/collection/lib/cesium-loader.js +58 -0
- package/dist/collection/lib/ensure-importmap.js +12 -0
- package/dist/collection/lib/ensure-importmap.unit.js +57 -0
- package/dist/collection/lib/versions.gen.js +6 -0
- package/dist/collection/lib/vstyle.js +8 -0
- package/dist/collection/map-provider/cesium/CesiumGeoTIFFTerrainProvider.js +285 -0
- package/dist/collection/map-provider/cesium/CesiumLayerGroups.js +159 -0
- package/dist/collection/map-provider/cesium/GeoTIFFImageryProvider.js +192 -0
- package/dist/collection/map-provider/cesium/GeoTIFFImageryProvider.test.js +57 -0
- package/dist/collection/map-provider/cesium/cesium-provider.js +1408 -0
- package/dist/collection/map-provider/cesium/i-layer.js +1 -0
- package/dist/collection/map-provider/cesium/layer-manager.js +467 -0
- package/dist/collection/map-provider/deck/DeckGLGeoTIFFLayer.js +483 -0
- package/dist/collection/map-provider/deck/DeckGLGeoTIFFTerrainLayer.js +410 -0
- package/dist/collection/map-provider/deck/LayerGroupWithModel.js +169 -0
- package/dist/collection/map-provider/deck/LayerGroups.js +192 -0
- package/dist/collection/map-provider/deck/LayerModel.js +1 -0
- package/dist/collection/map-provider/deck/RenderableGroup.js +1 -0
- package/dist/collection/map-provider/deck/deck-provider.js +1563 -0
- package/dist/collection/map-provider/geotiff/geotiff-source.js +172 -0
- package/dist/collection/map-provider/geotiff/utils/AABB2D.js +24 -0
- package/dist/collection/map-provider/geotiff/utils/BVHNode2D.js +166 -0
- package/dist/collection/map-provider/geotiff/utils/GeoTIFFTileProcessor.js +484 -0
- package/dist/collection/map-provider/geotiff/utils/Triangle.js +1 -0
- package/dist/collection/map-provider/geotiff/utils/Triangulation.js +321 -0
- package/dist/collection/map-provider/geotiff/utils/colormap-utils.js +190 -0
- package/dist/collection/map-provider/geotiff/utils/normalization-utils.js +122 -0
- package/dist/collection/map-provider/geotiff/utils/sampling-utils.js +108 -0
- package/dist/collection/map-provider/leaflet/GeoTIFFGridLayer.js +147 -0
- package/dist/collection/map-provider/leaflet/WCSGridLayer.js +124 -0
- package/dist/collection/map-provider/leaflet/google-map-tiles-layer.js +352 -0
- package/dist/collection/map-provider/leaflet/leaflet-helpers.js +94 -0
- package/dist/collection/map-provider/leaflet/leaflet-provider.js +1095 -0
- package/dist/collection/map-provider/ol/CustomGeoTiff.js +145 -0
- package/dist/collection/map-provider/ol/openlayers-helper.js +26 -0
- package/dist/collection/map-provider/ol/openlayers-provider.js +1427 -0
- package/dist/collection/map-provider/provider-factory.js +44 -0
- package/dist/collection/map-provider/provider-factory.unit.js +66 -0
- package/dist/collection/testing/browser-test-utils.js +49 -0
- package/dist/collection/testing/e2e-testing.js +122 -0
- package/dist/collection/testing/e2e-utils.js +70 -0
- package/dist/collection/testing/geotiff-test-server.js +100 -0
- package/dist/collection/testing/mocks/geostyler-lyrx-parser.js +12 -0
- package/dist/collection/testing/mocks/geostyler-mapbox-parser.js +12 -0
- package/dist/collection/testing/mocks/geostyler-qgis-parser.js +12 -0
- package/dist/collection/testing/mocks/geostyler-sld-parser.js +13 -0
- package/dist/collection/testing/mocks/geostyler-style.js +5 -0
- package/dist/collection/testing/setupTests.browser.js +1 -0
- package/dist/collection/testing/setupTests.stencil.js +20 -0
- package/dist/collection/testing/setupTests.vitest.js +59 -0
- package/dist/collection/testing/stencil-testing-wrapper.js +43 -0
- package/dist/collection/testing/styleMock.js +1 -0
- package/dist/collection/types/color.js +1 -0
- package/dist/collection/types/cssmode.js +1 -0
- package/dist/collection/types/flavour.js +1 -0
- package/dist/collection/types/layerconfig.js +1 -0
- package/dist/collection/types/lonlat.js +1 -0
- package/dist/collection/types/mapinitoptions.js +1 -0
- package/dist/collection/types/mapprovider.js +1 -0
- package/dist/collection/types/provideroptions.js +1 -0
- package/dist/collection/types/styleconfig.js +19 -0
- package/dist/collection/types/styling.js +13 -0
- package/dist/collection/types/styling.unit.js +37 -0
- package/dist/collection/types/vmaplayer.js +1 -0
- package/dist/collection/utils/async-mutex.js +28 -0
- package/dist/collection/utils/diff.js +142 -0
- package/dist/collection/utils/diff.unit.js +59 -0
- package/dist/collection/utils/dom-env.js +43 -0
- package/dist/collection/utils/dom-env.unit.js +92 -0
- package/dist/collection/utils/events.js +8 -0
- package/dist/collection/utils/logger.js +183 -0
- package/dist/collection/utils/logger.unit.js +98 -0
- package/dist/collection/utils/messages.js +12 -0
- package/dist/collection/utils/spatial-utils.js +27 -0
- package/dist/collection/utils/spatial-utils.unit.js +24 -0
- package/dist/components/_commonjsHelpers.js +1 -0
- package/dist/components/cesium-provider.js +1 -0
- package/dist/components/deck-provider.js +1 -0
- package/dist/components/events.js +1 -0
- package/dist/components/geotiff-source.js +1 -0
- package/dist/components/geotiff.js +4 -0
- package/dist/components/index.browser.js +15 -0
- package/dist/components/index.d.ts +35 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index2.js +1 -0
- package/dist/components/index3.js +1 -0
- package/dist/components/index4.js +1 -0
- package/dist/components/index5.js +1 -0
- package/dist/components/index6.js +1 -0
- package/dist/components/index7.js +1 -0
- package/dist/components/index8.js +7 -0
- package/dist/components/layer-extension.js +1 -0
- package/dist/components/leaflet-provider.js +1 -0
- package/dist/components/main-dist.js +1 -0
- package/dist/components/messages.js +1 -0
- package/dist/components/openlayers-provider.js +1 -0
- package/dist/components/polygon-layer.js +1 -0
- package/dist/components/scenegraph-layer.js +1 -0
- package/dist/components/styleconfig.js +1 -0
- package/dist/components/styling.js +1 -0
- package/dist/components/v-map-builder.d.ts +11 -0
- package/dist/components/v-map-builder.js +2 -0
- package/dist/components/v-map-layer-geojson.d.ts +11 -0
- package/dist/components/v-map-layer-geojson.js +1 -0
- package/dist/components/v-map-layer-geojson2.js +1 -0
- package/dist/components/v-map-layer-geotiff.d.ts +11 -0
- package/dist/components/v-map-layer-geotiff.js +1 -0
- package/dist/components/v-map-layer-geotiff2.js +1 -0
- package/dist/components/v-map-layer-google.d.ts +11 -0
- package/dist/components/v-map-layer-google.js +1 -0
- package/dist/components/v-map-layer-google2.js +1 -0
- package/dist/components/v-map-layer-helper.js +1 -0
- package/dist/components/v-map-layer-osm.d.ts +11 -0
- package/dist/components/v-map-layer-osm.js +1 -0
- package/dist/components/v-map-layer-osm2.js +1 -0
- package/dist/components/v-map-layer-scatterplot.d.ts +11 -0
- package/dist/components/v-map-layer-scatterplot.js +1 -0
- package/dist/components/v-map-layer-scatterplot2.js +1 -0
- package/dist/components/v-map-layer-terrain-geotiff.d.ts +11 -0
- package/dist/components/v-map-layer-terrain-geotiff.js +1 -0
- package/dist/components/v-map-layer-terrain.d.ts +11 -0
- package/dist/components/v-map-layer-terrain.js +1 -0
- package/dist/components/v-map-layer-terrain2.js +1 -0
- package/dist/components/v-map-layer-tile3d.d.ts +11 -0
- package/dist/components/v-map-layer-tile3d.js +1 -0
- package/dist/components/v-map-layer-tile3d2.js +1 -0
- package/dist/components/v-map-layer-wcs.d.ts +11 -0
- package/dist/components/v-map-layer-wcs.js +1 -0
- package/dist/components/v-map-layer-wcs2.js +1 -0
- package/dist/components/v-map-layer-wfs.d.ts +11 -0
- package/dist/components/v-map-layer-wfs.js +1 -0
- package/dist/components/v-map-layer-wfs2.js +1 -0
- package/dist/components/v-map-layer-wkt.d.ts +11 -0
- package/dist/components/v-map-layer-wkt.js +1 -0
- package/dist/components/v-map-layer-wkt2.js +1 -0
- package/dist/components/v-map-layer-wms.d.ts +11 -0
- package/dist/components/v-map-layer-wms.js +1 -0
- package/dist/components/v-map-layer-wms2.js +1 -0
- package/dist/components/v-map-layer-xyz.d.ts +11 -0
- package/dist/components/v-map-layer-xyz.js +1 -0
- package/dist/components/v-map-layer-xyz2.js +1 -0
- package/dist/components/v-map-layercontrol.d.ts +11 -0
- package/dist/components/v-map-layercontrol.js +1 -0
- package/dist/components/v-map-layergroup.d.ts +11 -0
- package/dist/components/v-map-layergroup.js +1 -0
- package/dist/components/v-map-layergroup2.js +1 -0
- package/dist/components/v-map-style.d.ts +11 -0
- package/dist/components/v-map-style.js +1 -0
- package/dist/components/v-map-style2.js +10 -0
- package/dist/components/v-map.d.ts +11 -0
- package/dist/components/v-map.js +1 -0
- package/dist/components/v-map2.js +1 -0
- package/dist/esm/_commonjsHelpers-E-ZsRS8r.js +32 -0
- package/dist/esm/app-globals-DQuL1Twl.js +3 -0
- package/dist/esm/cesium-provider-BJfAup3w.js +2596 -0
- package/dist/esm/deck-provider-C7U9VDEq.js +47709 -0
- package/dist/esm/geotiff-BEWxTIfH.js +45 -0
- package/dist/esm/geotiff-source-esnDnC-u.js +1516 -0
- package/dist/esm/index-B1zwA4IC.js +685 -0
- package/dist/esm/index-BBpiaTpT.js +165 -0
- package/dist/esm/index-BIEmlzCf.js +1697 -0
- package/dist/esm/index-BUHa4Jj0.js +307 -0
- package/dist/esm/index-DbSdn93t.js +20461 -0
- package/dist/esm/index-RpJarvr_.js +10656 -0
- package/dist/esm/index-jN06TXUp.js +14 -0
- package/dist/esm/index-jzneDarq.js +1613 -0
- package/dist/esm/index.browser-DhQAXuA7.js +6860 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/layer-extension-CZXK5goK.js +63 -0
- package/dist/esm/leaflet-provider-Q41TB6ku.js +1794 -0
- package/dist/esm/loader.js +11 -0
- package/dist/esm/main-dist-CwnA7_Xn.js +2652 -0
- package/dist/esm/messages-CMKJzsgL.js +180 -0
- package/dist/esm/openlayers-provider-CMsDsQTQ.js +1602 -0
- package/dist/esm/polygon-layer-ByhxGhWC.js +1295 -0
- package/dist/esm/scenegraph-layer-09K_B6DT.js +2526 -0
- package/dist/esm/styleconfig-B-bAcABs.js +21 -0
- package/dist/esm/v-map-builder.entry.js +3784 -0
- package/dist/esm/v-map-layer-geojson_12.entry.js +40881 -0
- package/dist/esm/v-map-layer-helper-Dys44Cgo.js +283 -0
- package/dist/esm/v-map-layer-terrain-geotiff.entry.js +256 -0
- package/dist/esm/v-map-layercontrol.entry.js +245 -0
- package/dist/esm/v-map.js +21 -0
- package/dist/esm/v-map.v-map-layer-osm.v-map-layergroup-B4pFHuSf.js +572 -0
- package/dist/esm/v-map_3.entry.js +4 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/types/cesium-augment.d.ts +5 -0
- package/dist/types/components/v-map/v-map.d.ts +70 -0
- package/dist/types/components/v-map/v-map.test.d.ts +1 -0
- package/dist/types/components/v-map-builder/v-map-builder.d.ts +48 -0
- package/dist/types/components/v-map-builder/v-map-builder.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-geojson/v-map-layer-geojson.d.ts +129 -0
- package/dist/types/components/v-map-layer-geojson/v-map-layer-geojson.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-geotiff/v-map-layer-geotiff.d.ts +74 -0
- package/dist/types/components/v-map-layer-geotiff/v-map-layer-geotiff.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-google/v-map-layer-google.d.ts +78 -0
- package/dist/types/components/v-map-layer-osm/error-api.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-osm/v-map-layer-osm.d.ts +50 -0
- package/dist/types/components/v-map-layer-osm/v-map-layer-osm.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-scatterplot/v-map-layer-scatterplot.d.ts +54 -0
- package/dist/types/components/v-map-layer-terrain/v-map-layer-terrain.d.ts +74 -0
- package/dist/types/components/v-map-layer-terrain/v-map-layer-terrain.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.d.ts +117 -0
- package/dist/types/components/v-map-layer-terrain-geotiff/v-map-layer-terrain-geotiff.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-tile3d/v-map-layer-tile3d.d.ts +69 -0
- package/dist/types/components/v-map-layer-tile3d/v-map-layer-tile3d.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-wcs/v-map-layer-wcs.d.ts +47 -0
- package/dist/types/components/v-map-layer-wcs/v-map-layer-wcs.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-wfs/v-map-layer-wfs.d.ts +59 -0
- package/dist/types/components/v-map-layer-wfs/v-map-layer-wfs.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-wkt/v-map-layer-wkt.d.ts +132 -0
- package/dist/types/components/v-map-layer-wkt/v-map-layer-wkt.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-wms/v-map-layer-wms.d.ts +76 -0
- package/dist/types/components/v-map-layer-wms/v-map-layer-wms.test.d.ts +1 -0
- package/dist/types/components/v-map-layer-xyz/v-map-layer-xyz.d.ts +59 -0
- package/dist/types/components/v-map-layer-xyz/v-map-layer-xyz.test.d.ts +1 -0
- package/dist/types/components/v-map-layercontrol/v-map-layercontrol.d.ts +44 -0
- package/dist/types/components/v-map-layercontrol/v-map-layercontrol.test.d.ts +1 -0
- package/dist/types/components/v-map-layergroup/v-map-layergroup.d.ts +31 -0
- package/dist/types/components/v-map-layergroup/v-map-layergroup.test.d.ts +1 -0
- package/dist/types/components/v-map-style/v-map-style.d.ts +75 -0
- package/dist/types/components/v-map-style/v-map-style.unit.d.ts +1 -0
- package/dist/types/components.d.ts +2391 -0
- package/dist/types/globals.d.ts +16 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/layer/v-map-layer-helper.d.ts +45 -0
- package/dist/types/layer/v-map-layer-helper.unit.d.ts +1 -0
- package/dist/types/leaflet-augment.d.ts +15 -0
- package/dist/types/lib/cesium-loader.d.ts +3 -0
- package/dist/types/lib/ensure-importmap.d.ts +3 -0
- package/dist/types/lib/ensure-importmap.unit.d.ts +1 -0
- package/dist/types/lib/versions.gen.d.ts +5 -0
- package/dist/types/lib/vstyle.d.ts +44 -0
- package/dist/types/map-provider/cesium/CesiumGeoTIFFTerrainProvider.d.ts +92 -0
- package/dist/types/map-provider/cesium/CesiumLayerGroups.d.ts +64 -0
- package/dist/types/map-provider/cesium/GeoTIFFImageryProvider.d.ts +75 -0
- package/dist/types/map-provider/cesium/GeoTIFFImageryProvider.test.d.ts +1 -0
- package/dist/types/map-provider/cesium/cesium-provider.d.ts +87 -0
- package/dist/types/map-provider/cesium/i-layer.d.ts +11 -0
- package/dist/types/map-provider/cesium/layer-manager.d.ts +31 -0
- package/dist/types/map-provider/deck/DeckGLGeoTIFFLayer.d.ts +91 -0
- package/dist/types/map-provider/deck/DeckGLGeoTIFFTerrainLayer.d.ts +82 -0
- package/dist/types/map-provider/deck/LayerGroupWithModel.d.ts +55 -0
- package/dist/types/map-provider/deck/LayerGroups.d.ts +63 -0
- package/dist/types/map-provider/deck/LayerModel.d.ts +8 -0
- package/dist/types/map-provider/deck/RenderableGroup.d.ts +20 -0
- package/dist/types/map-provider/deck/deck-provider.d.ts +92 -0
- package/dist/types/map-provider/geotiff/geotiff-source.d.ts +30 -0
- package/dist/types/map-provider/geotiff/utils/AABB2D.d.ts +28 -0
- package/dist/types/map-provider/geotiff/utils/BVHNode2D.d.ts +36 -0
- package/dist/types/map-provider/geotiff/utils/GeoTIFFTileProcessor.d.ts +116 -0
- package/dist/types/map-provider/geotiff/utils/Triangle.d.ts +5 -0
- package/dist/types/map-provider/geotiff/utils/Triangulation.d.ts +94 -0
- package/dist/types/map-provider/geotiff/utils/colormap-utils.d.ts +47 -0
- package/dist/types/map-provider/geotiff/utils/normalization-utils.d.ts +39 -0
- package/dist/types/map-provider/geotiff/utils/sampling-utils.d.ts +13 -0
- package/dist/types/map-provider/leaflet/GeoTIFFGridLayer.d.ts +34 -0
- package/dist/types/map-provider/leaflet/WCSGridLayer.d.ts +38 -0
- package/dist/types/map-provider/leaflet/google-map-tiles-layer.d.ts +73 -0
- package/dist/types/map-provider/leaflet/leaflet-helpers.d.ts +6 -0
- package/dist/types/map-provider/leaflet/leaflet-provider.d.ts +73 -0
- package/dist/types/map-provider/ol/CustomGeoTiff.d.ts +14 -0
- package/dist/types/map-provider/ol/openlayers-helper.d.ts +2 -0
- package/dist/types/map-provider/ol/openlayers-provider.d.ts +80 -0
- package/dist/types/map-provider/provider-factory.d.ts +12 -0
- package/dist/types/map-provider/provider-factory.unit.d.ts +1 -0
- package/dist/types/namespaces.d.ts +3 -0
- package/dist/types/ol-augment.d.ts +3 -0
- package/dist/types/ol-override.d.ts +7 -0
- package/dist/types/ol.d.ts +10 -0
- package/dist/types/stencil-public-runtime.d.ts +1860 -0
- package/dist/types/testing/browser-test-utils.d.ts +6 -0
- package/dist/types/testing/e2e-testing.d.ts +5 -0
- package/dist/types/testing/e2e-utils.d.ts +4 -0
- package/dist/types/testing/geotiff-test-server.d.ts +5 -0
- package/dist/types/testing/mocks/geostyler-lyrx-parser.d.ts +11 -0
- package/dist/types/testing/mocks/geostyler-mapbox-parser.d.ts +11 -0
- package/dist/types/testing/mocks/geostyler-qgis-parser.d.ts +11 -0
- package/dist/types/testing/mocks/geostyler-sld-parser.d.ts +11 -0
- package/dist/types/testing/mocks/geostyler-style.d.ts +5 -0
- package/dist/types/testing/setupTests.browser.d.ts +1 -0
- package/dist/types/testing/setupTests.stencil.d.ts +1 -0
- package/dist/types/testing/setupTests.vitest.d.ts +1 -0
- package/dist/types/testing/stencil-testing-wrapper.d.ts +3 -0
- package/dist/types/types/color.d.ts +1 -0
- package/dist/types/types/cssmode.d.ts +1 -0
- package/dist/types/types/flavour.d.ts +1 -0
- package/dist/types/types/layerconfig.d.ts +207 -0
- package/dist/types/types/lonlat.d.ts +1 -0
- package/dist/types/types/mapinitoptions.d.ts +4 -0
- package/dist/types/types/mapprovider.d.ts +46 -0
- package/dist/types/types/provideroptions.d.ts +8 -0
- package/dist/types/types/styleconfig.d.ts +27 -0
- package/dist/types/types/styling.d.ts +24 -0
- package/dist/types/types/styling.unit.d.ts +1 -0
- package/dist/types/types/vmaplayer.d.ts +10 -0
- package/dist/types/utils/async-mutex.d.ts +7 -0
- package/dist/types/utils/diff.d.ts +64 -0
- package/dist/types/utils/diff.unit.d.ts +1 -0
- package/dist/types/utils/dom-env.d.ts +5 -0
- package/dist/types/utils/dom-env.unit.d.ts +1 -0
- package/dist/types/utils/events.d.ts +29 -0
- package/dist/types/utils/logger.d.ts +47 -0
- package/dist/types/utils/logger.unit.d.ts +1 -0
- package/dist/types/utils/messages.d.ts +12 -0
- package/dist/types/utils/spatial-utils.d.ts +6 -0
- package/dist/types/utils/spatial-utils.unit.d.ts +1 -0
- package/dist/types/versions.d.ts +7 -0
- package/dist/v-map/index.esm.js +0 -0
- package/dist/v-map/p--vVleK-M.js +1 -0
- package/dist/v-map/p-09d10db0.entry.js +1 -0
- package/dist/v-map/p-5eba6058.entry.js +10 -0
- package/dist/v-map/p-6b102336.entry.js +1 -0
- package/dist/v-map/p-B-bAcABs.js +1 -0
- package/dist/v-map/p-BBpiaTpT.js +1 -0
- package/dist/v-map/p-BdijL4Av.js +1 -0
- package/dist/v-map/p-Be3r33VF.js +4 -0
- package/dist/v-map/p-BeFu0ap4.js +1 -0
- package/dist/v-map/p-BxFJezdK.js +1 -0
- package/dist/v-map/p-CMKJzsgL.js +1 -0
- package/dist/v-map/p-CXfA_q8m.js +1 -0
- package/dist/v-map/p-CZqY0yW4.js +1 -0
- package/dist/v-map/p-CafTHT9i.js +1 -0
- package/dist/v-map/p-DCTHyf58.js +1 -0
- package/dist/v-map/p-DQuL1Twl.js +1 -0
- package/dist/v-map/p-DR9McdNX.js +1 -0
- package/dist/v-map/p-Dckgonw8.js +1 -0
- package/dist/v-map/p-DhQAXuA7.js +15 -0
- package/dist/v-map/p-DmICdG34.js +7 -0
- package/dist/v-map/p-DrOQ9V4h.js +1 -0
- package/dist/v-map/p-DvHXtWUg.js +1 -0
- package/dist/v-map/p-E-ZsRS8r.js +1 -0
- package/dist/v-map/p-MyTSFnEk.js +1 -0
- package/dist/v-map/p-RpJarvr_.js +1 -0
- package/dist/v-map/p-WaMDUuAz.js +1 -0
- package/dist/v-map/p-aa410e64.entry.js +2 -0
- package/dist/v-map/p-c21c93fe.entry.js +1 -0
- package/dist/v-map/p-jzneDarq.js +2 -0
- package/dist/v-map/p-uiIP-taz.js +1 -0
- package/dist/v-map/v-map.esm.js +1 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +193 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
export class VMapLayerControl {
|
|
3
|
+
/** ID der zu steuernden Karte (DOM-Element mit dieser id) */
|
|
4
|
+
for;
|
|
5
|
+
host;
|
|
6
|
+
layerGroups = [];
|
|
7
|
+
observer;
|
|
8
|
+
mapElement = null;
|
|
9
|
+
// ---- Lifecycle -----------------------------------------------------------
|
|
10
|
+
async connectedCallback() {
|
|
11
|
+
//this.findMapElement();
|
|
12
|
+
}
|
|
13
|
+
async componentWillLoad() {
|
|
14
|
+
this.findMapElement();
|
|
15
|
+
}
|
|
16
|
+
async disconnectedCallback() {
|
|
17
|
+
this.observer?.disconnect();
|
|
18
|
+
}
|
|
19
|
+
// ---- DOM-Discovery/Observation ------------------------------------------
|
|
20
|
+
findMapElement() {
|
|
21
|
+
this.mapElement = document.getElementById(this.for);
|
|
22
|
+
if (this.mapElement) {
|
|
23
|
+
this.initObserver();
|
|
24
|
+
this.updateLayerGroupsFromDom();
|
|
25
|
+
// this.updateLayersFromDom();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Karte noch nicht da – später erneut versuchen
|
|
29
|
+
setTimeout(() => this.findMapElement(), 100);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
initObserver() {
|
|
33
|
+
if (!this.mapElement)
|
|
34
|
+
return;
|
|
35
|
+
this.observer = new MutationObserver(async () => {
|
|
36
|
+
this.updateLayerGroupsFromDom();
|
|
37
|
+
//this.updateLayersFromDom();
|
|
38
|
+
});
|
|
39
|
+
this.observer.observe(this.mapElement, {
|
|
40
|
+
childList: true,
|
|
41
|
+
subtree: true,
|
|
42
|
+
// WICHTIG: Attribute lauschen, sonst werden UI-Änderungen nicht gespiegelt
|
|
43
|
+
attributes: true,
|
|
44
|
+
attributeFilter: ['basemapid', 'visible', 'opacity', 'zindex'],
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// ---- Layer-Extraktion ----------------------------------------------------
|
|
48
|
+
readBool(el, prop, ...attrs) {
|
|
49
|
+
const elRecord = el;
|
|
50
|
+
if (typeof elRecord[prop] === 'boolean')
|
|
51
|
+
return !!elRecord[prop];
|
|
52
|
+
for (const a of attrs)
|
|
53
|
+
if (el.hasAttribute(a))
|
|
54
|
+
return true;
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
readNumber(el, prop, def, ...attrs) {
|
|
58
|
+
const elRecord = el;
|
|
59
|
+
const v = elRecord[prop];
|
|
60
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
61
|
+
return v;
|
|
62
|
+
for (const a of attrs) {
|
|
63
|
+
const s = el.getAttribute(a);
|
|
64
|
+
if (s != null && s !== '') {
|
|
65
|
+
const n = Number(s);
|
|
66
|
+
if (!Number.isNaN(n))
|
|
67
|
+
return n;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return def;
|
|
71
|
+
}
|
|
72
|
+
readString(el, prop, def, ...attrs) {
|
|
73
|
+
const elRecord = el;
|
|
74
|
+
const v = elRecord[prop];
|
|
75
|
+
if (typeof v === 'string' && v.length)
|
|
76
|
+
return v;
|
|
77
|
+
for (const a of attrs) {
|
|
78
|
+
const s = el.getAttribute(a);
|
|
79
|
+
if (s)
|
|
80
|
+
return s;
|
|
81
|
+
}
|
|
82
|
+
return def;
|
|
83
|
+
}
|
|
84
|
+
updateLayerGroupsFromDom() {
|
|
85
|
+
if (!this.mapElement)
|
|
86
|
+
return;
|
|
87
|
+
const sel = 'v-map-layergroup';
|
|
88
|
+
const layerGroupElements = Array.from(this.mapElement.querySelectorAll(sel));
|
|
89
|
+
//await customElements.whenDefined('v-map-layercontrol');
|
|
90
|
+
this.layerGroups = layerGroupElements.map((groupElement, _idx) => {
|
|
91
|
+
// groupId: existiert als Attr/Prop? Sonst generieren, aber direkt setzen, damit stabil bleibt
|
|
92
|
+
let id = groupElement.id;
|
|
93
|
+
if (!id) {
|
|
94
|
+
id = `auto-${Math.random().toString(36).slice(2, 9)}`;
|
|
95
|
+
groupElement.id = id;
|
|
96
|
+
}
|
|
97
|
+
const label = this.readString(groupElement, 'label', id, 'label');
|
|
98
|
+
// const type =
|
|
99
|
+
// (this.readString(
|
|
100
|
+
// groupElement,
|
|
101
|
+
// 'type',
|
|
102
|
+
// 'overlay',
|
|
103
|
+
// 'type',
|
|
104
|
+
// ) as LayerType) ?? 'overlay';
|
|
105
|
+
const groupTitle = groupElement?.getAttribute('group-title') || undefined;
|
|
106
|
+
//const groupId = groupElement?.getAttribute('groupid') || undefined;
|
|
107
|
+
const visible = this.readBool(groupElement, 'visible', 'visible');
|
|
108
|
+
// const zIndex = this.readNumber(element, 'zIndex', 0, 'zindex');
|
|
109
|
+
const basemapid = groupElement.getAttribute('basemapid');
|
|
110
|
+
const layers = this.getLayersFromDom(groupElement);
|
|
111
|
+
return {
|
|
112
|
+
info: {
|
|
113
|
+
element: groupElement,
|
|
114
|
+
id,
|
|
115
|
+
visible,
|
|
116
|
+
opacity: undefined,
|
|
117
|
+
zIndex: undefined,
|
|
118
|
+
},
|
|
119
|
+
label,
|
|
120
|
+
//type,
|
|
121
|
+
groupTitle,
|
|
122
|
+
//groupId,
|
|
123
|
+
basemapid,
|
|
124
|
+
layers,
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
this.layerGroups = this.cloneLayerGroups();
|
|
128
|
+
//forceUpdate(this.host);
|
|
129
|
+
}
|
|
130
|
+
cloneLayerGroups() {
|
|
131
|
+
return this.layerGroups.map(group => ({
|
|
132
|
+
...group,
|
|
133
|
+
info: { ...group.info }, // Neue Referenz für info
|
|
134
|
+
layers: group.layers.map(layer => ({
|
|
135
|
+
...layer,
|
|
136
|
+
info: { ...layer.info }, // Neue Referenz für layer.info
|
|
137
|
+
})),
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
getLayersFromDom(groupElement) {
|
|
141
|
+
if (!groupElement)
|
|
142
|
+
return;
|
|
143
|
+
const sel = 'v-map-layer-wms, v-map-layer-osm, v-map-layer-geotiff, v-map-layer-geojson';
|
|
144
|
+
const layerElements = Array.from(groupElement.querySelectorAll(sel));
|
|
145
|
+
const layers = layerElements.map((element, _idx) => {
|
|
146
|
+
// id: existiert als Attr/Prop? Sonst generieren, aber direkt setzen, damit stabil bleibt
|
|
147
|
+
let id = element.id;
|
|
148
|
+
if (!id) {
|
|
149
|
+
id = `auto-${Math.random().toString(36).slice(2, 9)}`;
|
|
150
|
+
element.id = id;
|
|
151
|
+
}
|
|
152
|
+
const label = this.readString(element, 'label', id, 'label');
|
|
153
|
+
// const type =
|
|
154
|
+
// (this.readString(element, 'type', 'overlay', 'type') as LayerType) ??
|
|
155
|
+
// 'overlay';
|
|
156
|
+
//const groupElement = element.closest('v-map-layergroup');
|
|
157
|
+
//const group = groupElement?.getAttribute('group-title') || undefined;
|
|
158
|
+
//const groupId = groupElement?.getAttribute('groupid') || undefined;
|
|
159
|
+
const visible = this.readBool(element, 'visible', 'visible');
|
|
160
|
+
const opacity = this.readNumber(element, 'opacity', 1, 'opacity');
|
|
161
|
+
//const zIndex = this.readNumber(element, 'zIndex', 0, 'z-index', 'zindex');
|
|
162
|
+
const zIndex = this.readNumber(element, 'zIndex', 0, 'zindex');
|
|
163
|
+
//const groupId = groupElement.id;
|
|
164
|
+
return {
|
|
165
|
+
info: {
|
|
166
|
+
element,
|
|
167
|
+
id,
|
|
168
|
+
visible,
|
|
169
|
+
opacity,
|
|
170
|
+
zIndex,
|
|
171
|
+
},
|
|
172
|
+
label,
|
|
173
|
+
//type,
|
|
174
|
+
};
|
|
175
|
+
});
|
|
176
|
+
return layers;
|
|
177
|
+
}
|
|
178
|
+
setBool(el, prop, val, ...attrs) {
|
|
179
|
+
el[prop] = val;
|
|
180
|
+
for (const a of attrs) {
|
|
181
|
+
if (val)
|
|
182
|
+
el.setAttribute(a, '');
|
|
183
|
+
else
|
|
184
|
+
el.removeAttribute(a);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
setNumber(el, prop, val, ...attrs) {
|
|
188
|
+
el[prop] = val;
|
|
189
|
+
for (const a of attrs)
|
|
190
|
+
el.setAttribute(a, String(val));
|
|
191
|
+
}
|
|
192
|
+
// Sichtbarkeit eines Layers ändern
|
|
193
|
+
handleVisibilityChange(info, visible) {
|
|
194
|
+
if (!info.element)
|
|
195
|
+
return;
|
|
196
|
+
this.setBool(info.element, 'visible', visible, 'visible');
|
|
197
|
+
info.visible = visible;
|
|
198
|
+
// UI aktualisieren
|
|
199
|
+
this.layerGroups = [...this.layerGroups];
|
|
200
|
+
}
|
|
201
|
+
handleOpacityChange(info, opacity) {
|
|
202
|
+
if (!info.element)
|
|
203
|
+
return;
|
|
204
|
+
this.setNumber(info.element, 'opacity', opacity, 'opacity');
|
|
205
|
+
info.opacity = opacity;
|
|
206
|
+
// UI aktualisieren
|
|
207
|
+
this.layerGroups = [...this.layerGroups];
|
|
208
|
+
}
|
|
209
|
+
handleZIndexChange(info, zIndex) {
|
|
210
|
+
if (!info.element)
|
|
211
|
+
return;
|
|
212
|
+
this.setNumber(info.element, 'zIndex', zIndex, 'z-index', 'zindex');
|
|
213
|
+
info.zIndex = zIndex;
|
|
214
|
+
// UI aktualisieren
|
|
215
|
+
this.layerGroups = [...this.layerGroups];
|
|
216
|
+
}
|
|
217
|
+
handleBaseLayerChange(group, newBaseLayerId) {
|
|
218
|
+
// basemapid aktualisieren
|
|
219
|
+
group.basemapid = newBaseLayerId;
|
|
220
|
+
group.info.element.setAttribute('basemapid', newBaseLayerId);
|
|
221
|
+
// UI aktualisieren
|
|
222
|
+
this.layerGroups = [...this.layerGroups];
|
|
223
|
+
}
|
|
224
|
+
// ---- Render --------------------------------------------------------------
|
|
225
|
+
render() {
|
|
226
|
+
if (this.layerGroups.length === 0) {
|
|
227
|
+
return h("div", { class: "layer-control-empty" }, "Keine Layer verf\u00FCgbar");
|
|
228
|
+
}
|
|
229
|
+
return (h("div", { class: "layer-control" }, this.layerGroups.map(group => {
|
|
230
|
+
return (h("details", { key: group.info.id, class: "layer-group" }, h("summary", { class: "layer-group-header" }, h("input", { type: "checkbox", checked: group.info.visible, onChange: e => {
|
|
231
|
+
const visible = e.target.checked;
|
|
232
|
+
this.handleVisibilityChange(group.info, visible);
|
|
233
|
+
}, class: "layer-group-checkbox" }), h("span", { class: "layer-group-title" }, group.groupTitle), group.basemapid !== null ? (h("select", { class: "basemap-selector", onChange: e => this.handleBaseLayerChange(group, e.target.value) }, group.layers.map(layer => (h("option", { key: layer.info.id, value: layer.info.id, selected: group.basemapid === layer.info.id }, layer.label))))) : (h("div", null))), h("div", { class: "layer-group-content" }, group.layers.map(layer => (h("div", { key: layer.info.id, class: "layer-item" }, h("label", { class: "layer-item-label", title: layer.label }, h("input", { name: `group-${group.info.id}`, type: "checkbox", checked: layer.info.visible, onChange: e => this.handleVisibilityChange(layer.info, e.target.checked), class: "layer-item-checkbox" }), h("span", { class: "layer-item-title" }, layer.label)), h("div", { class: "layer-item-controls" }, h("input", { type: "range", min: "0", max: "1", step: "0.1", value: String(layer.info.opacity), onInput: e => this.handleOpacityChange(layer.info, parseFloat(e.target.value)), class: "layer-item-opacity", "aria-label": `Opacity ${layer.label}` }), h("input", { type: "number", min: "0", value: String(layer.info.zIndex), onChange: e => this.handleZIndexChange(layer.info, parseInt(e.target.value, 10) || 0), class: "layer-item-zindex", "aria-label": `Z-Index ${layer.label}` }))))))));
|
|
234
|
+
})));
|
|
235
|
+
}
|
|
236
|
+
static get is() { return "v-map-layercontrol"; }
|
|
237
|
+
static get encapsulation() { return "shadow"; }
|
|
238
|
+
static get originalStyleUrls() {
|
|
239
|
+
return {
|
|
240
|
+
"$": ["v-map-layercontrol.css"]
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
static get styleUrls() {
|
|
244
|
+
return {
|
|
245
|
+
"$": ["v-map-layercontrol.css"]
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
static get properties() {
|
|
249
|
+
return {
|
|
250
|
+
"for": {
|
|
251
|
+
"type": "string",
|
|
252
|
+
"mutable": false,
|
|
253
|
+
"complexType": {
|
|
254
|
+
"original": "string",
|
|
255
|
+
"resolved": "string",
|
|
256
|
+
"references": {}
|
|
257
|
+
},
|
|
258
|
+
"required": false,
|
|
259
|
+
"optional": false,
|
|
260
|
+
"docs": {
|
|
261
|
+
"tags": [],
|
|
262
|
+
"text": "ID der zu steuernden Karte (DOM-Element mit dieser id)"
|
|
263
|
+
},
|
|
264
|
+
"getter": false,
|
|
265
|
+
"setter": false,
|
|
266
|
+
"reflect": false,
|
|
267
|
+
"attribute": "for"
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
static get states() {
|
|
272
|
+
return {
|
|
273
|
+
"layerGroups": {}
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
static get elementRef() { return "host"; }
|
|
277
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { afterEach, beforeAll, describe, expect, it } from "vitest";
|
|
2
|
+
import { loadVMapBundle, waitFor, waitForHydration, } from "../../testing/browser-test-utils";
|
|
3
|
+
describe('v-map-layercontrol browser', () => {
|
|
4
|
+
beforeAll(async () => {
|
|
5
|
+
await loadVMapBundle();
|
|
6
|
+
await customElements.whenDefined('v-map-layercontrol');
|
|
7
|
+
});
|
|
8
|
+
afterEach(() => {
|
|
9
|
+
document.body.innerHTML = '';
|
|
10
|
+
});
|
|
11
|
+
it('renders discovered layer groups from live DOM', async () => {
|
|
12
|
+
document.body.innerHTML = `
|
|
13
|
+
<div id="map-browser-1">
|
|
14
|
+
<v-map-layergroup id="group-1" group-title="Base Maps" visible>
|
|
15
|
+
<v-map-layer-osm id="osm" label="OpenStreetMap" visible opacity="0.6" zindex="3"></v-map-layer-osm>
|
|
16
|
+
<v-map-layer-geotiff id="dem" label="DEM" opacity="0.9" zindex="4"></v-map-layer-geotiff>
|
|
17
|
+
</v-map-layergroup>
|
|
18
|
+
</div>
|
|
19
|
+
`;
|
|
20
|
+
const control = document.createElement('v-map-layercontrol');
|
|
21
|
+
control.setAttribute('for', 'map-browser-1');
|
|
22
|
+
document.body.appendChild(control);
|
|
23
|
+
await waitFor(() => control.classList.contains('hydrated'));
|
|
24
|
+
await waitFor(() => !!control.shadowRoot?.querySelector('.layer-control'));
|
|
25
|
+
const titles = Array.from(control.shadowRoot.querySelectorAll('.layer-item-title')).map(node => node.textContent?.trim());
|
|
26
|
+
expect(control.shadowRoot?.querySelector('.layer-group-title')?.textContent).toBe('Base Maps');
|
|
27
|
+
expect(titles).toEqual(['OpenStreetMap', 'DEM']);
|
|
28
|
+
});
|
|
29
|
+
it('reacts to live DOM mutations via MutationObserver', async () => {
|
|
30
|
+
document.body.innerHTML = `
|
|
31
|
+
<div id="map-browser-2">
|
|
32
|
+
<v-map-layergroup id="group-2" group-title="Overlays" visible></v-map-layergroup>
|
|
33
|
+
</div>
|
|
34
|
+
`;
|
|
35
|
+
const control = document.createElement('v-map-layercontrol');
|
|
36
|
+
control.setAttribute('for', 'map-browser-2');
|
|
37
|
+
document.body.appendChild(control);
|
|
38
|
+
await waitFor(() => control.classList.contains('hydrated'));
|
|
39
|
+
await waitFor(() => !!control.shadowRoot?.querySelector('.layer-control'));
|
|
40
|
+
const group = document.querySelector('#group-2');
|
|
41
|
+
const layer = document.createElement('v-map-layer-osm');
|
|
42
|
+
layer.id = 'late-layer';
|
|
43
|
+
layer.setAttribute('label', 'Late Layer');
|
|
44
|
+
layer.setAttribute('visible', '');
|
|
45
|
+
group.appendChild(layer);
|
|
46
|
+
await waitFor(() => control.shadowRoot?.textContent?.includes('Late Layer') ?? false);
|
|
47
|
+
expect(control.shadowRoot?.querySelector('.layer-item-title')?.textContent).toBe('Late Layer');
|
|
48
|
+
});
|
|
49
|
+
it('updates source layer attributes through browser UI interactions', async () => {
|
|
50
|
+
document.body.innerHTML = `
|
|
51
|
+
<div id="map-browser-3">
|
|
52
|
+
<v-map-layergroup id="group-3" group-title="Interactive" visible>
|
|
53
|
+
<v-map-layer-osm id="interactive-layer" label="Interactive Layer" visible opacity="1" zindex="2"></v-map-layer-osm>
|
|
54
|
+
</v-map-layergroup>
|
|
55
|
+
</div>
|
|
56
|
+
`;
|
|
57
|
+
const control = document.createElement('v-map-layercontrol');
|
|
58
|
+
control.setAttribute('for', 'map-browser-3');
|
|
59
|
+
document.body.appendChild(control);
|
|
60
|
+
await waitFor(() => control.classList.contains('hydrated'));
|
|
61
|
+
await waitFor(() => !!control.shadowRoot?.querySelector('.layer-item-checkbox'));
|
|
62
|
+
const sourceLayer = document.getElementById('interactive-layer');
|
|
63
|
+
const checkbox = control.shadowRoot.querySelector('.layer-item-checkbox');
|
|
64
|
+
const opacity = control.shadowRoot.querySelector('.layer-item-opacity');
|
|
65
|
+
const zIndex = control.shadowRoot.querySelector('.layer-item-zindex');
|
|
66
|
+
checkbox.checked = false;
|
|
67
|
+
checkbox.dispatchEvent(new Event('change', { bubbles: true }));
|
|
68
|
+
opacity.value = '0.4';
|
|
69
|
+
opacity.dispatchEvent(new Event('input', { bubbles: true }));
|
|
70
|
+
zIndex.value = '7';
|
|
71
|
+
zIndex.dispatchEvent(new Event('change', { bubbles: true }));
|
|
72
|
+
await waitFor(() => !sourceLayer.hasAttribute('visible') &&
|
|
73
|
+
sourceLayer.getAttribute('opacity') === '0.4' &&
|
|
74
|
+
sourceLayer.getAttribute('zindex') === '7');
|
|
75
|
+
expect(sourceLayer.hasAttribute('visible')).toBe(false);
|
|
76
|
+
expect(sourceLayer.getAttribute('opacity')).toBe('0.4');
|
|
77
|
+
expect(sourceLayer.getAttribute('zindex')).toBe('7');
|
|
78
|
+
});
|
|
79
|
+
it('updates group visibility through the rendered group checkbox', async () => {
|
|
80
|
+
document.body.innerHTML = `
|
|
81
|
+
<div id="map-browser-4">
|
|
82
|
+
<v-map-layergroup id="group-4" group-title="Grouped" visible>
|
|
83
|
+
<v-map-layer-osm id="grouped-layer" label="Grouped Layer" visible></v-map-layer-osm>
|
|
84
|
+
</v-map-layergroup>
|
|
85
|
+
</div>
|
|
86
|
+
`;
|
|
87
|
+
const control = document.createElement('v-map-layercontrol');
|
|
88
|
+
control.setAttribute('for', 'map-browser-4');
|
|
89
|
+
document.body.appendChild(control);
|
|
90
|
+
await waitFor(() => control.classList.contains('hydrated'));
|
|
91
|
+
await waitFor(() => !!control.shadowRoot?.querySelector('.layer-group-checkbox'));
|
|
92
|
+
const sourceGroup = document.getElementById('group-4');
|
|
93
|
+
const groupCheckbox = control.shadowRoot.querySelector('.layer-group-checkbox');
|
|
94
|
+
groupCheckbox.checked = false;
|
|
95
|
+
groupCheckbox.dispatchEvent(new Event('change', { bubbles: true }));
|
|
96
|
+
await waitFor(() => !sourceGroup.hasAttribute('visible'));
|
|
97
|
+
expect(sourceGroup.hasAttribute('visible')).toBe(false);
|
|
98
|
+
});
|
|
99
|
+
it('updates the basemap id through the rendered selector', async () => {
|
|
100
|
+
document.body.innerHTML = `
|
|
101
|
+
<div id="map-browser-5">
|
|
102
|
+
<v-map-layergroup id="group-5" group-title="Basemaps" basemapid="osm-1" visible>
|
|
103
|
+
<v-map-layer-osm id="osm-1" label="OSM" visible></v-map-layer-osm>
|
|
104
|
+
<v-map-layer-wms id="wms-1" label="WMS" visible></v-map-layer-wms>
|
|
105
|
+
</v-map-layergroup>
|
|
106
|
+
</div>
|
|
107
|
+
`;
|
|
108
|
+
const control = document.createElement('v-map-layercontrol');
|
|
109
|
+
control.setAttribute('for', 'map-browser-5');
|
|
110
|
+
document.body.appendChild(control);
|
|
111
|
+
await waitFor(() => control.classList.contains('hydrated'));
|
|
112
|
+
await waitFor(() => !!control.shadowRoot?.querySelector('.basemap-selector'));
|
|
113
|
+
const sourceGroup = document.getElementById('group-5');
|
|
114
|
+
const select = control.shadowRoot.querySelector('.basemap-selector');
|
|
115
|
+
select.value = 'wms-1';
|
|
116
|
+
select.dispatchEvent(new Event('change', { bubbles: true }));
|
|
117
|
+
await waitFor(() => sourceGroup.getAttribute('basemapid') === 'wms-1');
|
|
118
|
+
expect(sourceGroup.getAttribute('basemapid')).toBe('wms-1');
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
it('hydrates and keeps the target map reference via the for attribute', async () => {
|
|
122
|
+
document.body.innerHTML = `
|
|
123
|
+
<v-map id="my-map" flavour="ol" style="display:block;width:300px;height:200px">
|
|
124
|
+
<v-map-layergroup>
|
|
125
|
+
<v-map-layer-osm></v-map-layer-osm>
|
|
126
|
+
</v-map-layergroup>
|
|
127
|
+
</v-map>
|
|
128
|
+
`;
|
|
129
|
+
const control = document.createElement('v-map-layercontrol');
|
|
130
|
+
control.setAttribute('for', 'my-map');
|
|
131
|
+
document.body.appendChild(control);
|
|
132
|
+
await waitForHydration(control);
|
|
133
|
+
expect(control.getAttribute('for')).toBe('my-map');
|
|
134
|
+
});
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
import { VMapEvents } from "../../utils/events";
|
|
3
|
+
import { log } from "../../utils/logger";
|
|
4
|
+
import MSG from "../../utils/messages";
|
|
5
|
+
const MSG_COMPONENT = 'v-map-layergroup - ';
|
|
6
|
+
export class VMapLayerGroup {
|
|
7
|
+
el;
|
|
8
|
+
/**
|
|
9
|
+
* Sichtbarkeit der gesamten Gruppe.
|
|
10
|
+
* @default true
|
|
11
|
+
*/
|
|
12
|
+
visible = true;
|
|
13
|
+
/**
|
|
14
|
+
* Globale Opazität (0–1) für alle Kinder.
|
|
15
|
+
* @default 1
|
|
16
|
+
*/
|
|
17
|
+
opacity = 1.0;
|
|
18
|
+
// /**
|
|
19
|
+
// * Kennzeichnet diese Gruppe als Basis-Kartenebene (exklusiv sichtbar).
|
|
20
|
+
// * @default false
|
|
21
|
+
// */
|
|
22
|
+
// @Prop({ reflect: true }) basemap = false;
|
|
23
|
+
/**
|
|
24
|
+
* Base map identifier for this layer group. When set, layers in this group will be treated as base map layers.
|
|
25
|
+
*/
|
|
26
|
+
basemapid = null;
|
|
27
|
+
// /**
|
|
28
|
+
// * Eindeutige Gruppen-ID (z. B. für programmatisches Umschalten).
|
|
29
|
+
// */
|
|
30
|
+
// @Prop({ reflect: true }) groupId: string = Math.random()
|
|
31
|
+
// .toString(36)
|
|
32
|
+
// .slice(2, 11);
|
|
33
|
+
mapProvider = null;
|
|
34
|
+
groupId = crypto.randomUUID();
|
|
35
|
+
async onVisibleChanged() {
|
|
36
|
+
log(MSG_COMPONENT + 'onVisibleChanged');
|
|
37
|
+
if (this.mapProvider?.setGroupVisible) {
|
|
38
|
+
await this.mapProvider.setGroupVisible(this.groupId, this.visible);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async onBaseMapIdChanged() {
|
|
42
|
+
log(MSG_COMPONENT + 'onBaseMapIdChanged');
|
|
43
|
+
if (this.mapProvider?.setBaseLayer) {
|
|
44
|
+
await this.mapProvider.setBaseLayer(this.groupId, this.basemapid);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async init(mapProvider) {
|
|
48
|
+
if (this.mapProvider != null)
|
|
49
|
+
return;
|
|
50
|
+
this.mapProvider = mapProvider;
|
|
51
|
+
if (this.mapProvider === null)
|
|
52
|
+
return;
|
|
53
|
+
if (this.mapProvider?.ensureGroup) {
|
|
54
|
+
await this.mapProvider.ensureGroup(this.groupId, this.visible, {
|
|
55
|
+
basemapid: this.basemapid,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
await this.mapProvider?.setGroupVisible(this.groupId, this.visible);
|
|
59
|
+
await this.mapProvider?.setBaseLayer(this.groupId, this.basemapid);
|
|
60
|
+
}
|
|
61
|
+
async connectedCallback() {
|
|
62
|
+
log(MSG_COMPONENT + MSG.COMPONENT_CONNECTED_CALLBACK);
|
|
63
|
+
const mapElement = this.el.closest('v-map');
|
|
64
|
+
await customElements.whenDefined('v-map');
|
|
65
|
+
const vmap = mapElement;
|
|
66
|
+
const mapProviderAvailable = (await mapElement?.isMapProviderReady?.()) === true;
|
|
67
|
+
if (mapProviderAvailable) {
|
|
68
|
+
const mapProvider = mapElement?.__vMapProvider ?? null;
|
|
69
|
+
await this.init(mapProvider);
|
|
70
|
+
}
|
|
71
|
+
vmap?.addEventListener(VMapEvents.MapProviderReady, (async (event) => {
|
|
72
|
+
log(`${MSG_COMPONENT}map provider ready`);
|
|
73
|
+
const mapEvent = event.detail;
|
|
74
|
+
await this.init(mapEvent.mapProvider);
|
|
75
|
+
}));
|
|
76
|
+
vmap?.addEventListener(VMapEvents.MapProviderWillShutdown, async (_event) => {
|
|
77
|
+
log(`${MSG_COMPONENT}map provider shutting down`);
|
|
78
|
+
this.mapProvider = null;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async componentWillLoad() {
|
|
82
|
+
log(MSG_COMPONENT + MSG.COMPONENT_WILL_LOAD);
|
|
83
|
+
}
|
|
84
|
+
async componentDidLoad() {
|
|
85
|
+
log(MSG_COMPONENT + MSG.COMPONENT_DID_LOAD);
|
|
86
|
+
}
|
|
87
|
+
async componentWillRender() {
|
|
88
|
+
log(MSG_COMPONENT + MSG.COMPONENT_WILL_RENDER);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns the internal group identifier used by the map provider.
|
|
92
|
+
*/
|
|
93
|
+
async getGroupId() {
|
|
94
|
+
return this.groupId;
|
|
95
|
+
}
|
|
96
|
+
render() {
|
|
97
|
+
return h("slot", { key: '584a5816d8f73071bf257e3f70a4c2baea2d2f56' });
|
|
98
|
+
}
|
|
99
|
+
static get is() { return "v-map-layergroup"; }
|
|
100
|
+
static get encapsulation() { return "shadow"; }
|
|
101
|
+
static get originalStyleUrls() {
|
|
102
|
+
return {
|
|
103
|
+
"$": ["v-map-layergroup.css"]
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
static get styleUrls() {
|
|
107
|
+
return {
|
|
108
|
+
"$": ["v-map-layergroup.css"]
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
static get properties() {
|
|
112
|
+
return {
|
|
113
|
+
"visible": {
|
|
114
|
+
"type": "boolean",
|
|
115
|
+
"mutable": false,
|
|
116
|
+
"complexType": {
|
|
117
|
+
"original": "boolean",
|
|
118
|
+
"resolved": "boolean",
|
|
119
|
+
"references": {}
|
|
120
|
+
},
|
|
121
|
+
"required": false,
|
|
122
|
+
"optional": false,
|
|
123
|
+
"docs": {
|
|
124
|
+
"tags": [{
|
|
125
|
+
"name": "default",
|
|
126
|
+
"text": "true"
|
|
127
|
+
}],
|
|
128
|
+
"text": "Sichtbarkeit der gesamten Gruppe."
|
|
129
|
+
},
|
|
130
|
+
"getter": false,
|
|
131
|
+
"setter": false,
|
|
132
|
+
"reflect": true,
|
|
133
|
+
"attribute": "visible",
|
|
134
|
+
"defaultValue": "true"
|
|
135
|
+
},
|
|
136
|
+
"opacity": {
|
|
137
|
+
"type": "number",
|
|
138
|
+
"mutable": false,
|
|
139
|
+
"complexType": {
|
|
140
|
+
"original": "number",
|
|
141
|
+
"resolved": "number",
|
|
142
|
+
"references": {}
|
|
143
|
+
},
|
|
144
|
+
"required": false,
|
|
145
|
+
"optional": false,
|
|
146
|
+
"docs": {
|
|
147
|
+
"tags": [{
|
|
148
|
+
"name": "default",
|
|
149
|
+
"text": "1"
|
|
150
|
+
}],
|
|
151
|
+
"text": "Globale Opazit\u00E4t (0\u20131) f\u00FCr alle Kinder."
|
|
152
|
+
},
|
|
153
|
+
"getter": false,
|
|
154
|
+
"setter": false,
|
|
155
|
+
"reflect": true,
|
|
156
|
+
"attribute": "opacity",
|
|
157
|
+
"defaultValue": "1.0"
|
|
158
|
+
},
|
|
159
|
+
"basemapid": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"mutable": false,
|
|
162
|
+
"complexType": {
|
|
163
|
+
"original": "string | null",
|
|
164
|
+
"resolved": "string",
|
|
165
|
+
"references": {}
|
|
166
|
+
},
|
|
167
|
+
"required": false,
|
|
168
|
+
"optional": false,
|
|
169
|
+
"docs": {
|
|
170
|
+
"tags": [],
|
|
171
|
+
"text": "Base map identifier for this layer group. When set, layers in this group will be treated as base map layers."
|
|
172
|
+
},
|
|
173
|
+
"getter": false,
|
|
174
|
+
"setter": false,
|
|
175
|
+
"reflect": true,
|
|
176
|
+
"attribute": "basemapid",
|
|
177
|
+
"defaultValue": "null"
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
static get methods() {
|
|
182
|
+
return {
|
|
183
|
+
"getGroupId": {
|
|
184
|
+
"complexType": {
|
|
185
|
+
"signature": "() => Promise<string>",
|
|
186
|
+
"parameters": [],
|
|
187
|
+
"references": {
|
|
188
|
+
"Promise": {
|
|
189
|
+
"location": "global",
|
|
190
|
+
"id": "global::Promise"
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
"return": "Promise<string>"
|
|
194
|
+
},
|
|
195
|
+
"docs": {
|
|
196
|
+
"text": "Returns the internal group identifier used by the map provider.",
|
|
197
|
+
"tags": []
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
static get elementRef() { return "el"; }
|
|
203
|
+
static get watchers() {
|
|
204
|
+
return [{
|
|
205
|
+
"propName": "visible",
|
|
206
|
+
"methodName": "onVisibleChanged"
|
|
207
|
+
}, {
|
|
208
|
+
"propName": "basemapid",
|
|
209
|
+
"methodName": "onBaseMapIdChanged"
|
|
210
|
+
}];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { afterEach, beforeAll, describe, expect, it } from "vitest";
|
|
2
|
+
import { createLiveMap, createTaggedElement, loadVMapBundle, onceEvent, waitFor, waitForHydration, } from "../../testing/browser-test-utils";
|
|
3
|
+
describe('v-map-layergroup browser', () => {
|
|
4
|
+
beforeAll(async () => {
|
|
5
|
+
await loadVMapBundle();
|
|
6
|
+
await customElements.whenDefined('v-map-layergroup');
|
|
7
|
+
});
|
|
8
|
+
afterEach(() => {
|
|
9
|
+
document.body.innerHTML = '';
|
|
10
|
+
});
|
|
11
|
+
it('hydrates with child base layers and keeps a live group id', async () => {
|
|
12
|
+
const map = createLiveMap();
|
|
13
|
+
const mapReady = onceEvent(map, 'map-provider-ready');
|
|
14
|
+
const group = createTaggedElement('v-map-layergroup');
|
|
15
|
+
const primaryLayer = createTaggedElement('v-map-layer-osm');
|
|
16
|
+
const secondaryLayer = createTaggedElement('v-map-layer-osm');
|
|
17
|
+
group.setAttribute('basemapid', 'osm-primary');
|
|
18
|
+
primaryLayer.id = 'osm-primary';
|
|
19
|
+
secondaryLayer.id = 'osm-secondary';
|
|
20
|
+
primaryLayer.visible = false;
|
|
21
|
+
secondaryLayer.visible = false;
|
|
22
|
+
group.append(primaryLayer, secondaryLayer);
|
|
23
|
+
map.appendChild(group);
|
|
24
|
+
document.body.appendChild(map);
|
|
25
|
+
await mapReady;
|
|
26
|
+
await waitForHydration(group);
|
|
27
|
+
await waitForHydration(primaryLayer);
|
|
28
|
+
await waitForHydration(secondaryLayer);
|
|
29
|
+
const groupId = await group.getGroupId();
|
|
30
|
+
expect(typeof groupId).toBe('string');
|
|
31
|
+
expect(groupId.length).toBeGreaterThan(0);
|
|
32
|
+
group.visible = false;
|
|
33
|
+
group.setAttribute('basemapid', 'osm-secondary');
|
|
34
|
+
await waitFor(() => !group.hasAttribute('visible') &&
|
|
35
|
+
group.getAttribute('basemapid') === 'osm-secondary');
|
|
36
|
+
expect(group.hasAttribute('visible')).toBe(false);
|
|
37
|
+
expect(group.getAttribute('basemapid')).toBe('osm-secondary');
|
|
38
|
+
});
|
|
39
|
+
});
|