@deck.gl/geo-layers 9.0.0-alpha.7 → 9.0.0-beta.10
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/dist/dist.dev.js +2574 -5044
- package/dist/geo-cell-layer/GeoCellLayer.js +51 -0
- package/{typed → dist}/geohash-layer/geohash-layer.d.ts +1 -1
- package/dist/geohash-layer/geohash-layer.d.ts.map +1 -0
- package/dist/geohash-layer/geohash-layer.js +19 -0
- package/dist/geohash-layer/geohash-utils.js +50 -0
- package/dist/great-circle-layer/great-circle-layer.js +12 -0
- package/{typed → dist}/h3-layers/h3-cluster-layer.d.ts +1 -1
- package/dist/h3-layers/h3-cluster-layer.d.ts.map +1 -0
- package/dist/h3-layers/h3-cluster-layer.js +47 -0
- package/dist/h3-layers/h3-hexagon-layer.js +204 -0
- package/dist/h3-layers/h3-utils.js +56 -0
- package/dist/index.cjs +3160 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/mesh-layer/mesh-layer-fragment.glsl.d.ts +3 -0
- package/{typed → dist}/mesh-layer/mesh-layer-fragment.glsl.d.ts.map +1 -1
- package/dist/mesh-layer/mesh-layer-fragment.glsl.js +33 -0
- package/dist/mesh-layer/mesh-layer-vertex.glsl.js +63 -0
- package/{typed → dist}/mesh-layer/mesh-layer.d.ts.map +1 -1
- package/dist/mesh-layer/mesh-layer.js +128 -0
- package/{typed → dist}/mvt-layer/coordinate-transform.d.ts +1 -1
- package/{typed → dist}/mvt-layer/coordinate-transform.d.ts.map +1 -1
- package/dist/mvt-layer/coordinate-transform.js +41 -0
- package/dist/mvt-layer/find-index-binary.d.ts +11 -0
- package/dist/mvt-layer/find-index-binary.d.ts.map +1 -0
- package/dist/mvt-layer/find-index-binary.js +96 -0
- package/{typed → dist}/mvt-layer/mvt-layer.d.ts +13 -11
- package/dist/mvt-layer/mvt-layer.d.ts.map +1 -0
- package/dist/mvt-layer/mvt-layer.js +305 -0
- package/{typed → dist}/quadkey-layer/quadkey-layer.d.ts +1 -1
- package/dist/quadkey-layer/quadkey-layer.d.ts.map +1 -0
- package/dist/quadkey-layer/quadkey-layer.js +22 -0
- package/dist/quadkey-layer/quadkey-utils.js +26 -0
- package/dist/s2-layer/s2-geometry.js +123 -0
- package/{typed → dist}/s2-layer/s2-layer.d.ts +1 -1
- package/dist/s2-layer/s2-layer.d.ts.map +1 -0
- package/dist/s2-layer/s2-layer.js +38 -0
- package/dist/s2-layer/s2-utils.js +87 -0
- package/{typed → dist}/terrain-layer/terrain-layer.d.ts +4 -4
- package/dist/terrain-layer/terrain-layer.d.ts.map +1 -0
- package/dist/terrain-layer/terrain-layer.js +233 -0
- package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts +15 -1
- package/{typed → dist}/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
- package/dist/tile-3d-layer/tile-3d-layer.js +302 -0
- package/{typed → dist}/tile-layer/tile-layer.d.ts +14 -5
- package/dist/tile-layer/tile-layer.d.ts.map +1 -0
- package/dist/tile-layer/tile-layer.js +207 -0
- package/dist/tileset-2d/index.d.ts +7 -0
- package/dist/tileset-2d/index.d.ts.map +1 -0
- package/dist/tileset-2d/index.js +4 -0
- package/dist/tileset-2d/memoize.js +41 -0
- package/{typed → dist}/tileset-2d/tile-2d-header.d.ts +3 -2
- package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
- package/dist/tileset-2d/tile-2d-header.js +135 -0
- package/dist/tileset-2d/tile-2d-traversal.d.ts +4 -0
- package/dist/tileset-2d/tile-2d-traversal.d.ts.map +1 -0
- package/dist/tileset-2d/tile-2d-traversal.js +182 -0
- package/{typed → dist}/tileset-2d/tileset-2d.d.ts +9 -7
- package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
- package/dist/tileset-2d/tileset-2d.js +458 -0
- package/dist/tileset-2d/types.js +1 -0
- package/{typed → dist}/tileset-2d/utils.d.ts +3 -3
- package/dist/tileset-2d/utils.d.ts.map +1 -0
- package/dist/tileset-2d/utils.js +234 -0
- package/{typed → dist}/trips-layer/trips-layer.d.ts +1 -1
- package/{typed → dist}/trips-layer/trips-layer.d.ts.map +1 -1
- package/dist/trips-layer/trips-layer.js +93 -0
- package/dist/wms-layer/utils.js +13 -0
- package/dist/wms-layer/wms-layer.js +192 -0
- package/dist.min.js +243 -564
- package/package.json +30 -23
- package/src/index.ts +7 -7
- package/src/mesh-layer/mesh-layer-fragment.glsl.ts +1 -9
- package/src/mesh-layer/mesh-layer.ts +1 -2
- package/src/mvt-layer/coordinate-transform.ts +1 -1
- package/src/mvt-layer/find-index-binary.ts +5 -9
- package/src/mvt-layer/mvt-layer.ts +36 -25
- package/src/terrain-layer/terrain-layer.ts +13 -3
- package/src/tile-3d-layer/tile-3d-layer.ts +1 -2
- package/src/tile-layer/tile-layer.ts +30 -14
- package/src/tileset-2d/tile-2d-header.ts +2 -1
- package/src/tileset-2d/tile-2d-traversal.ts +1 -1
- package/src/tileset-2d/tileset-2d.ts +14 -7
- package/src/tileset-2d/utils.ts +2 -2
- package/src/trips-layer/trips-layer.ts +1 -1
- package/src/wms-layer/wms-layer.ts +1 -1
- package/dist/es5/geo-cell-layer/GeoCellLayer.js +0 -118
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +0 -1
- package/dist/es5/geohash-layer/geohash-layer.js +0 -67
- package/dist/es5/geohash-layer/geohash-layer.js.map +0 -1
- package/dist/es5/geohash-layer/geohash-utils.js +0 -77
- package/dist/es5/geohash-layer/geohash-utils.js.map +0 -1
- package/dist/es5/great-circle-layer/great-circle-layer.js +0 -48
- package/dist/es5/great-circle-layer/great-circle-layer.js.map +0 -1
- package/dist/es5/h3-layers/h3-cluster-layer.js +0 -162
- package/dist/es5/h3-layers/h3-cluster-layer.js.map +0 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js +0 -351
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +0 -1
- package/dist/es5/h3-layers/h3-utils.js +0 -111
- package/dist/es5/h3-layers/h3-utils.js.map +0 -1
- package/dist/es5/index.js +0 -132
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js +0 -9
- package/dist/es5/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
- package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js +0 -9
- package/dist/es5/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
- package/dist/es5/mesh-layer/mesh-layer.js +0 -217
- package/dist/es5/mesh-layer/mesh-layer.js.map +0 -1
- package/dist/es5/mvt-layer/coordinate-transform.js +0 -83
- package/dist/es5/mvt-layer/coordinate-transform.js.map +0 -1
- package/dist/es5/mvt-layer/find-index-binary.js +0 -127
- package/dist/es5/mvt-layer/find-index-binary.js.map +0 -1
- package/dist/es5/mvt-layer/mvt-layer.js +0 -533
- package/dist/es5/mvt-layer/mvt-layer.js.map +0 -1
- package/dist/es5/quadkey-layer/quadkey-layer.js +0 -72
- package/dist/es5/quadkey-layer/quadkey-layer.js.map +0 -1
- package/dist/es5/quadkey-layer/quadkey-utils.js +0 -53
- package/dist/es5/quadkey-layer/quadkey-utils.js.map +0 -1
- package/dist/es5/s2-layer/s2-geometry.js +0 -158
- package/dist/es5/s2-layer/s2-geometry.js.map +0 -1
- package/dist/es5/s2-layer/s2-layer.js +0 -67
- package/dist/es5/s2-layer/s2-layer.js.map +0 -1
- package/dist/es5/s2-layer/s2-utils.js +0 -80
- package/dist/es5/s2-layer/s2-utils.js.map +0 -1
- package/dist/es5/terrain-layer/terrain-layer.js +0 -347
- package/dist/es5/terrain-layer/terrain-layer.js.map +0 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +0 -511
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +0 -1
- package/dist/es5/tile-layer/tile-layer.js +0 -363
- package/dist/es5/tile-layer/tile-layer.js.map +0 -1
- package/dist/es5/tileset-2d/index.js +0 -66
- package/dist/es5/tileset-2d/index.js.map +0 -1
- package/dist/es5/tileset-2d/memoize.js +0 -47
- package/dist/es5/tileset-2d/memoize.js.map +0 -1
- package/dist/es5/tileset-2d/tile-2d-header.js +0 -250
- package/dist/es5/tileset-2d/tile-2d-header.js.map +0 -1
- package/dist/es5/tileset-2d/tile-2d-traversal.js +0 -256
- package/dist/es5/tileset-2d/tile-2d-traversal.js.map +0 -1
- package/dist/es5/tileset-2d/tileset-2d.js +0 -757
- package/dist/es5/tileset-2d/tileset-2d.js.map +0 -1
- package/dist/es5/tileset-2d/types.js +0 -2
- package/dist/es5/tileset-2d/types.js.map +0 -1
- package/dist/es5/tileset-2d/utils.js +0 -302
- package/dist/es5/tileset-2d/utils.js.map +0 -1
- package/dist/es5/trips-layer/trips-layer.js +0 -114
- package/dist/es5/trips-layer/trips-layer.js.map +0 -1
- package/dist/es5/wms-layer/utils.js +0 -18
- package/dist/es5/wms-layer/utils.js.map +0 -1
- package/dist/es5/wms-layer/wms-layer.js +0 -376
- package/dist/es5/wms-layer/wms-layer.js.map +0 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js +0 -72
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +0 -1
- package/dist/esm/geohash-layer/geohash-layer.js +0 -26
- package/dist/esm/geohash-layer/geohash-layer.js.map +0 -1
- package/dist/esm/geohash-layer/geohash-utils.js +0 -56
- package/dist/esm/geohash-layer/geohash-utils.js.map +0 -1
- package/dist/esm/great-circle-layer/great-circle-layer.js +0 -12
- package/dist/esm/great-circle-layer/great-circle-layer.js.map +0 -1
- package/dist/esm/h3-layers/h3-cluster-layer.js +0 -79
- package/dist/esm/h3-layers/h3-cluster-layer.js.map +0 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js +0 -280
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +0 -1
- package/dist/esm/h3-layers/h3-utils.js +0 -54
- package/dist/esm/h3-layers/h3-utils.js.map +0 -1
- package/dist/esm/index.js +0 -17
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js +0 -56
- package/dist/esm/mesh-layer/mesh-layer-fragment.glsl.js.map +0 -1
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js +0 -85
- package/dist/esm/mesh-layer/mesh-layer-vertex.glsl.js.map +0 -1
- package/dist/esm/mesh-layer/mesh-layer.js +0 -178
- package/dist/esm/mesh-layer/mesh-layer.js.map +0 -1
- package/dist/esm/mvt-layer/coordinate-transform.js +0 -49
- package/dist/esm/mvt-layer/coordinate-transform.js.map +0 -1
- package/dist/esm/mvt-layer/find-index-binary.js +0 -99
- package/dist/esm/mvt-layer/find-index-binary.js.map +0 -1
- package/dist/esm/mvt-layer/mvt-layer.js +0 -427
- package/dist/esm/mvt-layer/mvt-layer.js.map +0 -1
- package/dist/esm/quadkey-layer/quadkey-layer.js +0 -31
- package/dist/esm/quadkey-layer/quadkey-layer.js.map +0 -1
- package/dist/esm/quadkey-layer/quadkey-utils.js +0 -24
- package/dist/esm/quadkey-layer/quadkey-utils.js.map +0 -1
- package/dist/esm/s2-layer/s2-geometry.js +0 -126
- package/dist/esm/s2-layer/s2-geometry.js.map +0 -1
- package/dist/esm/s2-layer/s2-layer.js +0 -26
- package/dist/esm/s2-layer/s2-layer.js.map +0 -1
- package/dist/esm/s2-layer/s2-utils.js +0 -69
- package/dist/esm/s2-layer/s2-utils.js.map +0 -1
- package/dist/esm/terrain-layer/terrain-layer.js +0 -292
- package/dist/esm/terrain-layer/terrain-layer.js.map +0 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +0 -438
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +0 -1
- package/dist/esm/tile-layer/tile-layer.js +0 -299
- package/dist/esm/tile-layer/tile-layer.js.map +0 -1
- package/dist/esm/tileset-2d/index.js +0 -4
- package/dist/esm/tileset-2d/index.js.map +0 -1
- package/dist/esm/tileset-2d/memoize.js +0 -40
- package/dist/esm/tileset-2d/memoize.js.map +0 -1
- package/dist/esm/tileset-2d/tile-2d-header.js +0 -179
- package/dist/esm/tileset-2d/tile-2d-header.js.map +0 -1
- package/dist/esm/tileset-2d/tile-2d-traversal.js +0 -184
- package/dist/esm/tileset-2d/tile-2d-traversal.js.map +0 -1
- package/dist/esm/tileset-2d/tileset-2d.js +0 -509
- package/dist/esm/tileset-2d/tileset-2d.js.map +0 -1
- package/dist/esm/tileset-2d/types.js +0 -2
- package/dist/esm/tileset-2d/types.js.map +0 -1
- package/dist/esm/tileset-2d/utils.js +0 -233
- package/dist/esm/tileset-2d/utils.js.map +0 -1
- package/dist/esm/trips-layer/trips-layer.js +0 -88
- package/dist/esm/trips-layer/trips-layer.js.map +0 -1
- package/dist/esm/wms-layer/utils.js +0 -9
- package/dist/esm/wms-layer/utils.js.map +0 -1
- package/dist/esm/wms-layer/wms-layer.js +0 -231
- package/dist/esm/wms-layer/wms-layer.js.map +0 -1
- package/typed/geohash-layer/geohash-layer.d.ts.map +0 -1
- package/typed/h3-layers/h3-cluster-layer.d.ts.map +0 -1
- package/typed/index.d.ts +0 -31
- package/typed/index.d.ts.map +0 -1
- package/typed/mesh-layer/mesh-layer-fragment.glsl.d.ts +0 -3
- package/typed/mvt-layer/find-index-binary.d.ts +0 -12
- package/typed/mvt-layer/find-index-binary.d.ts.map +0 -1
- package/typed/mvt-layer/mvt-layer.d.ts.map +0 -1
- package/typed/quadkey-layer/quadkey-layer.d.ts.map +0 -1
- package/typed/s2-layer/s2-layer.d.ts.map +0 -1
- package/typed/terrain-layer/terrain-layer.d.ts.map +0 -1
- package/typed/tile-layer/tile-layer.d.ts.map +0 -1
- package/typed/tileset-2d/index.d.ts +0 -7
- package/typed/tileset-2d/index.d.ts.map +0 -1
- package/typed/tileset-2d/tile-2d-header.d.ts.map +0 -1
- package/typed/tileset-2d/tile-2d-traversal.d.ts +0 -4
- package/typed/tileset-2d/tile-2d-traversal.d.ts.map +0 -1
- package/typed/tileset-2d/tileset-2d.d.ts.map +0 -1
- package/typed/tileset-2d/utils.d.ts.map +0 -1
- /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts +0 -0
- /package/{typed → dist}/geo-cell-layer/GeoCellLayer.d.ts.map +0 -0
- /package/{typed → dist}/geohash-layer/geohash-utils.d.ts +0 -0
- /package/{typed → dist}/geohash-layer/geohash-utils.d.ts.map +0 -0
- /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts +0 -0
- /package/{typed → dist}/great-circle-layer/great-circle-layer.d.ts.map +0 -0
- /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts +0 -0
- /package/{typed → dist}/h3-layers/h3-hexagon-layer.d.ts.map +0 -0
- /package/{typed → dist}/h3-layers/h3-utils.d.ts +0 -0
- /package/{typed → dist}/h3-layers/h3-utils.d.ts.map +0 -0
- /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts +0 -0
- /package/{typed → dist}/mesh-layer/mesh-layer-vertex.glsl.d.ts.map +0 -0
- /package/{typed → dist}/mesh-layer/mesh-layer.d.ts +0 -0
- /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts +0 -0
- /package/{typed → dist}/quadkey-layer/quadkey-utils.d.ts.map +0 -0
- /package/{typed → dist}/s2-layer/s2-geometry.d.ts +0 -0
- /package/{typed → dist}/s2-layer/s2-geometry.d.ts.map +0 -0
- /package/{typed → dist}/s2-layer/s2-utils.d.ts +0 -0
- /package/{typed → dist}/s2-layer/s2-utils.d.ts.map +0 -0
- /package/{typed → dist}/tileset-2d/memoize.d.ts +0 -0
- /package/{typed → dist}/tileset-2d/memoize.d.ts.map +0 -0
- /package/{typed → dist}/tileset-2d/types.d.ts +0 -0
- /package/{typed → dist}/tileset-2d/types.d.ts.map +0 -0
- /package/{typed → dist}/wms-layer/utils.d.ts +0 -0
- /package/{typed → dist}/wms-layer/utils.d.ts.map +0 -0
- /package/{typed → dist}/wms-layer/wms-layer.d.ts +0 -0
- /package/{typed → dist}/wms-layer/wms-layer.d.ts.map +0 -0
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
import { log, COORDINATE_SYSTEM } from '@deck.gl/core';
|
|
2
|
-
import { GeoJsonLayer } from '@deck.gl/layers';
|
|
3
|
-
import { ClipExtension } from '@deck.gl/extensions';
|
|
4
|
-
import { Matrix4 } from '@math.gl/core';
|
|
5
|
-
import { MVTWorkerLoader } from '@loaders.gl/mvt';
|
|
6
|
-
import { binaryToGeojson } from '@loaders.gl/gis';
|
|
7
|
-
import { transform } from './coordinate-transform';
|
|
8
|
-
import findIndexBinary from './find-index-binary';
|
|
9
|
-
import TileLayer from '../tile-layer/tile-layer';
|
|
10
|
-
import { urlType, getURLFromTemplate, isGeoBoundingBox, isURLTemplate } from '../tileset-2d';
|
|
11
|
-
const WORLD_SIZE = 512;
|
|
12
|
-
const defaultProps = { ...GeoJsonLayer.defaultProps,
|
|
13
|
-
data: urlType,
|
|
14
|
-
onDataLoad: {
|
|
15
|
-
type: 'function',
|
|
16
|
-
value: null,
|
|
17
|
-
optional: true,
|
|
18
|
-
compare: false
|
|
19
|
-
},
|
|
20
|
-
uniqueIdProperty: '',
|
|
21
|
-
highlightedFeatureId: null,
|
|
22
|
-
loaders: [MVTWorkerLoader],
|
|
23
|
-
binary: true
|
|
24
|
-
};
|
|
25
|
-
export default class MVTLayer extends TileLayer {
|
|
26
|
-
constructor(...args) {
|
|
27
|
-
super(...args);
|
|
28
|
-
this.state = void 0;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
initializeState() {
|
|
32
|
-
super.initializeState();
|
|
33
|
-
const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;
|
|
34
|
-
this.setState({
|
|
35
|
-
binary,
|
|
36
|
-
data: null,
|
|
37
|
-
tileJSON: null
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get isLoaded() {
|
|
42
|
-
return Boolean(this.state && this.state.data && this.state.tileset && super.isLoaded);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
updateState({
|
|
46
|
-
props,
|
|
47
|
-
oldProps,
|
|
48
|
-
context,
|
|
49
|
-
changeFlags
|
|
50
|
-
}) {
|
|
51
|
-
var _this$state;
|
|
52
|
-
|
|
53
|
-
if (changeFlags.dataChanged) {
|
|
54
|
-
this._updateTileData();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if ((_this$state = this.state) !== null && _this$state !== void 0 && _this$state.data) {
|
|
58
|
-
super.updateState({
|
|
59
|
-
props,
|
|
60
|
-
oldProps,
|
|
61
|
-
context,
|
|
62
|
-
changeFlags
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
this._setWGS84PropertyForTiles();
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const {
|
|
69
|
-
highlightColor
|
|
70
|
-
} = props;
|
|
71
|
-
|
|
72
|
-
if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {
|
|
73
|
-
this.setState({
|
|
74
|
-
highlightColor
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
async _updateTileData() {
|
|
80
|
-
let data = this.props.data;
|
|
81
|
-
let tileJSON = null;
|
|
82
|
-
|
|
83
|
-
if (typeof data === 'string' && !isURLTemplate(data)) {
|
|
84
|
-
const {
|
|
85
|
-
onDataLoad,
|
|
86
|
-
fetch
|
|
87
|
-
} = this.props;
|
|
88
|
-
this.setState({
|
|
89
|
-
data: null,
|
|
90
|
-
tileJSON: null
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
try {
|
|
94
|
-
tileJSON = await fetch(data, {
|
|
95
|
-
propName: 'data',
|
|
96
|
-
layer: this,
|
|
97
|
-
loaders: []
|
|
98
|
-
});
|
|
99
|
-
} catch (error) {
|
|
100
|
-
this.raiseError(error, 'loading TileJSON');
|
|
101
|
-
data = null;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
if (onDataLoad) {
|
|
105
|
-
onDataLoad(tileJSON, {
|
|
106
|
-
propName: 'data',
|
|
107
|
-
layer: this
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
} else if (data.tilejson) {
|
|
111
|
-
tileJSON = data;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (tileJSON) {
|
|
115
|
-
data = tileJSON.tiles;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
this.setState({
|
|
119
|
-
data,
|
|
120
|
-
tileJSON
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
_getTilesetOptions() {
|
|
125
|
-
const opts = super._getTilesetOptions();
|
|
126
|
-
|
|
127
|
-
const tileJSON = this.state.tileJSON;
|
|
128
|
-
const {
|
|
129
|
-
minZoom,
|
|
130
|
-
maxZoom
|
|
131
|
-
} = this.props;
|
|
132
|
-
|
|
133
|
-
if (tileJSON) {
|
|
134
|
-
if (Number.isFinite(tileJSON.minzoom) && tileJSON.minzoom > minZoom) {
|
|
135
|
-
opts.minZoom = tileJSON.minzoom;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (Number.isFinite(tileJSON.maxzoom) && (!Number.isFinite(maxZoom) || tileJSON.maxzoom < maxZoom)) {
|
|
139
|
-
opts.maxZoom = tileJSON.maxzoom;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return opts;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
renderLayers() {
|
|
147
|
-
var _this$state2;
|
|
148
|
-
|
|
149
|
-
if (!((_this$state2 = this.state) !== null && _this$state2 !== void 0 && _this$state2.data)) return null;
|
|
150
|
-
return super.renderLayers();
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
getTileData(loadProps) {
|
|
154
|
-
var _loadOptions;
|
|
155
|
-
|
|
156
|
-
const {
|
|
157
|
-
data,
|
|
158
|
-
binary
|
|
159
|
-
} = this.state;
|
|
160
|
-
const {
|
|
161
|
-
index,
|
|
162
|
-
signal
|
|
163
|
-
} = loadProps;
|
|
164
|
-
const url = getURLFromTemplate(data, loadProps);
|
|
165
|
-
|
|
166
|
-
if (!url) {
|
|
167
|
-
return Promise.reject('Invalid URL');
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
let loadOptions = this.getLoadOptions();
|
|
171
|
-
const {
|
|
172
|
-
fetch
|
|
173
|
-
} = this.props;
|
|
174
|
-
loadOptions = { ...loadOptions,
|
|
175
|
-
mimeType: 'application/x-protobuf',
|
|
176
|
-
mvt: { ...((_loadOptions = loadOptions) === null || _loadOptions === void 0 ? void 0 : _loadOptions.mvt),
|
|
177
|
-
coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',
|
|
178
|
-
tileIndex: index
|
|
179
|
-
},
|
|
180
|
-
gis: binary ? {
|
|
181
|
-
format: 'binary'
|
|
182
|
-
} : {}
|
|
183
|
-
};
|
|
184
|
-
return fetch(url, {
|
|
185
|
-
propName: 'data',
|
|
186
|
-
layer: this,
|
|
187
|
-
loadOptions,
|
|
188
|
-
signal
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
renderSubLayers(props) {
|
|
193
|
-
const {
|
|
194
|
-
x,
|
|
195
|
-
y,
|
|
196
|
-
z
|
|
197
|
-
} = props.tile.index;
|
|
198
|
-
const worldScale = Math.pow(2, z);
|
|
199
|
-
const xScale = WORLD_SIZE / worldScale;
|
|
200
|
-
const yScale = -xScale;
|
|
201
|
-
const xOffset = WORLD_SIZE * x / worldScale;
|
|
202
|
-
const yOffset = WORLD_SIZE * (1 - y / worldScale);
|
|
203
|
-
const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);
|
|
204
|
-
props.autoHighlight = false;
|
|
205
|
-
|
|
206
|
-
if (!this.context.viewport.resolution) {
|
|
207
|
-
props.modelMatrix = modelMatrix;
|
|
208
|
-
props.coordinateOrigin = [xOffset, yOffset, 0];
|
|
209
|
-
props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;
|
|
210
|
-
props.extensions = [...(props.extensions || []), new ClipExtension()];
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
const subLayers = super.renderSubLayers(props);
|
|
214
|
-
|
|
215
|
-
if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {
|
|
216
|
-
log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return subLayers;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
_updateAutoHighlight(info) {
|
|
223
|
-
const {
|
|
224
|
-
uniqueIdProperty
|
|
225
|
-
} = this.props;
|
|
226
|
-
const {
|
|
227
|
-
hoveredFeatureId,
|
|
228
|
-
hoveredFeatureLayerName
|
|
229
|
-
} = this.state;
|
|
230
|
-
const hoveredFeature = info.object;
|
|
231
|
-
let newHoveredFeatureId;
|
|
232
|
-
let newHoveredFeatureLayerName;
|
|
233
|
-
|
|
234
|
-
if (hoveredFeature) {
|
|
235
|
-
newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);
|
|
236
|
-
newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
let {
|
|
240
|
-
highlightColor
|
|
241
|
-
} = this.props;
|
|
242
|
-
|
|
243
|
-
if (typeof highlightColor === 'function') {
|
|
244
|
-
highlightColor = highlightColor(info);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
if (hoveredFeatureId !== newHoveredFeatureId || hoveredFeatureLayerName !== newHoveredFeatureLayerName) {
|
|
248
|
-
this.setState({
|
|
249
|
-
highlightColor,
|
|
250
|
-
hoveredFeatureId: newHoveredFeatureId,
|
|
251
|
-
hoveredFeatureLayerName: newHoveredFeatureLayerName
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
getPickingInfo(params) {
|
|
257
|
-
const info = super.getPickingInfo(params);
|
|
258
|
-
const isWGS84 = Boolean(this.context.viewport.resolution);
|
|
259
|
-
|
|
260
|
-
if (this.state.binary && info.index !== -1) {
|
|
261
|
-
const {
|
|
262
|
-
data
|
|
263
|
-
} = params.sourceLayer.props;
|
|
264
|
-
info.object = binaryToGeojson(data, {
|
|
265
|
-
globalFeatureId: info.index
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
if (info.object && !isWGS84) {
|
|
270
|
-
info.object = transformTileCoordsToWGS84(info.object, info.tile.bbox, this.context.viewport);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
return info;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
getSubLayerPropsByTile(tile) {
|
|
277
|
-
return {
|
|
278
|
-
highlightedObjectIndex: this.getHighlightedObjectIndex(tile),
|
|
279
|
-
highlightColor: this.state.highlightColor
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
getHighlightedObjectIndex(tile) {
|
|
284
|
-
const {
|
|
285
|
-
hoveredFeatureId,
|
|
286
|
-
hoveredFeatureLayerName,
|
|
287
|
-
binary
|
|
288
|
-
} = this.state;
|
|
289
|
-
const {
|
|
290
|
-
uniqueIdProperty,
|
|
291
|
-
highlightedFeatureId
|
|
292
|
-
} = this.props;
|
|
293
|
-
const data = tile.content;
|
|
294
|
-
const isHighlighted = isFeatureIdDefined(highlightedFeatureId);
|
|
295
|
-
const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;
|
|
296
|
-
|
|
297
|
-
if (!isFeatureIdPresent) {
|
|
298
|
-
return -1;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
const featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId;
|
|
302
|
-
|
|
303
|
-
if (Array.isArray(data)) {
|
|
304
|
-
return data.findIndex(feature => {
|
|
305
|
-
const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;
|
|
306
|
-
const isMatchingLayer = isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;
|
|
307
|
-
return isMatchingId && isMatchingLayer;
|
|
308
|
-
});
|
|
309
|
-
} else if (data && binary) {
|
|
310
|
-
return findIndexBinary(data, uniqueIdProperty, featureIdToHighlight, isHighlighted ? '' : hoveredFeatureLayerName);
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
return -1;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
_pickObjects(maxObjects) {
|
|
317
|
-
const {
|
|
318
|
-
deck,
|
|
319
|
-
viewport
|
|
320
|
-
} = this.context;
|
|
321
|
-
const width = viewport.width;
|
|
322
|
-
const height = viewport.height;
|
|
323
|
-
const x = viewport.x;
|
|
324
|
-
const y = viewport.y;
|
|
325
|
-
const layerIds = [this.id];
|
|
326
|
-
return deck.pickObjects({
|
|
327
|
-
x,
|
|
328
|
-
y,
|
|
329
|
-
width,
|
|
330
|
-
height,
|
|
331
|
-
layerIds,
|
|
332
|
-
maxObjects
|
|
333
|
-
});
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
getRenderedFeatures(maxFeatures = null) {
|
|
337
|
-
const features = this._pickObjects(maxFeatures);
|
|
338
|
-
|
|
339
|
-
const featureCache = new Set();
|
|
340
|
-
const renderedFeatures = [];
|
|
341
|
-
|
|
342
|
-
for (const f of features) {
|
|
343
|
-
const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);
|
|
344
|
-
|
|
345
|
-
if (featureId === undefined) {
|
|
346
|
-
renderedFeatures.push(f.object);
|
|
347
|
-
} else if (!featureCache.has(featureId)) {
|
|
348
|
-
featureCache.add(featureId);
|
|
349
|
-
renderedFeatures.push(f.object);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
return renderedFeatures;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
_setWGS84PropertyForTiles() {
|
|
357
|
-
const propName = 'dataInWGS84';
|
|
358
|
-
const tileset = this.state.tileset;
|
|
359
|
-
tileset.selectedTiles.forEach(tile => {
|
|
360
|
-
if (!tile.hasOwnProperty(propName)) {
|
|
361
|
-
Object.defineProperty(tile, propName, {
|
|
362
|
-
get: () => {
|
|
363
|
-
if (!tile.content) {
|
|
364
|
-
return null;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {
|
|
368
|
-
return [];
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
const {
|
|
372
|
-
bbox
|
|
373
|
-
} = tile;
|
|
374
|
-
|
|
375
|
-
if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {
|
|
376
|
-
const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;
|
|
377
|
-
tile._contentWGS84 = content.map(feature => transformTileCoordsToWGS84(feature, bbox, this.context.viewport));
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
return tile._contentWGS84;
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
}
|
|
388
|
-
MVTLayer.layerName = 'MVTLayer';
|
|
389
|
-
MVTLayer.defaultProps = defaultProps;
|
|
390
|
-
|
|
391
|
-
function getFeatureUniqueId(feature, uniqueIdProperty) {
|
|
392
|
-
if (feature.properties && uniqueIdProperty) {
|
|
393
|
-
return feature.properties[uniqueIdProperty];
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
if ('id' in feature) {
|
|
397
|
-
return feature.id;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
return undefined;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
function getFeatureLayerName(feature) {
|
|
404
|
-
var _feature$properties;
|
|
405
|
-
|
|
406
|
-
return ((_feature$properties = feature.properties) === null || _feature$properties === void 0 ? void 0 : _feature$properties.layerName) || null;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
function isFeatureIdDefined(value) {
|
|
410
|
-
return value !== undefined && value !== null && value !== '';
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
function transformTileCoordsToWGS84(object, bbox, viewport) {
|
|
414
|
-
const feature = { ...object,
|
|
415
|
-
geometry: {
|
|
416
|
-
type: object.geometry.type
|
|
417
|
-
}
|
|
418
|
-
};
|
|
419
|
-
Object.defineProperty(feature.geometry, 'coordinates', {
|
|
420
|
-
get: () => {
|
|
421
|
-
const wgs84Geom = transform(object.geometry, bbox, viewport);
|
|
422
|
-
return wgs84Geom.coordinates;
|
|
423
|
-
}
|
|
424
|
-
});
|
|
425
|
-
return feature;
|
|
426
|
-
}
|
|
427
|
-
//# sourceMappingURL=mvt-layer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mvt-layer/mvt-layer.ts"],"names":["log","COORDINATE_SYSTEM","GeoJsonLayer","ClipExtension","Matrix4","MVTWorkerLoader","binaryToGeojson","transform","findIndexBinary","TileLayer","urlType","getURLFromTemplate","isGeoBoundingBox","isURLTemplate","WORLD_SIZE","defaultProps","data","onDataLoad","type","value","optional","compare","uniqueIdProperty","highlightedFeatureId","loaders","binary","MVTLayer","state","initializeState","context","viewport","resolution","undefined","props","setState","tileJSON","isLoaded","Boolean","tileset","updateState","oldProps","changeFlags","dataChanged","_updateTileData","_setWGS84PropertyForTiles","highlightColor","Array","isArray","fetch","propName","layer","error","raiseError","tilejson","tiles","_getTilesetOptions","opts","minZoom","maxZoom","Number","isFinite","minzoom","maxzoom","renderLayers","getTileData","loadProps","index","signal","url","Promise","reject","loadOptions","getLoadOptions","mimeType","mvt","coordinates","tileIndex","gis","format","renderSubLayers","x","y","z","tile","worldScale","Math","pow","xScale","yScale","xOffset","yOffset","modelMatrix","scale","autoHighlight","coordinateOrigin","coordinateSystem","CARTESIAN","extensions","subLayers","warn","_updateAutoHighlight","info","hoveredFeatureId","hoveredFeatureLayerName","hoveredFeature","object","newHoveredFeatureId","newHoveredFeatureLayerName","getFeatureUniqueId","getFeatureLayerName","getPickingInfo","params","isWGS84","sourceLayer","globalFeatureId","transformTileCoordsToWGS84","bbox","getSubLayerPropsByTile","highlightedObjectIndex","getHighlightedObjectIndex","content","isHighlighted","isFeatureIdDefined","isFeatureIdPresent","featureIdToHighlight","findIndex","feature","isMatchingId","isMatchingLayer","_pickObjects","maxObjects","deck","width","height","layerIds","id","pickObjects","getRenderedFeatures","maxFeatures","features","featureCache","Set","renderedFeatures","f","featureId","push","has","add","selectedTiles","forEach","hasOwnProperty","Object","defineProperty","get","length","_contentWGS84","map","layerName","properties","geometry","wgs84Geom"],"mappings":"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","sourcesContent":["import {\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n GetPickingInfoParams,\n Viewport,\n COORDINATE_SYSTEM,\n DefaultProps\n} from '@deck.gl/core';\nimport {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatureCollection} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nimport TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\n\nimport type {Tileset2DProps, TileLoadProps, GeoBoundingBox} from '../tileset-2d';\nimport {\n urlType,\n Tileset2D,\n Tile2DHeader,\n getURLFromTemplate,\n URLTemplate,\n isGeoBoundingBox,\n isURLTemplate\n} from '../tileset-2d';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps<MVTLayerProps> = {\n ...GeoJsonLayer.defaultProps,\n data: urlType,\n onDataLoad: {type: 'function', value: null, optional: true, compare: false},\n uniqueIdProperty: '',\n highlightedFeatureId: null,\n loaders: [MVTWorkerLoader],\n binary: true\n};\n\nexport type TileJson = {\n tilejson: string;\n tiles: string[];\n // eslint-disable-next-line camelcase\n vector_layers: any[];\n attribution?: string;\n scheme?: string;\n maxzoom?: number;\n minzoom?: number;\n version?: string;\n};\n\ntype ParsedMvtTile = Feature[] | BinaryFeatureCollection;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps = _MVTLayerProps &\n Omit<GeoJsonLayerProps, 'data'> &\n TileLayerProps<ParsedMvtTile>;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps = {\n /** Called if `data` is a TileJSON URL when it is successfully fetched. */\n onDataLoad?: ((tilejson: TileJson | null) => void) | null;\n\n /** Needed for highlighting a feature split across two or more tiles. */\n uniqueIdProperty?: string;\n\n /** A feature with ID corresponding to the supplied value will be highlighted. */\n highlightedFeatureId?: string | number | null;\n\n /**\n * Use tile data in binary format.\n *\n * @default true\n */\n binary?: boolean;\n\n /**\n * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.\n *\n * @default [MVTWorkerLoader] from `@loaders.gl/mvt`\n */\n loaders?: Loader[];\n};\n\ntype ContentWGS84Cache = {_contentWGS84?: Feature[]};\n\n/** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */\nexport default class MVTLayer<ExtraProps extends {} = {}> extends TileLayer<\n ParsedMvtTile,\n Required<_MVTLayerProps> & ExtraProps\n> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\n\n state!: TileLayer<ParsedMvtTile>['state'] & {\n binary: boolean;\n data: URLTemplate;\n tileJSON: any;\n highlightColor: number[];\n hoveredFeatureId: number | string | null;\n hoveredFeatureLayerName: string | null;\n };\n\n initializeState(): void {\n super.initializeState();\n // GlobeView doesn't work well with binary data\n const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;\n this.setState({\n binary,\n data: null,\n tileJSON: null\n });\n }\n\n get isLoaded(): boolean {\n return Boolean(this.state && this.state.data && this.state.tileset && super.isLoaded);\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters<this>) {\n if (changeFlags.dataChanged) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._updateTileData();\n }\n\n if (this.state?.data) {\n super.updateState({props, oldProps, context, changeFlags});\n this._setWGS84PropertyForTiles();\n }\n const {highlightColor} = props;\n if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {\n this.setState({highlightColor});\n }\n }\n\n /* eslint-disable complexity */\n private async _updateTileData(): Promise<void> {\n let data: any = this.props.data;\n let tileJSON: any = null;\n\n if (typeof data === 'string' && !isURLTemplate(data)) {\n const {onDataLoad, fetch} = this.props;\n this.setState({data: null, tileJSON: null});\n try {\n tileJSON = await fetch(data, {propName: 'data', layer: this, loaders: []});\n } catch (error: any) {\n this.raiseError(error, 'loading TileJSON');\n data = null;\n }\n\n if (onDataLoad) {\n onDataLoad(tileJSON, {propName: 'data', layer: this});\n }\n } else if (data.tilejson) {\n tileJSON = data;\n }\n\n if (tileJSON) {\n data = tileJSON.tiles;\n }\n\n this.setState({data, tileJSON});\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const opts = super._getTilesetOptions();\n const tileJSON: TileJson | null | undefined = this.state.tileJSON;\n const {minZoom, maxZoom} = this.props;\n\n if (tileJSON) {\n if (Number.isFinite(tileJSON.minzoom) && (tileJSON.minzoom as number) > (minZoom as number)) {\n opts.minZoom = tileJSON.minzoom;\n }\n\n if (\n Number.isFinite(tileJSON.maxzoom) &&\n (!Number.isFinite(maxZoom) || (tileJSON.maxzoom as number) < (maxZoom as number))\n ) {\n opts.maxZoom = tileJSON.maxzoom;\n }\n }\n return opts;\n }\n\n /* eslint-disable complexity */\n\n renderLayers(): Layer | null | LayersList {\n if (!this.state?.data) return null;\n return super.renderLayers();\n }\n\n getTileData(loadProps: TileLoadProps): Promise<ParsedMvtTile> {\n const {data, binary} = this.state;\n const {index, signal} = loadProps;\n\n const url = getURLFromTemplate(data, loadProps);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n let loadOptions = this.getLoadOptions();\n const {fetch} = this.props;\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf',\n mvt: {\n ...loadOptions?.mvt,\n coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',\n tileIndex: index\n // Local worker debug\n // workerUrl: `modules/mvt/dist/mvt-loader.worker.js`\n // Set worker to null to skip web workers\n // workerUrl: null\n },\n gis: binary ? {format: 'binary'} : {}\n };\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: ParsedMvtTile;\n _offset: number;\n tile: Tile2DHeader<ParsedMvtTile>;\n }\n ): Layer | null | LayersList {\n const {x, y, z} = props.tile.index;\n const worldScale = Math.pow(2, z);\n\n const xScale = WORLD_SIZE / worldScale;\n const yScale = -xScale;\n\n const xOffset = (WORLD_SIZE * x) / worldScale;\n const yOffset = WORLD_SIZE * (1 - y / worldScale);\n\n const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);\n\n props.autoHighlight = false;\n\n if (!this.context.viewport.resolution) {\n props.modelMatrix = modelMatrix;\n props.coordinateOrigin = [xOffset, yOffset, 0];\n props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;\n props.extensions = [...(props.extensions || []), new ClipExtension()];\n }\n\n const subLayers = super.renderSubLayers(props);\n\n if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {\n log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();\n }\n\n return subLayers;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {uniqueIdProperty} = this.props;\n\n const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n let newHoveredFeatureLayerName;\n\n if (hoveredFeature) {\n newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);\n newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);\n }\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n if (\n hoveredFeatureId !== newHoveredFeatureId ||\n hoveredFeatureLayerName !== newHoveredFeatureLayerName\n ) {\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId,\n hoveredFeatureLayerName: newHoveredFeatureLayerName\n });\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): TiledPickingInfo {\n const info = super.getPickingInfo(params);\n\n const isWGS84 = Boolean(this.context.viewport.resolution);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatureCollection, {\n globalFeatureId: info.index\n }) as Feature;\n }\n if (info.object && !isWGS84) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox, // eslint-disable-line\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader<ParsedMvtTile>): Record<string, any> {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader<ParsedMvtTile>): number {\n const {hoveredFeatureId, hoveredFeatureLayerName, binary} = this.state;\n const {uniqueIdProperty, highlightedFeatureId} = this.props;\n const data = tile.content;\n\n const isHighlighted = isFeatureIdDefined(highlightedFeatureId);\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;\n\n if (!isFeatureIdPresent) {\n return -1;\n }\n\n const featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId;\n\n // Iterable data\n if (Array.isArray(data)) {\n return data.findIndex(feature => {\n const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;\n const isMatchingLayer =\n isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;\n return isMatchingId && isMatchingLayer;\n });\n\n // Non-iterable data\n } else if (data && binary) {\n // Get the feature index of the selected item to highlight\n return findIndexBinary(\n data,\n uniqueIdProperty,\n featureIdToHighlight!,\n isHighlighted ? '' : hoveredFeatureLayerName!\n );\n }\n\n return -1;\n }\n\n private _pickObjects(maxObjects: number | null): PickingInfo[] {\n const {deck, viewport} = this.context;\n const width = viewport.width;\n const height = viewport.height;\n const x = viewport.x;\n const y = viewport.y;\n const layerIds = [this.id];\n return deck!.pickObjects({x, y, width, height, layerIds, maxObjects});\n }\n\n /** Get the rendered features in the current viewport. */\n getRenderedFeatures(maxFeatures: number | null = null): Feature[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: Feature[] = [];\n\n for (const f of features) {\n const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);\n\n if (featureId === undefined) {\n // we have no id for the feature, we just add to the list\n renderedFeatures.push(f.object as Feature);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as Feature);\n }\n }\n\n return renderedFeatures;\n }\n\n private _setWGS84PropertyForTiles(): void {\n const propName = 'dataInWGS84';\n const tileset: Tileset2D = this.state.tileset!;\n\n // @ts-expect-error selectedTiles are always initialized when tile is being processed\n tileset.selectedTiles.forEach((tile: Tile2DHeader & ContentWGS84Cache) => {\n if (!tile.hasOwnProperty(propName)) {\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(tile, propName, {\n get: () => {\n // Still loading or encountered an error\n if (!tile.content) {\n return null;\n }\n\n if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {\n // TODO: @loaders.gl/mvt returns [] when no content. It should return a valid empty binary.\n // https://github.com/visgl/loaders.gl/pull/1137\n return [];\n }\n\n const {bbox} = tile;\n if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {\n // Create a cache to transform only once\n\n const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;\n tile._contentWGS84 = content.map(feature =>\n transformTileCoordsToWGS84(feature, bbox, this.context.viewport)\n );\n }\n return tile._contentWGS84;\n }\n });\n }\n });\n }\n}\n\nfunction getFeatureUniqueId(feature: Feature, uniqueIdProperty: string | undefined) {\n if (feature.properties && uniqueIdProperty) {\n return feature.properties[uniqueIdProperty];\n }\n\n if ('id' in feature) {\n return feature.id;\n }\n\n return undefined;\n}\n\nfunction getFeatureLayerName(feature: Feature): string | null {\n return feature.properties?.layerName || null;\n}\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nfunction transformTileCoordsToWGS84(\n object: Feature,\n bbox: GeoBoundingBox,\n viewport: Viewport\n): Feature {\n const feature = {\n ...object,\n geometry: {\n type: object.geometry.type\n }\n };\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(feature.geometry, 'coordinates', {\n get: () => {\n const wgs84Geom = transform(object.geometry, bbox, viewport);\n return wgs84Geom.coordinates;\n }\n });\n\n return feature as Feature;\n}\n"],"file":"mvt-layer.js"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import GeoCellLayer from '../geo-cell-layer/GeoCellLayer';
|
|
2
|
-
import { getQuadkeyPolygon } from './quadkey-utils';
|
|
3
|
-
const defaultProps = {
|
|
4
|
-
getQuadkey: {
|
|
5
|
-
type: 'accessor',
|
|
6
|
-
value: d => d.quadkey
|
|
7
|
-
}
|
|
8
|
-
};
|
|
9
|
-
export default class QuadkeyLayer extends GeoCellLayer {
|
|
10
|
-
indexToBounds() {
|
|
11
|
-
const {
|
|
12
|
-
data,
|
|
13
|
-
extruded,
|
|
14
|
-
getQuadkey
|
|
15
|
-
} = this.props;
|
|
16
|
-
const coverage = extruded ? 0.99 : 1;
|
|
17
|
-
return {
|
|
18
|
-
data,
|
|
19
|
-
_normalize: false,
|
|
20
|
-
positionFormat: 'XY',
|
|
21
|
-
getPolygon: (x, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo), coverage),
|
|
22
|
-
updateTriggers: {
|
|
23
|
-
getPolygon: coverage
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
QuadkeyLayer.layerName = 'QuadkeyLayer';
|
|
30
|
-
QuadkeyLayer.defaultProps = defaultProps;
|
|
31
|
-
//# sourceMappingURL=quadkey-layer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/quadkey-layer/quadkey-layer.ts"],"names":["GeoCellLayer","getQuadkeyPolygon","defaultProps","getQuadkey","type","value","d","quadkey","QuadkeyLayer","indexToBounds","data","extruded","props","coverage","_normalize","positionFormat","getPolygon","x","objectInfo","updateTriggers","layerName"],"mappings":"AACA,OAAOA,YAAP,MAA8C,gCAA9C;AACA,SAAQC,iBAAR,QAAgC,iBAAhC;AAEA,MAAMC,YAA6C,GAAG;AACpDC,EAAAA,UAAU,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAGC,CAAD,IAAYA,CAAC,CAACC;AAAxC;AADwC,CAAtD;AAmBA,eAAe,MAAMC,YAAN,SAAoER,YAApE,CAGb;AAIAS,EAAAA,aAAa,GAA0C;AACrD,UAAM;AAACC,MAAAA,IAAD;AAAOC,MAAAA,QAAP;AAAiBR,MAAAA;AAAjB,QAA+B,KAAKS,KAA1C;AAEA,UAAMC,QAAQ,GAAGF,QAAQ,GAAG,IAAH,GAAU,CAAnC;AAEA,WAAO;AACLD,MAAAA,IADK;AAELI,MAAAA,UAAU,EAAE,KAFP;AAGLC,MAAAA,cAAc,EAAE,IAHX;AAKLC,MAAAA,UAAU,EAAE,CAACC,CAAD,EAAWC,UAAX,KAA0BjB,iBAAiB,CAACE,UAAU,CAACc,CAAD,EAAIC,UAAJ,CAAX,EAA4BL,QAA5B,CALlD;AAMLM,MAAAA,cAAc,EAAE;AAACH,QAAAA,UAAU,EAAEH;AAAb;AANX,KAAP;AAQD;;AAjBD;AAHmBL,Y,CAIZY,S,GAAY,c;AAJAZ,Y,CAKZN,Y,GAAeA,Y","sourcesContent":["import {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport GeoCellLayer, {GeoCellLayerProps} from '../geo-cell-layer/GeoCellLayer';\nimport {getQuadkeyPolygon} from './quadkey-utils';\n\nconst defaultProps: DefaultProps<QuadkeyLayerProps> = {\n getQuadkey: {type: 'accessor', value: (d: any) => d.quadkey}\n};\n\n/** All properties supported by QuadkeyLayer. */\nexport type QuadkeyLayerProps<DataT = unknown> = _QuadkeyLayerProps<DataT> &\n GeoCellLayerProps<DataT>;\n\n/** Properties added by QuadkeyLayer. */\ntype _QuadkeyLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `quadkey` property of data object.\n */\n getQuadkey?: AccessorFunction<DataT, string>;\n};\n\n/** Render filled and/or stroked polygons based on the [Quadkey](https://towardsdatascience.com/geospatial-indexing-with-quadkeys-d933dff01496) geospatial indexing system. */\nexport default class QuadkeyLayer<DataT = any, ExtraProps extends {} = {}> extends GeoCellLayer<\n DataT,\n Required<_QuadkeyLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'QuadkeyLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, extruded, getQuadkey} = this.props;\n // To avoid z-fighting reduce polygon footprint when extruding\n const coverage = extruded ? 0.99 : 1;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadkeyPolygon(getQuadkey(x, objectInfo), coverage),\n updateTriggers: {getPolygon: coverage}\n };\n }\n}\n"],"file":"quadkey-layer.js"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { worldToLngLat } from '@math.gl/web-mercator';
|
|
2
|
-
const TILE_SIZE = 512;
|
|
3
|
-
export function quadkeyToWorldBounds(quadkey, coverage) {
|
|
4
|
-
let x = 0;
|
|
5
|
-
let y = 0;
|
|
6
|
-
let mask = 1 << quadkey.length;
|
|
7
|
-
const scale = mask / TILE_SIZE;
|
|
8
|
-
|
|
9
|
-
for (let i = 0; i < quadkey.length; i++) {
|
|
10
|
-
mask >>= 1;
|
|
11
|
-
const q = parseInt(quadkey[i]);
|
|
12
|
-
if (q % 2) x |= mask;
|
|
13
|
-
if (q > 1) y |= mask;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return [[x / scale, TILE_SIZE - y / scale], [(x + coverage) / scale, TILE_SIZE - (y + coverage) / scale]];
|
|
17
|
-
}
|
|
18
|
-
export function getQuadkeyPolygon(quadkey, coverage = 1) {
|
|
19
|
-
const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey, coverage);
|
|
20
|
-
const [w, n] = worldToLngLat(topLeft);
|
|
21
|
-
const [e, s] = worldToLngLat(bottomRight);
|
|
22
|
-
return [e, n, e, s, w, s, w, n, e, n];
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=quadkey-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/quadkey-layer/quadkey-utils.ts"],"names":["worldToLngLat","TILE_SIZE","quadkeyToWorldBounds","quadkey","coverage","x","y","mask","length","scale","i","q","parseInt","getQuadkeyPolygon","topLeft","bottomRight","w","n","e","s"],"mappings":"AAAA,SAAQA,aAAR,QAA4B,uBAA5B;AAEA,MAAMC,SAAS,GAAG,GAAlB;AAEA,OAAO,SAASC,oBAAT,CAA8BC,OAA9B,EAA+CC,QAA/C,EAAuF;AAC5F,MAAIC,CAAC,GAAG,CAAR;AACA,MAAIC,CAAC,GAAG,CAAR;AACA,MAAIC,IAAI,GAAG,KAAKJ,OAAO,CAACK,MAAxB;AACA,QAAMC,KAAK,GAAGF,IAAI,GAAGN,SAArB;;AAEA,OAAK,IAAIS,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,OAAO,CAACK,MAA5B,EAAoCE,CAAC,EAArC,EAAyC;AACvCH,IAAAA,IAAI,KAAK,CAAT;AACA,UAAMI,CAAC,GAAGC,QAAQ,CAACT,OAAO,CAACO,CAAD,CAAR,CAAlB;AACA,QAAIC,CAAC,GAAG,CAAR,EAAWN,CAAC,IAAIE,IAAL;AACX,QAAII,CAAC,GAAG,CAAR,EAAWL,CAAC,IAAIC,IAAL;AACZ;;AACD,SAAO,CACL,CAACF,CAAC,GAAGI,KAAL,EAAYR,SAAS,GAAGK,CAAC,GAAGG,KAA5B,CADK,EAEL,CAAC,CAACJ,CAAC,GAAGD,QAAL,IAAiBK,KAAlB,EAAyBR,SAAS,GAAG,CAACK,CAAC,GAAGF,QAAL,IAAiBK,KAAtD,CAFK,CAAP;AAID;AAED,OAAO,SAASI,iBAAT,CAA2BV,OAA3B,EAA4CC,QAAQ,GAAG,CAAvD,EAAoE;AACzE,QAAM,CAACU,OAAD,EAAUC,WAAV,IAAyBb,oBAAoB,CAACC,OAAD,EAAUC,QAAV,CAAnD;AACA,QAAM,CAACY,CAAD,EAAIC,CAAJ,IAASjB,aAAa,CAACc,OAAD,CAA5B;AACA,QAAM,CAACI,CAAD,EAAIC,CAAJ,IAASnB,aAAa,CAACe,WAAD,CAA5B;AACA,SAAO,CAACG,CAAD,EAAID,CAAJ,EAAOC,CAAP,EAAUC,CAAV,EAAaH,CAAb,EAAgBG,CAAhB,EAAmBH,CAAnB,EAAsBC,CAAtB,EAAyBC,CAAzB,EAA4BD,CAA5B,CAAP;AACD","sourcesContent":["import {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nexport function quadkeyToWorldBounds(quadkey: string, coverage: number): [number[], number[]] {\n let x = 0;\n let y = 0;\n let mask = 1 << quadkey.length;\n const scale = mask / TILE_SIZE;\n\n for (let i = 0; i < quadkey.length; i++) {\n mask >>= 1;\n const q = parseInt(quadkey[i]);\n if (q % 2) x |= mask;\n if (q > 1) y |= mask;\n }\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + coverage) / scale, TILE_SIZE - (y + coverage) / scale]\n ];\n}\n\nexport function getQuadkeyPolygon(quadkey: string, coverage = 1): number[] {\n const [topLeft, bottomRight] = quadkeyToWorldBounds(quadkey, coverage);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n"],"file":"quadkey-utils.js"}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import Long from 'long';
|
|
2
|
-
const FACE_BITS = 3;
|
|
3
|
-
const MAX_LEVEL = 30;
|
|
4
|
-
const POS_BITS = 2 * MAX_LEVEL + 1;
|
|
5
|
-
const RADIAN_TO_DEGREE = 180 / Math.PI;
|
|
6
|
-
export function IJToST(ij, order, offsets) {
|
|
7
|
-
const maxSize = 1 << order;
|
|
8
|
-
return [(ij[0] + offsets[0]) / maxSize, (ij[1] + offsets[1]) / maxSize];
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
function singleSTtoUV(st) {
|
|
12
|
-
if (st >= 0.5) {
|
|
13
|
-
return 1 / 3.0 * (4 * st * st - 1);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return 1 / 3.0 * (1 - 4 * (1 - st) * (1 - st));
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function STToUV(st) {
|
|
20
|
-
return [singleSTtoUV(st[0]), singleSTtoUV(st[1])];
|
|
21
|
-
}
|
|
22
|
-
export function FaceUVToXYZ(face, [u, v]) {
|
|
23
|
-
switch (face) {
|
|
24
|
-
case 0:
|
|
25
|
-
return [1, u, v];
|
|
26
|
-
|
|
27
|
-
case 1:
|
|
28
|
-
return [-u, 1, v];
|
|
29
|
-
|
|
30
|
-
case 2:
|
|
31
|
-
return [-u, -v, 1];
|
|
32
|
-
|
|
33
|
-
case 3:
|
|
34
|
-
return [-1, -v, -u];
|
|
35
|
-
|
|
36
|
-
case 4:
|
|
37
|
-
return [v, -1, -u];
|
|
38
|
-
|
|
39
|
-
case 5:
|
|
40
|
-
return [v, u, -1];
|
|
41
|
-
|
|
42
|
-
default:
|
|
43
|
-
throw new Error('Invalid face');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export function XYZToLngLat([x, y, z]) {
|
|
47
|
-
const lat = Math.atan2(z, Math.sqrt(x * x + y * y));
|
|
48
|
-
const lng = Math.atan2(y, x);
|
|
49
|
-
return [lng * RADIAN_TO_DEGREE, lat * RADIAN_TO_DEGREE];
|
|
50
|
-
}
|
|
51
|
-
export function toHilbertQuadkey(idS) {
|
|
52
|
-
let bin = Long.fromString(idS, true, 10).toString(2);
|
|
53
|
-
|
|
54
|
-
while (bin.length < FACE_BITS + POS_BITS) {
|
|
55
|
-
bin = '0' + bin;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const lsbIndex = bin.lastIndexOf('1');
|
|
59
|
-
const faceB = bin.substring(0, 3);
|
|
60
|
-
const posB = bin.substring(3, lsbIndex);
|
|
61
|
-
const levelN = posB.length / 2;
|
|
62
|
-
const faceS = Long.fromString(faceB, true, 2).toString(10);
|
|
63
|
-
let posS = Long.fromString(posB, true, 2).toString(4);
|
|
64
|
-
|
|
65
|
-
while (posS.length < levelN) {
|
|
66
|
-
posS = '0' + posS;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return `${faceS}/${posS}`;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function rotateAndFlipQuadrant(n, point, rx, ry) {
|
|
73
|
-
if (ry === 0) {
|
|
74
|
-
if (rx === 1) {
|
|
75
|
-
point[0] = n - 1 - point[0];
|
|
76
|
-
point[1] = n - 1 - point[1];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const x = point[0];
|
|
80
|
-
point[0] = point[1];
|
|
81
|
-
point[1] = x;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export function FromHilbertQuadKey(hilbertQuadkey) {
|
|
86
|
-
const parts = hilbertQuadkey.split('/');
|
|
87
|
-
const face = parseInt(parts[0], 10);
|
|
88
|
-
const position = parts[1];
|
|
89
|
-
const maxLevel = position.length;
|
|
90
|
-
const point = [0, 0];
|
|
91
|
-
let level;
|
|
92
|
-
|
|
93
|
-
for (let i = maxLevel - 1; i >= 0; i--) {
|
|
94
|
-
level = maxLevel - i;
|
|
95
|
-
const bit = position[i];
|
|
96
|
-
let rx = 0;
|
|
97
|
-
let ry = 0;
|
|
98
|
-
|
|
99
|
-
if (bit === '1') {
|
|
100
|
-
ry = 1;
|
|
101
|
-
} else if (bit === '2') {
|
|
102
|
-
rx = 1;
|
|
103
|
-
ry = 1;
|
|
104
|
-
} else if (bit === '3') {
|
|
105
|
-
rx = 1;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const val = Math.pow(2, level - 1);
|
|
109
|
-
rotateAndFlipQuadrant(val, point, rx, ry);
|
|
110
|
-
point[0] += val * rx;
|
|
111
|
-
point[1] += val * ry;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (face % 2 === 1) {
|
|
115
|
-
const t = point[0];
|
|
116
|
-
point[0] = point[1];
|
|
117
|
-
point[1] = t;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return {
|
|
121
|
-
face,
|
|
122
|
-
ij: point,
|
|
123
|
-
level
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=s2-geometry.js.map
|