@vcmap/core 5.0.0-rc.3 → 5.0.0-rc.31
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.md +1 -1
- package/README.md +12 -5
- package/build/postinstall.js +14 -3
- package/index.d.ts +3480 -2008
- package/index.js +169 -131
- package/package.json +25 -27
- package/src/category/category.js +483 -0
- package/src/category/categoryCollection.js +153 -0
- package/src/cesium/cesium3DTileFeature.js +2 -2
- package/src/cesium/cesium3DTilePointFeature.js +1 -1
- package/src/cesium/cesiumVcsCameraPrimitive.js +16 -8
- package/src/cesium/entity.js +29 -0
- package/src/cesium/wallpaperMaterial.js +5 -3
- package/src/classRegistry.js +169 -0
- package/src/{vcs/vcm/util/featureProvider → featureProvider}/abstractFeatureProvider.js +49 -46
- package/src/{vcs/vcm/util/featureProvider → featureProvider}/tileProviderFeatureProvider.js +13 -5
- package/src/{vcs/vcm/util/featureProvider → featureProvider}/wmsFeatureProvider.js +56 -26
- package/src/{vcs/vcm/interaction → interaction}/abstractInteraction.js +33 -21
- package/src/{vcs/vcm/interaction → interaction}/coordinateAtPixel.js +40 -21
- package/src/{vcs/vcm/interaction → interaction}/eventHandler.js +131 -26
- package/src/{vcs/vcm/interaction → interaction}/featureAtPixelInteraction.js +108 -53
- package/src/interaction/featureProviderInteraction.js +58 -0
- package/src/{vcs/vcm/interaction → interaction}/interactionChain.js +40 -41
- package/src/{vcs/vcm/interaction → interaction}/interactionType.js +24 -31
- package/src/{vcs/vcm/layer/cesium/cesiumTilesetCesium.js → layer/cesium/cesiumTilesetCesiumImpl.js} +83 -70
- package/src/{vcs/vcm/layer → layer}/cesium/clusterContext.js +33 -8
- package/src/{vcs/vcm/layer/cesium/dataSourceCesium.js → layer/cesium/dataSourceCesiumImpl.js} +24 -13
- package/src/layer/cesium/openStreetMapCesiumImpl.js +32 -0
- package/src/{vcs/vcm/layer/cesium/rasterLayerCesium.js → layer/cesium/rasterLayerCesiumImpl.js} +12 -9
- package/src/{vcs/vcm/layer/cesium/singleImageCesium.js → layer/cesium/singleImageCesiumImpl.js} +19 -9
- package/src/{vcs/vcm/layer/cesium/terrainCesium.js → layer/cesium/terrainCesiumImpl.js} +8 -9
- package/src/{vcs/vcm/layer/cesium/tmsCesium.js → layer/cesium/tmsCesiumImpl.js} +21 -10
- package/src/{vcs/vcm/layer/cesium/vectorCesium.js → layer/cesium/vectorCesiumImpl.js} +93 -35
- package/src/layer/cesium/vectorContext.js +363 -0
- package/src/{vcs/vcm/layer/cesium/vectorRasterTileCesium.js → layer/cesium/vectorRasterTileCesiumImpl.js} +21 -13
- package/src/{vcs/vcm/layer → layer}/cesium/vectorTileImageryProvider.js +58 -21
- package/src/{vcs/vcm/layer/cesium/wmsCesium.js → layer/cesium/wmsCesiumImpl.js} +20 -9
- package/src/{vcs/vcm/layer/cesium/wmtsCesium.js → layer/cesium/wmtsCesiumImpl.js} +24 -13
- package/src/{vcs/vcm/layer → layer}/cesium/x3dmHelper.js +6 -3
- package/src/{vcs/vcm/layer/cesiumTileset.js → layer/cesiumTilesetLayer.js} +71 -112
- package/src/{vcs/vcm/layer/czml.js → layer/czmlLayer.js} +23 -20
- package/src/{vcs/vcm/layer/dataSource.js → layer/dataSourceLayer.js} +55 -90
- package/src/{vcs/vcm/layer → layer}/featureLayer.js +89 -74
- package/src/{vcs/vcm/layer/featureStore.js → layer/featureStoreLayer.js} +197 -150
- package/src/{vcs/vcm/layer/featureStoreChanges.js → layer/featureStoreLayerChanges.js} +150 -92
- package/src/{vcs/vcm/layer/featureStoreState.js → layer/featureStoreLayerState.js} +1 -2
- package/src/{vcs/vcm/layer → layer}/featureVisibility.js +114 -82
- package/src/{vcs/vcm/layer → layer}/geojsonHelpers.js +84 -69
- package/src/{vcs/vcm/layer/geojson.js → layer/geojsonLayer.js} +30 -27
- package/src/{vcs/vcm/layer → layer}/globalHider.js +25 -39
- package/src/{vcs/vcm/layer → layer}/layer.js +171 -96
- package/src/{vcs/vcm/layer → layer}/layerImplementation.js +13 -6
- package/src/{vcs/vcm/layer → layer}/layerState.js +0 -1
- package/src/{vcs/vcm/layer → layer}/layerSymbols.js +2 -1
- package/src/{vcs/vcm/layer/oblique/layerOblique.js → layer/oblique/layerObliqueImpl.js} +7 -5
- package/src/{vcs/vcm/layer → layer}/oblique/obliqueHelpers.js +76 -31
- package/src/{vcs/vcm/layer/oblique/vectorOblique.js → layer/oblique/vectorObliqueImpl.js} +198 -80
- package/src/{vcs/vcm/layer/openStreetMap.js → layer/openStreetMapLayer.js} +59 -40
- package/src/layer/openlayers/layerOpenlayersImpl.js +165 -0
- package/src/layer/openlayers/openStreetMapOpenlayersImpl.js +28 -0
- package/src/layer/openlayers/rasterLayerOpenlayersImpl.js +44 -0
- package/src/{vcs/vcm/layer/openlayers/singleImageOpenlayers.js → layer/openlayers/singleImageOpenlayersImpl.js} +8 -7
- package/src/{vcs/vcm/layer/openlayers/tileDebugOpenlayers.js → layer/openlayers/tileDebugOpenlayersImpl.js} +7 -6
- package/src/{vcs/vcm/layer/openlayers/tmsOpenlayers.js → layer/openlayers/tmsOpenlayersImpl.js} +12 -10
- package/src/{vcs/vcm/layer/openlayers/vectorOpenlayers.js → layer/openlayers/vectorOpenlayersImpl.js} +21 -12
- package/src/{vcs/vcm/layer/openlayers/vectorTileOpenlayers.js → layer/openlayers/vectorTileOpenlayersImpl.js} +18 -12
- package/src/{vcs/vcm/layer/openlayers/wmsOpenlayers.js → layer/openlayers/wmsOpenlayersImpl.js} +9 -8
- package/src/{vcs/vcm/layer/openlayers/wmtsOpenlayers.js → layer/openlayers/wmtsOpenlayersImpl.js} +19 -12
- package/src/{vcs/vcm/layer/pointCloud.js → layer/pointCloudLayer.js} +42 -39
- package/src/{vcs/vcm/layer → layer}/rasterLayer.js +86 -37
- package/src/{vcs/vcm/layer/singleImage.js → layer/singleImageLayer.js} +25 -22
- package/src/layer/terrainHelpers.js +95 -0
- package/src/{vcs/vcm/layer/terrain.js → layer/terrainLayer.js} +28 -21
- package/src/{vcs/vcm/layer → layer}/tileLoadedHelper.js +13 -8
- package/src/{vcs/vcm/layer → layer}/tileProvider/mvtTileProvider.js +51 -8
- package/src/layer/tileProvider/staticGeojsonTileProvider.js +87 -0
- package/src/{vcs/vcm/layer → layer}/tileProvider/tileProvider.js +200 -89
- package/src/{vcs/vcm/layer → layer}/tileProvider/urlTemplateTileProvider.js +54 -13
- package/src/{vcs/vcm/layer/tms.js → layer/tmsLayer.js} +22 -22
- package/src/layer/vectorHelpers.js +129 -0
- package/src/{vcs/vcm/layer/vector.js → layer/vectorLayer.js} +124 -94
- package/src/{vcs/vcm/layer → layer}/vectorProperties.js +419 -107
- package/src/{vcs/vcm/layer → layer}/vectorSymbols.js +11 -1
- package/src/{vcs/vcm/layer/vectorTile.js → layer/vectorTileLayer.js} +181 -116
- package/src/{vcs/vcm/layer/wfs.js → layer/wfsLayer.js} +33 -23
- package/src/{vcs/vcm/layer → layer}/wmsHelpers.js +14 -7
- package/src/{vcs/vcm/layer/wms.js → layer/wmsLayer.js} +53 -32
- package/src/{vcs/vcm/layer/wmts.js → layer/wmtsLayer.js} +56 -42
- package/src/{vcs/vcm/maps → map}/baseOLMap.js +83 -35
- package/src/{vcs/vcm/maps → map}/cameraLimiter.js +64 -37
- package/src/{vcs/vcm/maps/cesium.js → map/cesiumMap.js} +431 -277
- package/src/{vcs/vcm/maps → map}/mapState.js +0 -1
- package/src/{vcs/vcm/maps/oblique.js → map/obliqueMap.js} +132 -97
- package/src/{vcs/vcm/maps/openlayers.js → map/openlayersMap.js} +69 -45
- package/src/{vcs/vcm/maps/map.js → map/vcsMap.js} +118 -46
- package/src/oblique/defaultObliqueCollection.js +62 -0
- package/src/{vcs/vcm/oblique → oblique}/helpers.js +221 -78
- package/src/{vcs/vcm/oblique/ObliqueCollection.js → oblique/obliqueCollection.js} +151 -55
- package/src/{vcs/vcm/oblique/ObliqueDataSet.js → oblique/obliqueDataSet.js} +77 -46
- package/src/{vcs/vcm/oblique/ObliqueImage.js → oblique/obliqueImage.js} +58 -26
- package/src/{vcs/vcm/oblique/ObliqueImageMeta.js → oblique/obliqueImageMeta.js} +9 -9
- package/src/{vcs/vcm/oblique/ObliqueProvider.js → oblique/obliqueProvider.js} +85 -35
- package/src/{vcs/vcm/oblique/ObliqueView.js → oblique/obliqueView.js} +45 -5
- package/src/{vcs/vcm/oblique/ObliqueViewDirection.js → oblique/obliqueViewDirection.js} +3 -5
- package/src/{vcs/vcm/oblique → oblique}/parseImageJson.js +62 -28
- package/src/ol/feature.js +34 -1
- package/src/ol/geom/circle.js +14 -5
- package/src/ol/geom/geometryCollection.js +14 -8
- package/src/ol/render/canvas/canvasTileRenderer.js +11 -10
- package/src/overrideClassRegistry.js +214 -0
- package/src/style/arcStyle.js +453 -0
- package/src/style/arrowStyle.js +304 -0
- package/src/{vcs/vcm/util/style → style}/declarativeStyleItem.js +147 -82
- package/src/{vcs/vcm/util/style → style}/shapesCategory.js +8 -8
- package/src/style/styleFactory.js +32 -0
- package/src/{vcs/vcm/util/style → style}/styleHelpers.js +24 -26
- package/src/style/styleItem.js +174 -0
- package/src/{vcs/vcm/util/style → style}/vectorStyleItem.js +230 -156
- package/src/{vcs/vcm/util/style → style}/writeStyle.js +7 -12
- package/src/{vcs/vcm/util → util}/clipping/clippingObject.js +79 -49
- package/src/{vcs/vcm/util → util}/clipping/clippingObjectManager.js +56 -23
- package/src/{vcs/vcm/util → util}/clipping/clippingPlaneHelper.js +149 -88
- package/src/{vcs/vcm/util → util}/collection.js +28 -10
- package/src/util/editor/createFeatureSession.js +195 -0
- package/src/util/editor/editFeaturesSession.js +325 -0
- package/src/util/editor/editGeometrySession.js +452 -0
- package/src/util/editor/editorHelpers.js +300 -0
- package/src/util/editor/editorSessionHelpers.js +132 -0
- package/src/util/editor/editorSymbols.js +21 -0
- package/src/util/editor/interactions/createBBoxInteraction.js +154 -0
- package/src/util/editor/interactions/createCircleInteraction.js +119 -0
- package/src/util/editor/interactions/createLineStringInteraction.js +119 -0
- package/src/util/editor/interactions/createPointInteraction.js +73 -0
- package/src/util/editor/interactions/createPolygonInteraction.js +136 -0
- package/src/util/editor/interactions/editFeaturesMouseOverInteraction.js +88 -0
- package/src/util/editor/interactions/editGeometryMouseOverInteraction.js +119 -0
- package/src/util/editor/interactions/ensureHandlerSelectionInteraction.js +50 -0
- package/src/util/editor/interactions/insertVertexInteraction.js +103 -0
- package/src/util/editor/interactions/mapInteractionController.js +119 -0
- package/src/util/editor/interactions/removeVertexInteraction.js +42 -0
- package/src/util/editor/interactions/selectFeatureMouseOverInteraction.js +152 -0
- package/src/util/editor/interactions/selectMultiFeatureInteraction.js +165 -0
- package/src/util/editor/interactions/selectSingleFeatureInteraction.js +120 -0
- package/src/util/editor/interactions/translateVertexInteraction.js +60 -0
- package/src/util/editor/selectFeaturesSession.js +303 -0
- package/src/util/editor/transformation/create2DHandlers.js +339 -0
- package/src/util/editor/transformation/create3DHandlers.js +678 -0
- package/src/util/editor/transformation/extrudeInteraction.js +106 -0
- package/src/util/editor/transformation/rotateInteraction.js +201 -0
- package/src/util/editor/transformation/scaleInteraction.js +201 -0
- package/src/util/editor/transformation/transformationHandler.js +178 -0
- package/src/util/editor/transformation/transformationTypes.js +88 -0
- package/src/util/editor/transformation/translateInteraction.js +263 -0
- package/src/util/editor/validateGeoemetry.js +24 -0
- package/src/{vcs/vcm/util → util}/exclusiveManager.js +6 -3
- package/src/{vcs/vcm/util → util}/extent.js +26 -20
- package/src/util/featureconverter/arcToCesium.js +121 -0
- package/src/{vcs/vcm/util → util}/featureconverter/circleToCesium.js +70 -37
- package/src/{vcs/vcm/util → util}/featureconverter/convert.js +94 -16
- package/src/util/featureconverter/extent3D.js +284 -0
- package/src/{vcs/vcm/util → util}/featureconverter/featureconverterHelper.js +253 -94
- package/src/util/featureconverter/lineStringToCesium.js +343 -0
- package/src/util/featureconverter/pointHelpers.js +413 -0
- package/src/{vcs/vcm/util → util}/featureconverter/pointToCesium.js +157 -107
- package/src/{vcs/vcm/util → util}/featureconverter/polygonToCesium.js +57 -24
- package/src/util/fetch.js +34 -0
- package/src/{vcs/vcm/util → util}/geometryHelpers.js +25 -17
- package/src/{vcs/vcm/util → util}/indexedCollection.js +27 -8
- package/src/{vcs/vcm/util → util}/isMobile.js +8 -2
- package/src/{vcs/vcm/util → util}/layerCollection.js +109 -19
- package/src/util/locale.js +12 -0
- package/src/{vcs/vcm/util → util}/mapCollection.js +170 -63
- package/src/util/math.js +193 -0
- package/src/util/overrideCollection.js +261 -0
- package/src/{vcs/vcm/util → util}/projection.js +23 -31
- package/src/{vcs/vcm/util → util}/urlHelpers.js +5 -3
- package/src/{vcs/vcm/util → util}/viewpoint.js +83 -57
- package/src/vcsApp.js +657 -0
- package/src/{vcs/vcm/event/vcsEvent.js → vcsEvent.js} +2 -3
- package/src/vcsModule.js +130 -0
- package/src/vcsModuleHelpers.js +136 -0
- package/src/{vcs/vcm/object.js → vcsObject.js} +3 -10
- package/tests/data/dynamicPointCzml.json +53 -0
- package/tests/data/oblique/imageData/imagev34.json +136 -0
- package/tests/data/oblique/imageData/imagev35.json +307 -0
- package/tests/data/oblique/imageData/imagev35PerImageSize.json +333 -0
- package/tests/data/oblique/tiledImageData/12/2199/1342.json +11056 -0
- package/tests/data/oblique/tiledImageData/12/2199/1343.json +11236 -0
- package/tests/data/oblique/tiledImageData/12/2199/1344.json +11077 -0
- package/tests/data/oblique/tiledImageData/12/2200/1342.json +11036 -0
- package/tests/data/oblique/tiledImageData/12/2200/1343.json +11277 -0
- package/tests/data/oblique/tiledImageData/12/2200/1344.json +11131 -0
- package/tests/data/oblique/tiledImageData/12/2201/1342.json +10870 -0
- package/tests/data/oblique/tiledImageData/12/2201/1343.json +11492 -0
- package/tests/data/oblique/tiledImageData/12/2201/1344.json +10909 -0
- package/tests/data/oblique/tiledImageData/image.json +70 -0
- package/tests/data/terrain/13/8800/6485.terrain +0 -0
- package/tests/data/terrain/13/8800/6486.terrain +0 -0
- package/tests/data/terrain/13/8801/6485.terrain +0 -0
- package/tests/data/terrain/13/8801/6486.terrain +0 -0
- package/tests/data/terrain/layer.json +127 -0
- package/tests/data/testGeoJSON.json +149 -0
- package/tests/data/tile.pbf +0 -0
- package/tests/unit/helpers/cesiumHelpers.js +326 -0
- package/tests/unit/helpers/getFileNameFromUrl.js +12 -0
- package/tests/unit/helpers/helpers.js +32 -0
- package/tests/unit/helpers/imageHelpers.js +24 -0
- package/tests/unit/helpers/importJSON.js +15 -0
- package/tests/unit/helpers/obliqueData.js +102 -0
- package/tests/unit/helpers/obliqueHelpers.js +115 -0
- package/tests/unit/helpers/openlayersHelpers.js +25 -0
- package/tests/unit/helpers/terrain/terrainData.js +45 -0
- package/src/vcs/vcm/classRegistry.js +0 -106
- package/src/vcs/vcm/globalCollections.js +0 -11
- package/src/vcs/vcm/interaction/featureProviderInteraction.js +0 -54
- package/src/vcs/vcm/layer/buildings.js +0 -17
- package/src/vcs/vcm/layer/cesium/openStreetMapCesium.js +0 -29
- package/src/vcs/vcm/layer/cesium/pointCloudCesium.js +0 -58
- package/src/vcs/vcm/layer/cesium/vectorContext.js +0 -167
- package/src/vcs/vcm/layer/openlayers/layerOpenlayers.js +0 -79
- package/src/vcs/vcm/layer/openlayers/openStreetMapOpenlayers.js +0 -27
- package/src/vcs/vcm/layer/openlayers/rasterLayerOpenlayers.js +0 -121
- package/src/vcs/vcm/layer/terrainHelpers.js +0 -119
- package/src/vcs/vcm/layer/tileProvider/staticGeojsonTileProvider.js +0 -67
- package/src/vcs/vcm/layer/tileProvider/tileProviderFactory.js +0 -28
- package/src/vcs/vcm/layer/vectorHelpers.js +0 -206
- package/src/vcs/vcm/util/dateTime.js +0 -60
- package/src/vcs/vcm/util/featureProvider/featureProviderHelpers.js +0 -51
- package/src/vcs/vcm/util/featureconverter/extent3d.js +0 -154
- package/src/vcs/vcm/util/featureconverter/lineStringToCesium.js +0 -171
- package/src/vcs/vcm/util/locale.js +0 -53
- package/src/vcs/vcm/util/math.js +0 -71
- package/src/vcs/vcm/util/splitScreen.js +0 -233
- package/src/vcs/vcm/util/style/styleFactory.js +0 -48
- package/src/vcs/vcm/util/style/styleItem.js +0 -243
- /package/src/{vcs/vcm/util/featureProvider → featureProvider}/featureProviderSymbols.js +0 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { check } from '@vcsuite/check';
|
|
2
2
|
import RasterLayer from './rasterLayer.js';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import CesiumMap from '../
|
|
6
|
-
import
|
|
3
|
+
import SingleImageCesiumImpl from './cesium/singleImageCesiumImpl.js';
|
|
4
|
+
import SingleImageOpenlayersImpl from './openlayers/singleImageOpenlayersImpl.js';
|
|
5
|
+
import CesiumMap from '../map/cesiumMap.js';
|
|
6
|
+
import OpenlayersMap from '../map/openlayersMap.js';
|
|
7
7
|
import Extent from '../util/extent.js';
|
|
8
|
-
import {
|
|
8
|
+
import { layerClassRegistry } from '../classRegistry.js';
|
|
9
|
+
import { wgs84Projection } from '../util/projection.js';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* @typedef {RasterLayerOptions} SingleImageOptions
|
|
@@ -19,14 +20,15 @@ import { VcsClassRegistry } from '../classRegistry.js';
|
|
|
19
20
|
*/
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
|
-
* Image layer for Cesium and
|
|
23
|
+
* Image layer for Cesium and OpenlayersMap
|
|
23
24
|
* @class
|
|
24
|
-
* @export
|
|
25
25
|
* @extends {RasterLayer}
|
|
26
26
|
* @api stable
|
|
27
27
|
*/
|
|
28
|
-
class
|
|
29
|
-
static get className() {
|
|
28
|
+
class SingleImageLayer extends RasterLayer {
|
|
29
|
+
static get className() {
|
|
30
|
+
return 'SingleImageLayer';
|
|
31
|
+
}
|
|
30
32
|
|
|
31
33
|
/**
|
|
32
34
|
* @returns {SingleImageOptions}
|
|
@@ -43,22 +45,21 @@ class SingleImage extends RasterLayer {
|
|
|
43
45
|
*/
|
|
44
46
|
constructor(options) {
|
|
45
47
|
super(options);
|
|
46
|
-
const defaultOptions =
|
|
48
|
+
const defaultOptions = SingleImageLayer.getDefaultOptions();
|
|
47
49
|
/** @type {string} */
|
|
48
50
|
this.credit = options.credit || defaultOptions.credit;
|
|
49
51
|
|
|
50
52
|
if (!this.extent.isValid()) {
|
|
51
|
-
this.getLogger().warning(
|
|
53
|
+
this.getLogger().warning(
|
|
54
|
+
`layer ${this.name} was constructed with an invalid extent, defaulting to global extent`,
|
|
55
|
+
);
|
|
52
56
|
this.extent = new Extent({
|
|
53
|
-
|
|
57
|
+
projection: wgs84Projection.toJSON(),
|
|
54
58
|
coordinates: [-180, -90, 180, 90],
|
|
55
59
|
});
|
|
56
60
|
}
|
|
57
61
|
|
|
58
|
-
this._supportedMaps = [
|
|
59
|
-
CesiumMap.className,
|
|
60
|
-
Openlayers.className,
|
|
61
|
-
];
|
|
62
|
+
this._supportedMaps = [CesiumMap.className, OpenlayersMap.className];
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
/**
|
|
@@ -73,13 +74,15 @@ class SingleImage extends RasterLayer {
|
|
|
73
74
|
|
|
74
75
|
/**
|
|
75
76
|
* @param {import("@vcmap/core").VcsMap} map
|
|
76
|
-
* @returns {Array<
|
|
77
|
+
* @returns {Array<SingleImageOpenlayersImpl|SingleImageCesiumImpl>}
|
|
77
78
|
*/
|
|
78
79
|
createImplementationsForMap(map) {
|
|
79
80
|
if (map instanceof CesiumMap) {
|
|
80
|
-
return [new
|
|
81
|
-
} else if (map instanceof
|
|
82
|
-
return [
|
|
81
|
+
return [new SingleImageCesiumImpl(map, this.getImplementationOptions())];
|
|
82
|
+
} else if (map instanceof OpenlayersMap) {
|
|
83
|
+
return [
|
|
84
|
+
new SingleImageOpenlayersImpl(map, this.getImplementationOptions()),
|
|
85
|
+
];
|
|
83
86
|
}
|
|
84
87
|
return [];
|
|
85
88
|
}
|
|
@@ -115,5 +118,5 @@ class SingleImage extends RasterLayer {
|
|
|
115
118
|
}
|
|
116
119
|
}
|
|
117
120
|
|
|
118
|
-
|
|
119
|
-
export default
|
|
121
|
+
layerClassRegistry.registerClass(SingleImageLayer.className, SingleImageLayer);
|
|
122
|
+
export default SingleImageLayer;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CesiumTerrainProvider,
|
|
3
|
+
Cartographic,
|
|
4
|
+
Cartesian2,
|
|
5
|
+
sampleTerrainMostDetailed,
|
|
6
|
+
} from '@vcmap-cesium/engine';
|
|
7
|
+
import { getTransform } from 'ol/proj.js';
|
|
8
|
+
import { wgs84Projection } from '../util/projection.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @typedef {Object} TerrainProviderOptions
|
|
12
|
+
* @property {boolean|undefined} requestVertexNormals
|
|
13
|
+
* @property {boolean|undefined} requestWaterMask
|
|
14
|
+
* @api
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @type {Object<string, import("@vcmap-cesium/engine").CesiumTerrainProvider>}
|
|
19
|
+
*/
|
|
20
|
+
const terrainProviders = {};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {string} url
|
|
24
|
+
* @param {TerrainProviderOptions} options
|
|
25
|
+
* @returns {Promise<import("@vcmap-cesium/engine").CesiumTerrainProvider>}
|
|
26
|
+
*/
|
|
27
|
+
export async function getTerrainProviderForUrl(url, options) {
|
|
28
|
+
if (!terrainProviders[url]) {
|
|
29
|
+
terrainProviders[url] = await CesiumTerrainProvider.fromUrl(url, options);
|
|
30
|
+
return terrainProviders[url];
|
|
31
|
+
}
|
|
32
|
+
let terrainProvider = terrainProviders[url];
|
|
33
|
+
if (
|
|
34
|
+
(options.requestVertexNormals !== undefined &&
|
|
35
|
+
terrainProvider.requestVertexNormals !== options.requestVertexNormals) ||
|
|
36
|
+
(options.requestWaterMask !== undefined &&
|
|
37
|
+
terrainProvider.requestWaterMask !== options.requestWaterMask)
|
|
38
|
+
) {
|
|
39
|
+
terrainProviders[url] = await CesiumTerrainProvider.fromUrl(url, options);
|
|
40
|
+
terrainProvider = terrainProviders[url];
|
|
41
|
+
}
|
|
42
|
+
return terrainProvider;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* changes input coordinate Array in place, new height can also be accessed by coordinates[x][2]
|
|
47
|
+
* @param {import("@vcmap-cesium/engine").CesiumTerrainProvider} terrainProvider
|
|
48
|
+
* @param {Array<import("ol/coordinate").Coordinate>} coordinates
|
|
49
|
+
* @param {import("@vcmap/core").Projection=} optSourceProjection - if input is not WGS84
|
|
50
|
+
* @param {Array<import("ol/coordinate").Coordinate>=} result
|
|
51
|
+
* @returns {Promise<Array<import("ol/coordinate").Coordinate>>}
|
|
52
|
+
*/
|
|
53
|
+
export function getHeightFromTerrainProvider(
|
|
54
|
+
terrainProvider,
|
|
55
|
+
coordinates,
|
|
56
|
+
optSourceProjection,
|
|
57
|
+
result,
|
|
58
|
+
) {
|
|
59
|
+
const sourceTransformer = optSourceProjection
|
|
60
|
+
? getTransform(optSourceProjection.proj, wgs84Projection.proj)
|
|
61
|
+
: null;
|
|
62
|
+
|
|
63
|
+
const positions = coordinates.map((coord) => {
|
|
64
|
+
const wgs84 = sourceTransformer
|
|
65
|
+
? sourceTransformer(coord, coord.slice(), coord.length)
|
|
66
|
+
: coord;
|
|
67
|
+
return Cartographic.fromDegrees(wgs84[0], wgs84[1]);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const outArray = result || coordinates.map((c) => c.slice());
|
|
71
|
+
return sampleTerrainMostDetailed(terrainProvider, positions).then(
|
|
72
|
+
(updatedPositions) => {
|
|
73
|
+
updatedPositions.forEach((position, index) => {
|
|
74
|
+
outArray[index][2] = position.height || 0;
|
|
75
|
+
});
|
|
76
|
+
return outArray;
|
|
77
|
+
},
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* checks, whether a terrain tile is available at given position or not
|
|
83
|
+
* @param {import("@vcmap-cesium/engine").CesiumTerrainProvider} terrainProvider
|
|
84
|
+
* @param {number} level
|
|
85
|
+
* @param {import("@vcmap-cesium/engine").Cartographic} position
|
|
86
|
+
* @returns {boolean}
|
|
87
|
+
*/
|
|
88
|
+
export function isTerrainTileAvailable(terrainProvider, level, position) {
|
|
89
|
+
const tileXY = terrainProvider.tilingScheme.positionToTileXY(
|
|
90
|
+
position,
|
|
91
|
+
level,
|
|
92
|
+
new Cartesian2(),
|
|
93
|
+
);
|
|
94
|
+
return terrainProvider.getTileDataAvailable(tileXY.x, tileXY.y, level);
|
|
95
|
+
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { parseBoolean } from '@vcsuite/parsers';
|
|
2
2
|
import Layer from './layer.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import {
|
|
4
|
+
getHeightFromTerrainProvider,
|
|
5
|
+
getTerrainProviderForUrl,
|
|
6
|
+
} from './terrainHelpers.js';
|
|
7
|
+
import CesiumMap from '../map/cesiumMap.js';
|
|
8
|
+
import TerrainCesiumImpl from './cesium/terrainCesiumImpl.js';
|
|
9
|
+
import { layerClassRegistry } from '../classRegistry.js';
|
|
7
10
|
|
|
8
11
|
/**
|
|
9
12
|
* @typedef {LayerOptions} TerrainOptions
|
|
@@ -21,12 +24,13 @@ import { VcsClassRegistry } from '../classRegistry.js';
|
|
|
21
24
|
/**
|
|
22
25
|
* represents a terrain layer.
|
|
23
26
|
* @class
|
|
24
|
-
* @export
|
|
25
27
|
* @extends {Layer}
|
|
26
28
|
* @api stable
|
|
27
29
|
*/
|
|
28
|
-
class
|
|
29
|
-
static get className() {
|
|
30
|
+
class TerrainLayer extends Layer {
|
|
31
|
+
static get className() {
|
|
32
|
+
return 'TerrainLayer';
|
|
33
|
+
}
|
|
30
34
|
|
|
31
35
|
/**
|
|
32
36
|
* @returns {TerrainOptions}
|
|
@@ -44,23 +48,27 @@ class Terrain extends Layer {
|
|
|
44
48
|
*/
|
|
45
49
|
constructor(options) {
|
|
46
50
|
super(options);
|
|
47
|
-
const defaultOptions =
|
|
51
|
+
const defaultOptions = TerrainLayer.getDefaultOptions();
|
|
48
52
|
|
|
49
|
-
this._supportedMaps = [
|
|
50
|
-
CesiumMap.className,
|
|
51
|
-
];
|
|
53
|
+
this._supportedMaps = [CesiumMap.className];
|
|
52
54
|
|
|
53
55
|
/**
|
|
54
56
|
* @type {boolean}
|
|
55
57
|
* @api
|
|
56
58
|
*/
|
|
57
|
-
this.requestVertexNormals = parseBoolean(
|
|
59
|
+
this.requestVertexNormals = parseBoolean(
|
|
60
|
+
options.requestVertexNormals,
|
|
61
|
+
defaultOptions.requestVertexNormals,
|
|
62
|
+
);
|
|
58
63
|
|
|
59
64
|
/**
|
|
60
65
|
* @type {boolean}
|
|
61
66
|
* @api
|
|
62
67
|
*/
|
|
63
|
-
this.requestWaterMask = parseBoolean(
|
|
68
|
+
this.requestWaterMask = parseBoolean(
|
|
69
|
+
options.requestWaterMask,
|
|
70
|
+
defaultOptions.requestWaterMask,
|
|
71
|
+
);
|
|
64
72
|
}
|
|
65
73
|
|
|
66
74
|
/**
|
|
@@ -77,11 +85,11 @@ class Terrain extends Layer {
|
|
|
77
85
|
/**
|
|
78
86
|
* @inheritDoc
|
|
79
87
|
* @param {import("@vcmap/core").VcsMap} map
|
|
80
|
-
* @returns {Array<
|
|
88
|
+
* @returns {Array<TerrainCesiumImpl>}
|
|
81
89
|
*/
|
|
82
90
|
createImplementationsForMap(map) {
|
|
83
91
|
if (map instanceof CesiumMap) {
|
|
84
|
-
return [new
|
|
92
|
+
return [new TerrainCesiumImpl(map, this.getImplementationOptions())];
|
|
85
93
|
}
|
|
86
94
|
return [];
|
|
87
95
|
}
|
|
@@ -92,9 +100,8 @@ class Terrain extends Layer {
|
|
|
92
100
|
* @returns {Promise<Array<import("ol/coordinate").Coordinate>>}
|
|
93
101
|
* @api stable
|
|
94
102
|
*/
|
|
95
|
-
getHeightForWGS84Coordinates(coords) {
|
|
96
|
-
const terrainProvider = getTerrainProviderForUrl({
|
|
97
|
-
url: this.url,
|
|
103
|
+
async getHeightForWGS84Coordinates(coords) {
|
|
104
|
+
const terrainProvider = await getTerrainProviderForUrl(this.url, {
|
|
98
105
|
requestVertexNormals: this.requestVertexNormals,
|
|
99
106
|
requestWaterMask: this.requestWaterMask,
|
|
100
107
|
});
|
|
@@ -106,7 +113,7 @@ class Terrain extends Layer {
|
|
|
106
113
|
*/
|
|
107
114
|
toJSON() {
|
|
108
115
|
const config = /** @type {TerrainOptions} */ (super.toJSON());
|
|
109
|
-
const defaultOptions =
|
|
116
|
+
const defaultOptions = TerrainLayer.getDefaultOptions();
|
|
110
117
|
|
|
111
118
|
if (this.requestVertexNormals !== defaultOptions.requestVertexNormals) {
|
|
112
119
|
config.requestVertexNormals = this.requestVertexNormals;
|
|
@@ -118,5 +125,5 @@ class Terrain extends Layer {
|
|
|
118
125
|
}
|
|
119
126
|
}
|
|
120
127
|
|
|
121
|
-
|
|
122
|
-
export default
|
|
128
|
+
layerClassRegistry.registerClass(TerrainLayer.className, TerrainLayer);
|
|
129
|
+
export default TerrainLayer;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import CesiumTilesetCesiumImpl from './cesium/cesiumTilesetCesiumImpl.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @param {
|
|
4
|
+
* @param {CesiumTilesetCesiumImpl} impl
|
|
5
5
|
* @param {number=} timeout
|
|
6
6
|
* @returns {Promise<void>}
|
|
7
7
|
*/
|
|
@@ -26,22 +26,27 @@ function waitForImplTilesLoaded(impl, timeout) {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
* @param {import("@vcmap/core").
|
|
29
|
+
* @param {import("@vcmap/core").CesiumTilesetLayer|import("@vcmap/core").FeatureStoreLayer} layer
|
|
30
30
|
* @param {number=} timeout
|
|
31
31
|
* @returns {Promise<void>}
|
|
32
32
|
*/
|
|
33
33
|
export async function tiledLayerLoaded(layer, timeout) {
|
|
34
|
-
const impls =
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
const impls =
|
|
35
|
+
/** @type {Array<CesiumTilesetCesiumImpl>} */
|
|
36
|
+
(
|
|
37
|
+
layer
|
|
38
|
+
.getImplementations()
|
|
39
|
+
.filter((i) => i instanceof CesiumTilesetCesiumImpl)
|
|
40
|
+
);
|
|
41
|
+
if (!layer.active || impls.every((i) => i.cesium3DTileset.tilesLoaded)) {
|
|
37
42
|
return;
|
|
38
43
|
}
|
|
39
44
|
|
|
40
|
-
await Promise.all(impls.map(i => waitForImplTilesLoaded(i, timeout)));
|
|
45
|
+
await Promise.all(impls.map((i) => waitForImplTilesLoaded(i, timeout)));
|
|
41
46
|
}
|
|
42
47
|
|
|
43
48
|
/**
|
|
44
|
-
* @param {import("@vcmap/
|
|
49
|
+
* @param {import("@vcmap-cesium/engine").Globe} globe
|
|
45
50
|
* @param {number=} timeout
|
|
46
51
|
* @returns {Promise<void>}
|
|
47
52
|
*/
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
1
|
import MVT from 'ol/format/MVT.js';
|
|
3
2
|
import Feature from 'ol/Feature.js';
|
|
4
3
|
import { getCenter } from 'ol/extent.js';
|
|
5
4
|
import TileProvider, { rectangleToExtent } from './tileProvider.js';
|
|
6
5
|
import { getURL } from './urlTemplateTileProvider.js';
|
|
6
|
+
import { requestArrayBuffer } from '../../util/fetch.js';
|
|
7
|
+
import { tileProviderClassRegistry } from '../../classRegistry.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @typedef {TileProviderOptions} MVTTileProviderOptions
|
|
@@ -17,7 +18,6 @@ import { getURL } from './urlTemplateTileProvider.js';
|
|
|
17
18
|
*
|
|
18
19
|
* @class
|
|
19
20
|
* @extends {TileProvider}
|
|
20
|
-
* @export
|
|
21
21
|
* @api
|
|
22
22
|
*/
|
|
23
23
|
class MVTTileProvider extends TileProvider {
|
|
@@ -25,7 +25,9 @@ class MVTTileProvider extends TileProvider {
|
|
|
25
25
|
* @readonly
|
|
26
26
|
* @returns {string}
|
|
27
27
|
*/
|
|
28
|
-
static get className() {
|
|
28
|
+
static get className() {
|
|
29
|
+
return 'MVTTileProvider';
|
|
30
|
+
}
|
|
29
31
|
|
|
30
32
|
/**
|
|
31
33
|
* @returns {MVTTileProviderOptions}
|
|
@@ -62,6 +64,26 @@ class MVTTileProvider extends TileProvider {
|
|
|
62
64
|
this._MVTFormat = new MVT({ featureClass: Feature });
|
|
63
65
|
}
|
|
64
66
|
|
|
67
|
+
/**
|
|
68
|
+
* @type {string}
|
|
69
|
+
*/
|
|
70
|
+
get locale() {
|
|
71
|
+
return super.locale;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* sets the locale and clears the Cache if the URL is a locale aware Object.
|
|
76
|
+
* @param {string} value
|
|
77
|
+
*/
|
|
78
|
+
set locale(value) {
|
|
79
|
+
if (this.locale !== value) {
|
|
80
|
+
super.locale = value;
|
|
81
|
+
if (this.url.includes('{locale}')) {
|
|
82
|
+
this.clearCache();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
65
87
|
/**
|
|
66
88
|
* @inheritDoc
|
|
67
89
|
* @param {number} x
|
|
@@ -71,13 +93,14 @@ class MVTTileProvider extends TileProvider {
|
|
|
71
93
|
*/
|
|
72
94
|
async loader(x, y, z) {
|
|
73
95
|
const rectangle = this.tilingScheme.tileXYToRectangle(x, y, z);
|
|
74
|
-
const url = getURL(this.url, x, y, z, rectangle);
|
|
96
|
+
const url = getURL(this.url, x, y, z, rectangle, this.locale);
|
|
75
97
|
const extent = rectangleToExtent(rectangle);
|
|
76
98
|
const center = getCenter(extent);
|
|
77
|
-
const
|
|
78
|
-
const features =
|
|
79
|
-
(
|
|
80
|
-
|
|
99
|
+
const data = await requestArrayBuffer(url);
|
|
100
|
+
const features =
|
|
101
|
+
/** @type {Array<import("ol").Feature<import("ol/geom/Geometry").default>>} */
|
|
102
|
+
(this._MVTFormat.readFeatures(data));
|
|
103
|
+
const sx = (extent[2] - extent[0]) / 4096;
|
|
81
104
|
const sy = -((extent[3] - extent[1]) / 4096);
|
|
82
105
|
features.forEach((feature) => {
|
|
83
106
|
const idToUse = feature.get(this.idProperty);
|
|
@@ -99,6 +122,26 @@ class MVTTileProvider extends TileProvider {
|
|
|
99
122
|
});
|
|
100
123
|
return features;
|
|
101
124
|
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @returns {MVTTileProviderOptions}
|
|
128
|
+
*/
|
|
129
|
+
toJSON() {
|
|
130
|
+
const config = /** @type {MVTTileProviderOptions} */ (super.toJSON());
|
|
131
|
+
|
|
132
|
+
if (this.url) {
|
|
133
|
+
config.url = this.url;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (this.idProperty) {
|
|
137
|
+
config.idProperty = this.idProperty;
|
|
138
|
+
}
|
|
139
|
+
return config;
|
|
140
|
+
}
|
|
102
141
|
}
|
|
103
142
|
|
|
104
143
|
export default MVTTileProvider;
|
|
144
|
+
tileProviderClassRegistry.registerClass(
|
|
145
|
+
MVTTileProvider.className,
|
|
146
|
+
MVTTileProvider,
|
|
147
|
+
);
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { parseGeoJSON } from '../geojsonHelpers.js';
|
|
2
|
+
import TileProvider from './tileProvider.js';
|
|
3
|
+
import { requestJson } from '../../util/fetch.js';
|
|
4
|
+
import { tileProviderClassRegistry } from '../../classRegistry.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @typedef {TileProviderOptions} StaticGeoJSONTileProviderOptions
|
|
8
|
+
* @property {string} url - url to the geojson
|
|
9
|
+
* @api
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Loads the provided geojson url and tiles the content in memory, data is only requested once
|
|
14
|
+
*
|
|
15
|
+
* @class
|
|
16
|
+
* @extends {TileProvider}
|
|
17
|
+
* @api
|
|
18
|
+
*/
|
|
19
|
+
class StaticGeoJSONTileProvider extends TileProvider {
|
|
20
|
+
/**
|
|
21
|
+
* @readonly
|
|
22
|
+
* @returns {string}
|
|
23
|
+
*/
|
|
24
|
+
static get className() {
|
|
25
|
+
return 'StaticGeoJSONTileProvider';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @returns {StaticGeoJSONTileProviderOptions}
|
|
30
|
+
*/
|
|
31
|
+
static getDefaultOptions() {
|
|
32
|
+
return {
|
|
33
|
+
...TileProvider.getDefaultOptions(),
|
|
34
|
+
url: undefined,
|
|
35
|
+
baseLevels: [0],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {StaticGeoJSONTileProviderOptions} options
|
|
41
|
+
*/
|
|
42
|
+
constructor(options) {
|
|
43
|
+
const defaultOptions = StaticGeoJSONTileProvider.getDefaultOptions();
|
|
44
|
+
options.baseLevels = defaultOptions.baseLevels;
|
|
45
|
+
super(options);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @type {string}
|
|
49
|
+
*/
|
|
50
|
+
this.url = options.url || defaultOptions.url;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @inheritDoc
|
|
55
|
+
* @param {number} x
|
|
56
|
+
* @param {number} y
|
|
57
|
+
* @param {number} z
|
|
58
|
+
* @returns {Promise<Array<import("ol").Feature<import("ol/geom/Geometry").default>>>}
|
|
59
|
+
*/
|
|
60
|
+
// eslint-disable-next-line no-unused-vars
|
|
61
|
+
async loader(x, y, z) {
|
|
62
|
+
const data = await requestJson(this.url);
|
|
63
|
+
const { features } = parseGeoJSON(data, { dynamicStyle: true });
|
|
64
|
+
return features;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @returns {StaticGeoJSONTileProviderOptions}
|
|
69
|
+
*/
|
|
70
|
+
toJSON() {
|
|
71
|
+
const config = /** @type {StaticGeoJSONTileProviderOptions} */ (
|
|
72
|
+
super.toJSON()
|
|
73
|
+
);
|
|
74
|
+
delete config.baseLevels;
|
|
75
|
+
|
|
76
|
+
if (this.url) {
|
|
77
|
+
config.url = this.url;
|
|
78
|
+
}
|
|
79
|
+
return config;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export default StaticGeoJSONTileProvider;
|
|
84
|
+
tileProviderClassRegistry.registerClass(
|
|
85
|
+
StaticGeoJSONTileProvider.className,
|
|
86
|
+
StaticGeoJSONTileProvider,
|
|
87
|
+
);
|