@deck.gl/carto 8.8.0-alpha.3 → 8.8.0-alpha.6
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 +383 -247
- package/dist/es5/api/layer-map.js +7 -5
- package/dist/es5/api/layer-map.js.map +1 -1
- package/dist/es5/layers/carto-layer.js +3 -1
- package/dist/es5/layers/carto-layer.js.map +1 -1
- package/dist/es5/layers/carto-tile-layer.js +17 -12
- package/dist/es5/layers/carto-tile-layer.js.map +1 -1
- package/dist/es5/layers/h3-tile-layer.js +34 -13
- package/dist/es5/layers/h3-tile-layer.js.map +1 -1
- package/dist/es5/layers/h3-tileset-2d.js +21 -11
- package/dist/es5/layers/h3-tileset-2d.js.map +1 -1
- package/dist/es5/layers/quadkey-tile-layer.js +31 -14
- package/dist/es5/layers/quadkey-tile-layer.js.map +1 -1
- package/dist/es5/layers/quadkey-tileset-2d.js.map +1 -1
- package/dist/es5/layers/schema/carto-tile.js +261 -188
- package/dist/es5/layers/schema/carto-tile.js.map +1 -1
- package/dist/es5/layers/spatial-index-tile-layer.js +92 -0
- package/dist/es5/layers/spatial-index-tile-layer.js.map +1 -0
- package/dist/esm/api/layer-map.js +8 -6
- package/dist/esm/api/layer-map.js.map +1 -1
- package/dist/esm/layers/carto-layer.js +3 -1
- package/dist/esm/layers/carto-layer.js.map +1 -1
- package/dist/esm/layers/carto-tile-layer.js +20 -16
- package/dist/esm/layers/carto-tile-layer.js.map +1 -1
- package/dist/esm/layers/h3-tile-layer.js +24 -10
- package/dist/esm/layers/h3-tile-layer.js.map +1 -1
- package/dist/esm/layers/h3-tileset-2d.js +27 -12
- package/dist/esm/layers/h3-tileset-2d.js.map +1 -1
- package/dist/esm/layers/quadkey-tile-layer.js +22 -13
- package/dist/esm/layers/quadkey-tile-layer.js.map +1 -1
- package/dist/esm/layers/quadkey-tileset-2d.js.map +1 -1
- package/dist/esm/layers/schema/carto-tile.js +174 -189
- package/dist/esm/layers/schema/carto-tile.js.map +1 -1
- package/dist/esm/layers/spatial-index-tile-layer.js +57 -0
- package/dist/esm/layers/spatial-index-tile-layer.js.map +1 -0
- package/dist.min.js +4 -4
- package/package.json +7 -4
- package/src/api/layer-map.ts +16 -7
- package/src/layers/carto-layer.ts +18 -5
- package/src/layers/{carto-tile-layer.js → carto-tile-layer.ts} +63 -26
- package/src/layers/h3-tile-layer.ts +78 -0
- package/src/layers/h3-tileset-2d.ts +118 -0
- package/src/layers/quadkey-tile-layer.ts +68 -0
- package/src/layers/{quadkey-tileset-2d.js → quadkey-tileset-2d.ts} +10 -5
- package/src/layers/schema/carto-tile.ts +221 -0
- package/src/layers/spatial-index-tile-layer.ts +49 -0
- package/typed/api/index.d.ts +4 -0
- package/typed/api/index.d.ts.map +1 -0
- package/typed/api/layer-map.d.ts +54 -0
- package/typed/api/layer-map.d.ts.map +1 -0
- package/typed/api/maps-api-common.d.ts +65 -0
- package/typed/api/maps-api-common.d.ts.map +1 -0
- package/typed/api/maps-client.d.ts +18 -0
- package/typed/api/maps-client.d.ts.map +1 -0
- package/typed/api/maps-v3-client.d.ts +45 -0
- package/typed/api/maps-v3-client.d.ts.map +1 -0
- package/typed/api/parseMap.d.ts +11 -0
- package/typed/api/parseMap.d.ts.map +1 -0
- package/typed/basemap.d.ts +10 -0
- package/typed/basemap.d.ts.map +1 -0
- package/typed/config.d.ts +26 -0
- package/typed/config.d.ts.map +1 -0
- package/typed/index.d.ts +12 -0
- package/typed/index.d.ts.map +1 -0
- package/typed/layers/carto-layer.d.ts +98 -0
- package/typed/layers/carto-layer.d.ts.map +1 -0
- package/typed/layers/carto-tile-layer.d.ts +63 -0
- package/typed/layers/carto-tile-layer.d.ts.map +1 -0
- package/typed/layers/h3-tile-layer.d.ts +23 -0
- package/typed/layers/h3-tile-layer.d.ts.map +1 -0
- package/typed/layers/h3-tileset-2d.d.ts +18 -0
- package/typed/layers/h3-tileset-2d.d.ts.map +1 -0
- package/typed/layers/quadkey-tile-layer.d.ts +23 -0
- package/typed/layers/quadkey-tile-layer.d.ts.map +1 -0
- package/typed/layers/quadkey-tileset-2d.d.ts +15 -0
- package/typed/layers/quadkey-tileset-2d.d.ts.map +1 -0
- package/typed/layers/schema/carto-tile.d.ts +44 -0
- package/typed/layers/schema/carto-tile.d.ts.map +1 -0
- package/typed/layers/spatial-index-tile-layer.d.ts +11 -0
- package/typed/layers/spatial-index-tile-layer.d.ts.map +1 -0
- package/typed/package.json +6 -0
- package/typed/style/color-bins-style.d.ts +9 -0
- package/typed/style/color-bins-style.d.ts.map +1 -0
- package/typed/style/color-categories-style.d.ts +10 -0
- package/typed/style/color-categories-style.d.ts.map +1 -0
- package/typed/style/color-continuous-style.d.ts +9 -0
- package/typed/style/color-continuous-style.d.ts.map +1 -0
- package/typed/style/palette.d.ts +7 -0
- package/typed/style/palette.d.ts.map +1 -0
- package/typed/style/utils.d.ts +8 -0
- package/typed/style/utils.d.ts.map +1 -0
- package/typed/utils.d.ts +2 -0
- package/typed/utils.d.ts.map +1 -0
- package/src/layers/h3-tile-layer.js +0 -44
- package/src/layers/h3-tileset-2d.js +0 -82
- package/src/layers/quadkey-tile-layer.js +0 -42
- package/src/layers/schema/carto-tile.js +0 -195
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
1
2
|
import { CompositeLayer } from '@deck.gl/core';
|
|
2
|
-
import { H3HexagonLayer
|
|
3
|
+
import { H3HexagonLayer } from '@deck.gl/geo-layers';
|
|
3
4
|
import H3Tileset2D from './h3-tileset-2d';
|
|
5
|
+
import SpatialIndexTileLayer from './spatial-index-tile-layer';
|
|
4
6
|
|
|
5
7
|
const renderSubLayers = props => {
|
|
6
8
|
const {
|
|
@@ -11,12 +13,22 @@ const renderSubLayers = props => {
|
|
|
11
13
|
} = props.tile;
|
|
12
14
|
if (!data || !data.length) return null;
|
|
13
15
|
return new H3HexagonLayer(props, {
|
|
16
|
+
getHexagon: d => d.id,
|
|
14
17
|
centerHexagon: index,
|
|
15
18
|
highPrecision: true
|
|
16
19
|
});
|
|
17
20
|
};
|
|
18
21
|
|
|
22
|
+
const defaultProps = {
|
|
23
|
+
aggregationResLevel: 4
|
|
24
|
+
};
|
|
19
25
|
export default class H3TileLayer extends CompositeLayer {
|
|
26
|
+
constructor(...args) {
|
|
27
|
+
super(...args);
|
|
28
|
+
|
|
29
|
+
_defineProperty(this, "state", void 0);
|
|
30
|
+
}
|
|
31
|
+
|
|
20
32
|
initializeState() {
|
|
21
33
|
this.setState({
|
|
22
34
|
data: null,
|
|
@@ -25,9 +37,6 @@ export default class H3TileLayer extends CompositeLayer {
|
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
updateState({
|
|
28
|
-
props,
|
|
29
|
-
oldProps,
|
|
30
|
-
context,
|
|
31
40
|
changeFlags
|
|
32
41
|
}) {
|
|
33
42
|
if (changeFlags.dataChanged) {
|
|
@@ -45,17 +54,22 @@ export default class H3TileLayer extends CompositeLayer {
|
|
|
45
54
|
|
|
46
55
|
renderLayers() {
|
|
47
56
|
const {
|
|
48
|
-
data
|
|
57
|
+
data,
|
|
58
|
+
tileJSON
|
|
49
59
|
} = this.state;
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
const maxZoom = parseInt(tileJSON.maxresolution);
|
|
61
|
+
return [new SpatialIndexTileLayer(this.props, {
|
|
62
|
+
id: "h3-tile-layer-".concat(this.props.id),
|
|
52
63
|
data,
|
|
53
|
-
getHexagon: d => d.id,
|
|
54
64
|
TilesetClass: H3Tileset2D,
|
|
55
|
-
renderSubLayers
|
|
65
|
+
renderSubLayers,
|
|
66
|
+
maxZoom
|
|
56
67
|
})];
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
}
|
|
60
|
-
|
|
71
|
+
|
|
72
|
+
_defineProperty(H3TileLayer, "layerName", 'H3TileLayer');
|
|
73
|
+
|
|
74
|
+
_defineProperty(H3TileLayer, "defaultProps", defaultProps);
|
|
61
75
|
//# sourceMappingURL=h3-tile-layer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/layers/h3-tile-layer.
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/h3-tile-layer.ts"],"names":["CompositeLayer","H3HexagonLayer","H3Tileset2D","SpatialIndexTileLayer","renderSubLayers","props","data","index","tile","length","getHexagon","d","id","centerHexagon","highPrecision","defaultProps","aggregationResLevel","H3TileLayer","initializeState","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","maxZoom","parseInt","maxresolution","TilesetClass"],"mappings":";AAAA,SACEA,cADF,QAMO,eANP;AAOA,SAAQC,cAAR,QAA6B,qBAA7B;AACA,OAAOC,WAAP,MAAwB,iBAAxB;AACA,OAAOC,qBAAP,MAAkC,4BAAlC;;AAEA,MAAMC,eAAe,GAAGC,KAAK,IAAI;AAC/B,QAAM;AAACC,IAAAA;AAAD,MAASD,KAAf;AACA,QAAM;AAACE,IAAAA;AAAD,MAAUF,KAAK,CAACG,IAAtB;AACA,MAAI,CAACF,IAAD,IAAS,CAACA,IAAI,CAACG,MAAnB,EAA2B,OAAO,IAAP;AAE3B,SAAO,IAAIR,cAAJ,CAAmBI,KAAnB,EAA0B;AAC/BK,IAAAA,UAAU,EAAEC,CAAC,IAAIA,CAAC,CAACC,EADY;AAE/BC,IAAAA,aAAa,EAAEN,KAFgB;AAG/BO,IAAAA,aAAa,EAAE;AAHgB,GAA1B,CAAP;AAKD,CAVD;;AAYA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,mBAAmB,EAAE;AADF,CAArB;AAgBA,eAAe,MAAMC,WAAN,SAAyDjB,cAAzD,CAEb;AAAA;AAAA;;AAAA;AAAA;;AASAkB,EAAAA,eAAe,GAAS;AACtB,SAAKC,QAAL,CAAc;AAACb,MAAAA,IAAI,EAAE,IAAP;AAAac,MAAAA,QAAQ,EAAE;AAAvB,KAAd;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACC,IAAAA;AAAD,GAAD,EAA8C;AACvD,QAAIA,WAAW,CAACC,WAAhB,EAA6B;AAC3B,UAAI;AAACjB,QAAAA;AAAD,UAAS,KAAKD,KAAlB;AACA,YAAMe,QAAQ,GAAGd,IAAjB;AACAA,MAAAA,IAAI,GAAIc,QAAD,CAAkBI,KAAzB;AACA,WAAKL,QAAL,CAAc;AAACb,QAAAA,IAAD;AAAOc,QAAAA;AAAP,OAAd;AACD;AACF;;AAEDK,EAAAA,YAAY,GAA8B;AACxC,UAAM;AAACnB,MAAAA,IAAD;AAAOc,MAAAA;AAAP,QAAmB,KAAKM,KAA9B;AACA,UAAMC,OAAO,GAAGC,QAAQ,CAACR,QAAQ,CAACS,aAAV,CAAxB;AACA,WAAO,CACL,IAAI1B,qBAAJ,CAA0B,KAAKE,KAA/B,EAAsC;AACpCO,MAAAA,EAAE,0BAAmB,KAAKP,KAAL,CAAWO,EAA9B,CADkC;AAEpCN,MAAAA,IAFoC;AAIpCwB,MAAAA,YAAY,EAAE5B,WAJsB;AAKpCE,MAAAA,eALoC;AAMpCuB,MAAAA;AANoC,KAAtC,CADK,CAAP;AAUD;;AAnCD;;gBAFmBV,W,eAGA,a;;gBAHAA,W,kBAIGF,Y","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayersList,\n UpdateParameters\n} from '@deck.gl/core';\nimport {H3HexagonLayer} from '@deck.gl/geo-layers';\nimport H3Tileset2D from './h3-tileset-2d';\nimport SpatialIndexTileLayer from './spatial-index-tile-layer';\n\nconst renderSubLayers = props => {\n const {data} = props;\n const {index} = props.tile;\n if (!data || !data.length) return null;\n\n return new H3HexagonLayer(props, {\n getHexagon: d => d.id,\n centerHexagon: index,\n highPrecision: true\n });\n};\n\nconst defaultProps = {\n aggregationResLevel: 4\n};\n\n/** All properties supported by H3TileLayer. */\nexport type H3TileLayerProps<DataT = any> = _H3TileLayerProps<DataT> & CompositeLayerProps<DataT>;\n\n// TODO: use type from h3-hexagon-layer when available\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype H3HexagonLayerProps<DataT = any> = Record<string, any>;\n\n/** Properties added by H3TileLayer. */\ntype _H3TileLayerProps<DataT = any> = H3HexagonLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class H3TileLayer<DataT = any, ExtraPropsT = {}> extends CompositeLayer<\n ExtraPropsT & Required<_H3TileLayerProps<DataT>>\n> {\n static layerName = 'H3TileLayer';\n static defaultProps = defaultProps;\n\n state!: {\n tileJSON: any;\n data: any;\n };\n\n initializeState(): void {\n this.setState({data: null, tileJSON: null});\n }\n\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (changeFlags.dataChanged) {\n let {data} = this.props;\n const tileJSON = data;\n data = (tileJSON as any).tiles;\n this.setState({data, tileJSON});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {data, tileJSON} = this.state;\n const maxZoom = parseInt(tileJSON.maxresolution);\n return [\n new SpatialIndexTileLayer(this.props, {\n id: `h3-tile-layer-${this.props.id}`,\n data,\n // @ts-expect-error Tileset2D should be generic over TileIndex\n TilesetClass: H3Tileset2D,\n renderSubLayers,\n maxZoom\n })\n ];\n }\n}\n"],"file":"h3-tile-layer.js"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';
|
|
2
|
-
import { polyfill, getRes0Indexes, h3GetResolution, h3ToGeoBoundary, h3ToParent } from 'h3-js';
|
|
3
|
-
|
|
2
|
+
import { polyfill, getRes0Indexes, geoToH3, h3GetResolution, h3ToGeoBoundary, h3ToParent, kRing } from 'h3-js';
|
|
3
|
+
|
|
4
|
+
function getHexagonsInBoundingBox({
|
|
4
5
|
west,
|
|
5
6
|
north,
|
|
6
7
|
east,
|
|
@@ -24,11 +25,12 @@ export function getHexagonsInBoundingBox({
|
|
|
24
25
|
}, resolution));
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
const oversample =
|
|
28
|
+
const oversample = 2;
|
|
28
29
|
const h3Indices = polyfill([[[west, north], [west, south], [east, south], [east, north], [west, north]]], resolution + oversample, true);
|
|
29
30
|
return oversample ? [...new Set(h3Indices.map(i => h3ToParent(i, resolution)))] : h3Indices;
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
|
|
33
|
+
function tileToBoundingBox(index) {
|
|
32
34
|
const coordinates = h3ToGeoBoundary(index);
|
|
33
35
|
const latitudes = coordinates.map(c => c[0]);
|
|
34
36
|
const longitudes = coordinates.map(c => c[1]);
|
|
@@ -43,6 +45,15 @@ export function tileToBoundingBox(index) {
|
|
|
43
45
|
north
|
|
44
46
|
};
|
|
45
47
|
}
|
|
48
|
+
|
|
49
|
+
const BIAS = 2;
|
|
50
|
+
|
|
51
|
+
function getHexagonResolution(viewport) {
|
|
52
|
+
const hexagonScaleFactor = 2 / 3 * viewport.zoom;
|
|
53
|
+
const latitudeScaleFactor = Math.log(1 / Math.cos(Math.PI * viewport.latitude / 180));
|
|
54
|
+
return Math.max(0, Math.floor(hexagonScaleFactor + latitudeScaleFactor - BIAS));
|
|
55
|
+
}
|
|
56
|
+
|
|
46
57
|
export default class H3Tileset2D extends Tileset2D {
|
|
47
58
|
getTileIndices({
|
|
48
59
|
viewport,
|
|
@@ -50,7 +61,8 @@ export default class H3Tileset2D extends Tileset2D {
|
|
|
50
61
|
maxZoom
|
|
51
62
|
}) {
|
|
52
63
|
const [east, south, west, north] = viewport.getBounds();
|
|
53
|
-
let z = viewport
|
|
64
|
+
let z = getHexagonResolution(viewport);
|
|
65
|
+
let indices;
|
|
54
66
|
|
|
55
67
|
if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {
|
|
56
68
|
z = minZoom;
|
|
@@ -58,15 +70,18 @@ export default class H3Tileset2D extends Tileset2D {
|
|
|
58
70
|
|
|
59
71
|
if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {
|
|
60
72
|
z = maxZoom;
|
|
73
|
+
const center = geoToH3(viewport.latitude, viewport.longitude, maxZoom);
|
|
74
|
+
indices = kRing(center, 1);
|
|
75
|
+
} else {
|
|
76
|
+
indices = getHexagonsInBoundingBox({
|
|
77
|
+
west,
|
|
78
|
+
north,
|
|
79
|
+
east,
|
|
80
|
+
south
|
|
81
|
+
}, z);
|
|
61
82
|
}
|
|
62
83
|
|
|
63
|
-
|
|
64
|
-
return getHexagonsInBoundingBox({
|
|
65
|
-
west,
|
|
66
|
-
north,
|
|
67
|
-
east,
|
|
68
|
-
south
|
|
69
|
-
}, resolution).map(i => ({
|
|
84
|
+
return indices.map(i => ({
|
|
70
85
|
i
|
|
71
86
|
}));
|
|
72
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/layers/h3-tileset-2d.
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/h3-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","polyfill","getRes0Indexes","geoToH3","h3GetResolution","h3ToGeoBoundary","h3ToParent","kRing","getHexagonsInBoundingBox","west","north","east","south","resolution","concat","oversample","h3Indices","Set","map","i","tileToBoundingBox","index","coordinates","latitudes","c","longitudes","Math","min","max","BIAS","getHexagonResolution","viewport","hexagonScaleFactor","zoom","latitudeScaleFactor","log","cos","PI","latitude","floor","H3Tileset2D","getTileIndices","minZoom","maxZoom","getBounds","z","indices","Number","isFinite","center","longitude","getTileId","getTileMetadata","bbox","getTileZoom","getParentIndex"],"mappings":"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","sourcesContent":["import {_Tileset2D as Tileset2D, GeoBoundingBox} from '@deck.gl/geo-layers';\nimport {\n polyfill,\n getRes0Indexes,\n geoToH3,\n h3GetResolution,\n h3ToGeoBoundary,\n h3ToParent,\n kRing\n} from 'h3-js';\n\nexport type H3TileIndex = {i: string};\n\nfunction getHexagonsInBoundingBox(\n {west, north, east, south}: GeoBoundingBox,\n resolution: number\n): string[] {\n if (resolution === 0) {\n return getRes0Indexes();\n }\n if (east - west > 180) {\n // This is a known issue in h3-js: polyfill does not work correctly\n // when longitude span is larger than 180 degrees.\n return getHexagonsInBoundingBox({west, north, east: 0, south}, resolution).concat(\n getHexagonsInBoundingBox({west: 0, north, east, south}, resolution)\n );\n }\n\n // `polyfill()` fills based on hexagon center, which means tiles vanish\n // prematurely. Get more accurate coverage by oversampling\n const oversample = 2;\n const h3Indices = polyfill(\n [\n [\n [west, north],\n [west, south],\n [east, south],\n [east, north],\n [west, north]\n ]\n ],\n resolution + oversample,\n true\n );\n\n return oversample ? [...new Set(h3Indices.map(i => h3ToParent(i, resolution)))] : h3Indices;\n}\n\nfunction tileToBoundingBox(index: string): GeoBoundingBox {\n const coordinates = h3ToGeoBoundary(index);\n const latitudes = coordinates.map(c => c[0]);\n const longitudes = coordinates.map(c => c[1]);\n const west = Math.min(...longitudes);\n const south = Math.min(...latitudes);\n const east = Math.max(...longitudes);\n const north = Math.max(...latitudes);\n return {west, south, east, north};\n}\n\n// Resolution conversion function. Takes a WebMercatorViewport and returns\n// a H3 resolution such that the screen space size of the hexagons is\n// similar\n// Relative scale factor (0 = no biasing, 2 = a few hexagons cover view)\nconst BIAS = 2;\nfunction getHexagonResolution(viewport): number {\n const hexagonScaleFactor = (2 / 3) * viewport.zoom;\n const latitudeScaleFactor = Math.log(1 / Math.cos((Math.PI * viewport.latitude) / 180));\n\n // Clip and bias\n return Math.max(0, Math.floor(hexagonScaleFactor + latitudeScaleFactor - BIAS));\n}\n\nexport default class H3Tileset2D extends Tileset2D {\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileIndices({viewport, minZoom, maxZoom}): H3TileIndex[] {\n const [east, south, west, north] = viewport.getBounds();\n\n let z = getHexagonResolution(viewport);\n let indices: string[];\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n z = minZoom;\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n\n // Once we are at max zoom, getHexagonsInBoundingBox doesn't work, simply\n // get a ring centered on the hexagon in the viewport center\n const center = geoToH3(viewport.latitude, viewport.longitude, maxZoom);\n indices = kRing(center, 1);\n } else {\n indices = getHexagonsInBoundingBox({west, north, east, south}, z);\n }\n\n return indices.map(i => ({i}));\n }\n\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileId({i}: H3TileIndex): string {\n return i;\n }\n\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileMetadata({i}: H3TileIndex) {\n return {bbox: tileToBoundingBox(i)};\n }\n\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileZoom({i}: H3TileIndex): number {\n return h3GetResolution(i);\n }\n\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getParentIndex(index: H3TileIndex): H3TileIndex {\n const resolution = h3GetResolution(index.i);\n const i = h3ToParent(index.i, resolution - 1);\n return {i};\n }\n}\n"],"file":"h3-tileset-2d.js"}
|
|
@@ -1,16 +1,29 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
1
2
|
import { CompositeLayer } from '@deck.gl/core';
|
|
2
|
-
import { QuadkeyLayer
|
|
3
|
+
import { QuadkeyLayer } from '@deck.gl/geo-layers';
|
|
3
4
|
import QuadkeyTileset2D from './quadkey-tileset-2d';
|
|
5
|
+
import SpatialIndexTileLayer from './spatial-index-tile-layer';
|
|
4
6
|
|
|
5
7
|
const renderSubLayers = props => {
|
|
6
8
|
const {
|
|
7
9
|
data
|
|
8
10
|
} = props;
|
|
9
11
|
if (!data || !data.length) return null;
|
|
10
|
-
return new QuadkeyLayer(props
|
|
12
|
+
return new QuadkeyLayer(props, {
|
|
13
|
+
getQuadkey: d => d.id
|
|
14
|
+
});
|
|
11
15
|
};
|
|
12
16
|
|
|
17
|
+
const defaultProps = {
|
|
18
|
+
aggregationResLevel: 6
|
|
19
|
+
};
|
|
13
20
|
export default class QuadkeyTileLayer extends CompositeLayer {
|
|
21
|
+
constructor(...args) {
|
|
22
|
+
super(...args);
|
|
23
|
+
|
|
24
|
+
_defineProperty(this, "state", void 0);
|
|
25
|
+
}
|
|
26
|
+
|
|
14
27
|
initializeState() {
|
|
15
28
|
this.setState({
|
|
16
29
|
data: null,
|
|
@@ -19,9 +32,6 @@ export default class QuadkeyTileLayer extends CompositeLayer {
|
|
|
19
32
|
}
|
|
20
33
|
|
|
21
34
|
updateState({
|
|
22
|
-
props,
|
|
23
|
-
oldProps,
|
|
24
|
-
context,
|
|
25
35
|
changeFlags
|
|
26
36
|
}) {
|
|
27
37
|
if (changeFlags.dataChanged) {
|
|
@@ -42,14 +52,10 @@ export default class QuadkeyTileLayer extends CompositeLayer {
|
|
|
42
52
|
data,
|
|
43
53
|
tileJSON
|
|
44
54
|
} = this.state;
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const maxZoom = maxresolution - this.props.aggregationResLevel;
|
|
49
|
-
return [new TileLayer(this.props, {
|
|
50
|
-
id: 'quadkey-tile-layer',
|
|
55
|
+
const maxZoom = parseInt(tileJSON === null || tileJSON === void 0 ? void 0 : tileJSON.maxresolution);
|
|
56
|
+
return [new SpatialIndexTileLayer(this.props, {
|
|
57
|
+
id: "quadkey-tile-layer-".concat(this.props.id),
|
|
51
58
|
data,
|
|
52
|
-
getQuadkey: d => d.id,
|
|
53
59
|
TilesetClass: QuadkeyTileset2D,
|
|
54
60
|
renderSubLayers,
|
|
55
61
|
maxZoom
|
|
@@ -57,5 +63,8 @@ export default class QuadkeyTileLayer extends CompositeLayer {
|
|
|
57
63
|
}
|
|
58
64
|
|
|
59
65
|
}
|
|
60
|
-
|
|
66
|
+
|
|
67
|
+
_defineProperty(QuadkeyTileLayer, "layerName", 'QuadkeyTileLayer');
|
|
68
|
+
|
|
69
|
+
_defineProperty(QuadkeyTileLayer, "defaultProps", defaultProps);
|
|
61
70
|
//# sourceMappingURL=quadkey-tile-layer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/layers/quadkey-tile-layer.
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadkey-tile-layer.ts"],"names":["CompositeLayer","QuadkeyLayer","QuadkeyTileset2D","SpatialIndexTileLayer","renderSubLayers","props","data","length","getQuadkey","d","id","defaultProps","aggregationResLevel","QuadkeyTileLayer","initializeState","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","maxZoom","parseInt","maxresolution","TilesetClass"],"mappings":";AAAA,SACEA,cADF,QAMO,eANP;AAOA,SAAQC,YAAR,QAA8C,qBAA9C;AACA,OAAOC,gBAAP,MAA6B,sBAA7B;AACA,OAAOC,qBAAP,MAAkC,4BAAlC;;AAEA,MAAMC,eAAe,GAAGC,KAAK,IAAI;AAC/B,QAAM;AAACC,IAAAA;AAAD,MAASD,KAAf;AACA,MAAI,CAACC,IAAD,IAAS,CAACA,IAAI,CAACC,MAAnB,EAA2B,OAAO,IAAP;AAC3B,SAAO,IAAIN,YAAJ,CAAiBI,KAAjB,EAAwB;AAACG,IAAAA,UAAU,EAAEC,CAAC,IAAIA,CAAC,CAACC;AAApB,GAAxB,CAAP;AACD,CAJD;;AAMA,MAAMC,YAAY,GAAG;AACnBC,EAAAA,mBAAmB,EAAE;AADF,CAArB;AAaA,eAAe,MAAMC,gBAAN,SAA6Db,cAA7D,CAEb;AAAA;AAAA;;AAAA;AAAA;;AAQAc,EAAAA,eAAe,GAAS;AACtB,SAAKC,QAAL,CAAc;AAACT,MAAAA,IAAI,EAAE,IAAP;AAAaU,MAAAA,QAAQ,EAAE;AAAvB,KAAd;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACC,IAAAA;AAAD,GAAD,EAA8C;AACvD,QAAIA,WAAW,CAACC,WAAhB,EAA6B;AAC3B,UAAI;AAACb,QAAAA;AAAD,UAAS,KAAKD,KAAlB;AACA,YAAMW,QAAQ,GAAGV,IAAjB;AACAA,MAAAA,IAAI,GAAIU,QAAD,CAAkBI,KAAzB;AACA,WAAKL,QAAL,CAAc;AAACT,QAAAA,IAAD;AAAOU,QAAAA;AAAP,OAAd;AACD;AACF;;AAEDK,EAAAA,YAAY,GAA8B;AACxC,UAAM;AAACf,MAAAA,IAAD;AAAOU,MAAAA;AAAP,QAAmB,KAAKM,KAA9B;AACA,UAAMC,OAAO,GAAGC,QAAQ,CAACR,QAAD,aAACA,QAAD,uBAACA,QAAQ,CAAES,aAAX,CAAxB;AACA,WAAO,CACL,IAAItB,qBAAJ,CAA0B,KAAKE,KAA/B,EAAsC;AACpCK,MAAAA,EAAE,+BAAwB,KAAKL,KAAL,CAAWK,EAAnC,CADkC;AAEpCJ,MAAAA,IAFoC;AAIpCoB,MAAAA,YAAY,EAAExB,gBAJsB;AAKpCE,MAAAA,eALoC;AAMpCmB,MAAAA;AANoC,KAAtC,CADK,CAAP;AAUD;;AAlCD;;gBAFmBV,gB,eAGA,kB;;gBAHAA,gB,kBAIGF,Y","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayersList,\n UpdateParameters\n} from '@deck.gl/core';\nimport {QuadkeyLayer, QuadkeyLayerProps} from '@deck.gl/geo-layers';\nimport QuadkeyTileset2D from './quadkey-tileset-2d';\nimport SpatialIndexTileLayer from './spatial-index-tile-layer';\n\nconst renderSubLayers = props => {\n const {data} = props;\n if (!data || !data.length) return null;\n return new QuadkeyLayer(props, {getQuadkey: d => d.id});\n};\n\nconst defaultProps = {\n aggregationResLevel: 6\n};\n\n/** All properties supported by QuadkeyTileLayer. */\nexport type QuadkeyTileLayerProps<DataT = any> = _QuadkeyTileLayerProps<DataT> &\n CompositeLayerProps<DataT>;\n\n/** Properties added by QuadkeyTileLayer. */\ntype _QuadkeyTileLayerProps<DataT> = QuadkeyLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class QuadkeyTileLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<\n ExtraProps & Required<_QuadkeyTileLayerProps<DataT>>\n> {\n static layerName = 'QuadkeyTileLayer';\n static defaultProps = defaultProps;\n\n state!: {\n tileJSON: any;\n data: any;\n };\n initializeState(): void {\n this.setState({data: null, tileJSON: null});\n }\n\n updateState({changeFlags}: UpdateParameters<this>): void {\n if (changeFlags.dataChanged) {\n let {data} = this.props;\n const tileJSON = data;\n data = (tileJSON as any).tiles;\n this.setState({data, tileJSON});\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n const {data, tileJSON} = this.state;\n const maxZoom = parseInt(tileJSON?.maxresolution);\n return [\n new SpatialIndexTileLayer(this.props, {\n id: `quadkey-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadkeyTileset2D as any,\n renderSubLayers,\n maxZoom\n })\n ];\n }\n}\n"],"file":"quadkey-tile-layer.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/layers/quadkey-tileset-2d.
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadkey-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","tileToQuadkey","tile","index","z","b","mask","x","y","toString","i","QuadkeyTileset2D","getTileIndices","opts","map","getTileId","getTileMetadata","getTileZoom","length","getParentIndex","slice"],"mappings":"AAAA,SAAQA,UAAU,IAAIC,SAAtB,QAAsC,qBAAtC;;AAGA,SAASC,aAAT,CAAuBC,IAAvB,EAA+C;AAC7C,MAAIC,KAAK,GAAG,EAAZ;;AACA,OAAK,IAAIC,CAAC,GAAGF,IAAI,CAACE,CAAlB,EAAqBA,CAAC,GAAG,CAAzB,EAA4BA,CAAC,EAA7B,EAAiC;AAC/B,QAAIC,CAAC,GAAG,CAAR;AACA,UAAMC,IAAI,GAAG,KAAMF,CAAC,GAAG,CAAvB;AACA,QAAI,CAACF,IAAI,CAACK,CAAL,GAASD,IAAV,MAAoB,CAAxB,EAA2BD,CAAC;AAC5B,QAAI,CAACH,IAAI,CAACM,CAAL,GAASF,IAAV,MAAoB,CAAxB,EAA2BD,CAAC,IAAI,CAAL;AAC3BF,IAAAA,KAAK,IAAIE,CAAC,CAACI,QAAF,EAAT;AACD;;AACD,SAAO;AAACC,IAAAA,CAAC,EAAEP;AAAJ,GAAP;AACD;;AAED,eAAe,MAAMQ,gBAAN,SAA+BX,SAA/B,CAAyC;AAEtDY,EAAAA,cAAc,CAACC,IAAD,EAA2B;AACvC,WAAO,MAAMD,cAAN,CAAqBC,IAArB,EAA2BC,GAA3B,CAA+Bb,aAA/B,CAAP;AACD;;AAGDc,EAAAA,SAAS,CAAC;AAACL,IAAAA;AAAD,GAAD,EAAwB;AAC/B,WAAOA,CAAP;AACD;;AAEDM,EAAAA,eAAe,GAAG;AAChB,WAAO,EAAP;AACD;;AAGDC,EAAAA,WAAW,CAAC;AAACP,IAAAA;AAAD,GAAD,EAAwB;AACjC,WAAOA,CAAC,CAACQ,MAAT;AACD;;AAGDC,EAAAA,cAAc,CAAChB,KAAD,EAA0B;AACtC,UAAMO,CAAC,GAAGP,KAAK,CAACO,CAAN,CAAQU,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;AACA,WAAO;AAACV,MAAAA;AAAD,KAAP;AACD;;AAxBqD","sourcesContent":["import {_Tileset2D as Tileset2D} from '@deck.gl/geo-layers';\n\ntype QuadkeyTileIndex = {i: string};\nfunction tileToQuadkey(tile): QuadkeyTileIndex {\n let index = '';\n for (let z = tile.z; z > 0; z--) {\n let b = 0;\n const mask = 1 << (z - 1);\n if ((tile.x & mask) !== 0) b++;\n if ((tile.y & mask) !== 0) b += 2;\n index += b.toString();\n }\n return {i: index};\n}\n\nexport default class QuadkeyTileset2D extends Tileset2D {\n // @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT\n getTileIndices(opts): QuadkeyTileIndex[] {\n return super.getTileIndices(opts).map(tileToQuadkey);\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileId({i}: QuadkeyTileIndex) {\n return i;\n }\n\n getTileMetadata() {\n return {};\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileZoom({i}: QuadkeyTileIndex) {\n return i.length;\n }\n\n // @ts-expect-error TileIndex must be generic\n getParentIndex(index: QuadkeyTileIndex) {\n const i = index.i.slice(0, -1);\n return {i};\n }\n}\n"],"file":"quadkey-tileset-2d.js"}
|