@deck.gl/carto 8.8.0-beta.3 → 8.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +2298 -1182
- package/dist/es5/api/index.js +0 -6
- package/dist/es5/api/index.js.map +1 -1
- package/dist/es5/api/maps-v3-client.js +44 -86
- package/dist/es5/api/maps-v3-client.js.map +1 -1
- package/dist/es5/index.js +23 -9
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/layers/carto-layer.js +14 -19
- package/dist/es5/layers/carto-layer.js.map +1 -1
- package/dist/es5/layers/h3-tile-layer.js +28 -3
- package/dist/es5/layers/h3-tile-layer.js.map +1 -1
- package/dist/es5/layers/h3-tileset-2d.js +19 -13
- package/dist/es5/layers/h3-tileset-2d.js.map +1 -1
- package/dist/es5/layers/quadbin-layer.js +71 -0
- package/dist/es5/layers/quadbin-layer.js.map +1 -0
- package/dist/es5/layers/{quadkey-tile-layer.js → quadbin-tile-layer.js} +17 -17
- package/dist/es5/layers/quadbin-tile-layer.js.map +1 -0
- package/dist/es5/layers/{quadkey-tileset-2d.js → quadbin-tileset-2d.js} +25 -57
- package/dist/es5/layers/quadbin-tileset-2d.js.map +1 -0
- package/dist/es5/layers/quadbin-utils.js +122 -0
- package/dist/es5/layers/quadbin-utils.js.map +1 -0
- package/dist/esm/api/index.js +1 -1
- package/dist/esm/api/index.js.map +1 -1
- package/dist/esm/api/maps-v3-client.js +0 -24
- package/dist/esm/api/maps-v3-client.js.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/layers/carto-layer.js +12 -17
- package/dist/esm/layers/carto-layer.js.map +1 -1
- package/dist/esm/layers/h3-tile-layer.js +22 -3
- package/dist/esm/layers/h3-tile-layer.js.map +1 -1
- package/dist/esm/layers/h3-tileset-2d.js +20 -16
- package/dist/esm/layers/h3-tileset-2d.js.map +1 -1
- package/dist/esm/layers/quadbin-layer.js +29 -0
- package/dist/esm/layers/quadbin-layer.js.map +1 -0
- package/dist/esm/layers/{quadkey-tile-layer.js → quadbin-tile-layer.js} +10 -10
- package/dist/esm/layers/quadbin-tile-layer.js.map +1 -0
- package/dist/esm/layers/quadbin-tileset-2d.js +37 -0
- package/dist/esm/layers/quadbin-tileset-2d.js.map +1 -0
- package/dist/esm/layers/quadbin-utils.js +88 -0
- package/dist/esm/layers/quadbin-utils.js.map +1 -0
- package/dist.min.js +138 -138
- package/package.json +2 -2
- package/src/api/index.ts +1 -1
- package/src/api/maps-v3-client.ts +0 -24
- package/src/index.ts +6 -2
- package/src/layers/carto-layer.ts +22 -37
- package/src/layers/h3-tile-layer.ts +25 -3
- package/src/layers/h3-tileset-2d.ts +20 -10
- package/src/layers/quadbin-layer.ts +43 -0
- package/src/layers/{quadkey-tile-layer.ts → quadbin-tile-layer.ts} +15 -13
- package/src/layers/quadbin-tileset-2d.ts +34 -0
- package/src/layers/quadbin-utils.ts +102 -0
- package/typed/api/index.d.ts +1 -1
- package/typed/api/index.d.ts.map +1 -1
- package/typed/api/index.js +3 -0
- package/typed/api/layer-map.js +264 -0
- package/typed/api/maps-api-common.js +50 -0
- package/typed/api/maps-client.js +125 -0
- package/typed/api/maps-v3-client.d.ts +0 -1
- package/typed/api/maps-v3-client.d.ts.map +1 -1
- package/typed/api/maps-v3-client.js +304 -0
- package/typed/api/parseMap.js +178 -0
- package/typed/basemap.js +9 -0
- package/typed/config.js +35 -0
- package/typed/index.d.ts +3 -2
- package/typed/index.d.ts.map +1 -1
- package/typed/index.js +10 -0
- package/typed/layers/carto-layer.d.ts +4 -12
- package/typed/layers/carto-layer.d.ts.map +1 -1
- package/typed/layers/carto-layer.js +173 -0
- package/typed/layers/carto-tile-layer.js +105 -0
- package/typed/layers/h3-tile-layer.d.ts.map +1 -1
- package/typed/layers/h3-tile-layer.js +47 -0
- package/typed/layers/h3-tileset-2d.d.ts +6 -0
- package/typed/layers/h3-tileset-2d.d.ts.map +1 -1
- package/typed/layers/h3-tileset-2d.js +85 -0
- package/typed/layers/quadbin-layer.d.ts +20 -0
- package/typed/layers/quadbin-layer.d.ts.map +1 -0
- package/typed/layers/quadbin-tile-layer.d.ts +21 -0
- package/typed/layers/quadbin-tile-layer.d.ts.map +1 -0
- package/typed/layers/quadbin-tileset-2d.d.ts +13 -0
- package/typed/layers/quadbin-tileset-2d.d.ts.map +1 -0
- package/typed/layers/quadbin-utils.d.ts +11 -0
- package/typed/layers/quadbin-utils.d.ts.map +1 -0
- package/typed/layers/quadkey-tile-layer.js +42 -0
- package/typed/layers/quadkey-tileset-2d.js +36 -0
- package/typed/layers/schema/carto-tile.js +161 -0
- package/typed/layers/spatial-index-tile-layer.js +40 -0
- package/typed/style/color-bins-style.js +12 -0
- package/typed/style/color-categories-style.js +16 -0
- package/typed/style/color-continuous-style.js +12 -0
- package/typed/style/palette.js +62 -0
- package/typed/style/utils.js +15 -0
- package/typed/utils.js +4 -0
- package/dist/es5/layers/quadkey-tile-layer.js.map +0 -1
- package/dist/es5/layers/quadkey-tileset-2d.js.map +0 -1
- package/dist/esm/layers/quadkey-tile-layer.js.map +0 -1
- package/dist/esm/layers/quadkey-tileset-2d.js +0 -71
- package/dist/esm/layers/quadkey-tileset-2d.js.map +0 -1
- package/src/layers/quadkey-tileset-2d.ts +0 -59
|
@@ -7,18 +7,24 @@ function getHexagonsInBoundingBox({
|
|
|
7
7
|
east,
|
|
8
8
|
south
|
|
9
9
|
}, resolution) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
const longitudeSpan = Math.abs(east - west);
|
|
11
|
+
|
|
12
|
+
if (longitudeSpan > 180) {
|
|
13
|
+
const nSegments = Math.ceil(longitudeSpan / 180);
|
|
14
|
+
let h3Indices = [];
|
|
15
|
+
|
|
16
|
+
for (let s = 0; s < nSegments; s++) {
|
|
17
|
+
const segmentEast = east + s * 180;
|
|
18
|
+
const segmentWest = Math.min(segmentEast + 179.9999999, west);
|
|
19
|
+
h3Indices = h3Indices.concat(getHexagonsInBoundingBox({
|
|
20
|
+
west: segmentWest,
|
|
21
|
+
north,
|
|
22
|
+
east: segmentEast,
|
|
23
|
+
south
|
|
24
|
+
}, resolution));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return [...new Set(h3Indices)];
|
|
22
28
|
}
|
|
23
29
|
|
|
24
30
|
const oversample = 2;
|
|
@@ -43,13 +49,11 @@ function tileToBoundingBox(index) {
|
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
const BIAS = 2;
|
|
46
|
-
|
|
47
|
-
function getHexagonResolution(viewport) {
|
|
52
|
+
export function getHexagonResolution(viewport) {
|
|
48
53
|
const hexagonScaleFactor = 2 / 3 * viewport.zoom;
|
|
49
54
|
const latitudeScaleFactor = Math.log(1 / Math.cos(Math.PI * viewport.latitude / 180));
|
|
50
55
|
return Math.max(0, Math.floor(hexagonScaleFactor + latitudeScaleFactor - BIAS));
|
|
51
56
|
}
|
|
52
|
-
|
|
53
57
|
export default class H3Tileset2D extends Tileset2D {
|
|
54
58
|
getTileIndices({
|
|
55
59
|
viewport,
|
|
@@ -61,7 +65,7 @@ export default class H3Tileset2D extends Tileset2D {
|
|
|
61
65
|
let indices;
|
|
62
66
|
|
|
63
67
|
if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {
|
|
64
|
-
|
|
68
|
+
return [];
|
|
65
69
|
}
|
|
66
70
|
|
|
67
71
|
if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/layers/h3-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","polyfill","geoToH3","h3GetResolution","h3ToGeoBoundary","h3ToParent","kRing","getHexagonsInBoundingBox","west","north","east","south","resolution","Math","abs","
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/h3-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","polyfill","geoToH3","h3GetResolution","h3ToGeoBoundary","h3ToParent","kRing","getHexagonsInBoundingBox","west","north","east","south","resolution","longitudeSpan","Math","abs","nSegments","ceil","h3Indices","s","segmentEast","segmentWest","min","concat","Set","oversample","map","i","tileToBoundingBox","index","coordinates","latitudes","c","longitudes","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 {polyfill, geoToH3, h3GetResolution, h3ToGeoBoundary, h3ToParent, kRing} from 'h3-js';\n\nexport type H3TileIndex = {i: string};\n\nfunction getHexagonsInBoundingBox(\n {west, north, east, south}: GeoBoundingBox,\n resolution: number\n): string[] {\n const longitudeSpan = Math.abs(east - west);\n if (longitudeSpan > 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 const nSegments = Math.ceil(longitudeSpan / 180);\n let h3Indices: string[] = [];\n for (let s = 0; s < nSegments; s++) {\n const segmentEast = east + s * 180;\n const segmentWest = Math.min(segmentEast + 179.9999999, west);\n h3Indices = h3Indices.concat(\n getHexagonsInBoundingBox({west: segmentWest, north, east: segmentEast, south}, resolution)\n );\n }\n return [...new Set(h3Indices)];\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;\nexport function 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 /**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\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 // TODO support `extent` prop\n return [];\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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { _GeoCellLayer as GeoCellLayer } from '@deck.gl/geo-layers';
|
|
3
|
+
import { getQuadbinPolygon } from './quadbin-utils';
|
|
4
|
+
const defaultProps = {
|
|
5
|
+
getQuadbin: {
|
|
6
|
+
type: 'accessor',
|
|
7
|
+
value: d => d.quadbin
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
export default class QuadbinLayer extends GeoCellLayer {
|
|
11
|
+
indexToBounds() {
|
|
12
|
+
const {
|
|
13
|
+
data,
|
|
14
|
+
getQuadbin
|
|
15
|
+
} = this.props;
|
|
16
|
+
return {
|
|
17
|
+
data,
|
|
18
|
+
_normalize: false,
|
|
19
|
+
positionFormat: 'XY',
|
|
20
|
+
getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo))
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
_defineProperty(QuadbinLayer, "layerName", 'QuadbinLayer');
|
|
27
|
+
|
|
28
|
+
_defineProperty(QuadbinLayer, "defaultProps", defaultProps);
|
|
29
|
+
//# sourceMappingURL=quadbin-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadbin-layer.ts"],"names":["_GeoCellLayer","GeoCellLayer","getQuadbinPolygon","defaultProps","getQuadbin","type","value","d","quadbin","QuadbinLayer","indexToBounds","data","props","_normalize","positionFormat","getPolygon","x","objectInfo"],"mappings":";AACA,SACEA,aAAa,IAAIC,YADnB,QAGO,qBAHP;AAIA,SAAQC,iBAAR,QAAgC,iBAAhC;AAEA,MAAMC,YAA6C,GAAG;AACpDC,EAAAA,UAAU,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEC,CAAC,IAAIA,CAAC,CAACC;AAAjC;AADwC,CAAtD;AAiBA,eAAe,MAAMC,YAAN,SAAyDR,YAAzD,CAGb;AAIAS,EAAAA,aAAa,GAA0C;AACrD,UAAM;AAACC,MAAAA,IAAD;AAAOP,MAAAA;AAAP,QAAqB,KAAKQ,KAAhC;AAEA,WAAO;AACLD,MAAAA,IADK;AAELE,MAAAA,UAAU,EAAE,KAFP;AAGLC,MAAAA,cAAc,EAAE,IAHX;AAKLC,MAAAA,UAAU,EAAE,CAACC,CAAD,EAAWC,UAAX,KAA0Bf,iBAAiB,CAACE,UAAU,CAACY,CAAD,EAAIC,UAAJ,CAAX;AALlD,KAAP;AAOD;;AAdD;;gBAHmBR,Y,eAIA,c;;gBAJAA,Y,kBAKGN,Y","sourcesContent":["import {AccessorFunction, DefaultProps} from '@deck.gl/core';\nimport {\n _GeoCellLayer as GeoCellLayer,\n _GeoCellLayerProps as GeoCellLayerProps\n} from '@deck.gl/geo-layers';\nimport {getQuadbinPolygon} from './quadbin-utils';\n\nconst defaultProps: DefaultProps<QuadbinLayerProps> = {\n getQuadbin: {type: 'accessor', value: d => d.quadbin}\n};\n\n/** All properties supported by QuadbinLayer. */\nexport type QuadbinLayerProps<DataT = any> = _QuadbinLayerProps<DataT> & GeoCellLayerProps<DataT>;\n\n/** Properties added by QuadbinLayer. */\ntype _QuadbinLayerProps<DataT> = {\n /**\n * Called for each data object to retrieve the quadbin string identifier.\n *\n * By default, it reads `quadbin` property of data object.\n */\n getQuadbin?: AccessorFunction<DataT, string>;\n};\n\nexport default class QuadbinLayer<DataT = any, ExtraProps = {}> extends GeoCellLayer<\n DataT,\n Required<_QuadbinLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'QuadbinLayer';\n static defaultProps = defaultProps;\n\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n const {data, getQuadbin} = this.props;\n\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n\n getPolygon: (x: DataT, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo))\n };\n }\n}\n"],"file":"quadbin-layer.js"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import { CompositeLayer } from '@deck.gl/core';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import QuadbinLayer from './quadbin-layer';
|
|
4
|
+
import QuadbinTileset2D from './quadbin-tileset-2d';
|
|
5
5
|
import SpatialIndexTileLayer from './spatial-index-tile-layer';
|
|
6
6
|
|
|
7
7
|
const renderSubLayers = props => {
|
|
@@ -9,15 +9,15 @@ const renderSubLayers = props => {
|
|
|
9
9
|
data
|
|
10
10
|
} = props;
|
|
11
11
|
if (!data || !data.length) return null;
|
|
12
|
-
return new
|
|
13
|
-
|
|
12
|
+
return new QuadbinLayer(props, {
|
|
13
|
+
getQuadbin: d => d.id
|
|
14
14
|
});
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
const defaultProps = {
|
|
18
18
|
aggregationResLevel: 6
|
|
19
19
|
};
|
|
20
|
-
export default class
|
|
20
|
+
export default class QuadbinTileLayer extends CompositeLayer {
|
|
21
21
|
constructor(...args) {
|
|
22
22
|
super(...args);
|
|
23
23
|
|
|
@@ -54,9 +54,9 @@ export default class QuadkeyTileLayer extends CompositeLayer {
|
|
|
54
54
|
} = this.state;
|
|
55
55
|
const maxZoom = parseInt(tileJSON === null || tileJSON === void 0 ? void 0 : tileJSON.maxresolution);
|
|
56
56
|
return [new SpatialIndexTileLayer(this.props, {
|
|
57
|
-
id: "
|
|
57
|
+
id: "quadbin-tile-layer-".concat(this.props.id),
|
|
58
58
|
data,
|
|
59
|
-
TilesetClass:
|
|
59
|
+
TilesetClass: QuadbinTileset2D,
|
|
60
60
|
renderSubLayers,
|
|
61
61
|
maxZoom
|
|
62
62
|
})];
|
|
@@ -64,7 +64,7 @@ export default class QuadkeyTileLayer extends CompositeLayer {
|
|
|
64
64
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
_defineProperty(
|
|
67
|
+
_defineProperty(QuadbinTileLayer, "layerName", 'QuadbinTileLayer');
|
|
68
68
|
|
|
69
|
-
_defineProperty(
|
|
70
|
-
//# sourceMappingURL=
|
|
69
|
+
_defineProperty(QuadbinTileLayer, "defaultProps", defaultProps);
|
|
70
|
+
//# sourceMappingURL=quadbin-tile-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadbin-tile-layer.ts"],"names":["CompositeLayer","QuadbinLayer","QuadbinTileset2D","SpatialIndexTileLayer","renderSubLayers","props","data","length","getQuadbin","d","id","defaultProps","aggregationResLevel","QuadbinTileLayer","initializeState","setState","tileJSON","updateState","changeFlags","dataChanged","tiles","renderLayers","state","maxZoom","parseInt","maxresolution","TilesetClass"],"mappings":";AAAA,SACEA,cADF,QAOO,eAPP;AAQA,OAAOC,YAAP,MAA8C,iBAA9C;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;AAC7BG,IAAAA,UAAU,EAAEC,CAAC,IAAIA,CAAC,CAACC;AADU,GAAxB,CAAP;AAGD,CAND;;AAQA,MAAMC,YAAiD,GAAG;AACxDC,EAAAA,mBAAmB,EAAE;AADmC,CAA1D;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 DefaultProps\n} from '@deck.gl/core';\nimport QuadbinLayer, {QuadbinLayerProps} from './quadbin-layer';\nimport QuadbinTileset2D from './quadbin-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 QuadbinLayer(props, {\n getQuadbin: d => d.id\n });\n};\n\nconst defaultProps: DefaultProps<QuadbinTileLayerProps> = {\n aggregationResLevel: 6\n};\n\n/** All properties supported by QuadbinTileLayer. */\nexport type QuadbinTileLayerProps<DataT = any> = _QuadbinTileLayerProps<DataT> &\n CompositeLayerProps<DataT>;\n\n/** Properties added by QuadbinTileLayer. */\ntype _QuadbinTileLayerProps<DataT> = QuadbinLayerProps<DataT> & {\n aggregationResLevel?: number;\n};\n\nexport default class QuadbinTileLayer<DataT = any, ExtraProps = {}> extends CompositeLayer<\n ExtraProps & Required<_QuadbinTileLayerProps<DataT>>\n> {\n static layerName = 'QuadbinTileLayer';\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: `quadbin-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D as any,\n renderSubLayers,\n maxZoom\n })\n ];\n }\n}\n"],"file":"quadbin-tile-layer.js"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';
|
|
2
|
+
import { tileToQuadbin, quadbinToTile, quadbinParent, quadbinZoom } from './quadbin-utils';
|
|
3
|
+
export default class QuadbinTileset2D extends Tileset2D {
|
|
4
|
+
getTileIndices(opts) {
|
|
5
|
+
return super.getTileIndices(opts).map(tileToQuadbin).map(i => ({
|
|
6
|
+
i
|
|
7
|
+
}));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
getTileId({
|
|
11
|
+
i
|
|
12
|
+
}) {
|
|
13
|
+
return i;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getTileMetadata({
|
|
17
|
+
i
|
|
18
|
+
}) {
|
|
19
|
+
return super.getTileMetadata(quadbinToTile(i));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getTileZoom({
|
|
23
|
+
i
|
|
24
|
+
}) {
|
|
25
|
+
return Number(quadbinZoom(i));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getParentIndex({
|
|
29
|
+
i
|
|
30
|
+
}) {
|
|
31
|
+
return {
|
|
32
|
+
i: quadbinParent(i)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=quadbin-tileset-2d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadbin-tileset-2d.ts"],"names":["_Tileset2D","Tileset2D","tileToQuadbin","quadbinToTile","quadbinParent","quadbinZoom","QuadbinTileset2D","getTileIndices","opts","map","i","getTileId","getTileMetadata","getTileZoom","Number","getParentIndex"],"mappings":"AAAA,SAAQA,UAAU,IAAIC,SAAtB,QAAsC,qBAAtC;AACA,SAAQC,aAAR,EAAuBC,aAAvB,EAAsCC,aAAtC,EAAqDC,WAArD,QAAuE,iBAAvE;AAIA,eAAe,MAAMC,gBAAN,SAA+BL,SAA/B,CAAyC;AAEtDM,EAAAA,cAAc,CAACC,IAAD,EAA2B;AACvC,WAAO,MACJD,cADI,CACWC,IADX,EAEJC,GAFI,CAEAP,aAFA,EAGJO,GAHI,CAGAC,CAAC,KAAK;AAACA,MAAAA;AAAD,KAAL,CAHD,CAAP;AAID;;AAGDC,EAAAA,SAAS,CAAC;AAACD,IAAAA;AAAD,GAAD,EAAgC;AACvC,WAAOA,CAAP;AACD;;AAGDE,EAAAA,eAAe,CAAC;AAACF,IAAAA;AAAD,GAAD,EAAwB;AACrC,WAAO,MAAME,eAAN,CAAsBT,aAAa,CAACO,CAAD,CAAnC,CAAP;AACD;;AAGDG,EAAAA,WAAW,CAAC;AAACH,IAAAA;AAAD,GAAD,EAAgC;AACzC,WAAOI,MAAM,CAACT,WAAW,CAACK,CAAD,CAAZ,CAAb;AACD;;AAGDK,EAAAA,cAAc,CAAC;AAACL,IAAAA;AAAD,GAAD,EAA0C;AACtD,WAAO;AAACA,MAAAA,CAAC,EAAEN,aAAa,CAACM,CAAD;AAAjB,KAAP;AACD;;AA3BqD","sourcesContent":["import {_Tileset2D as Tileset2D} from '@deck.gl/geo-layers';\nimport {tileToQuadbin, quadbinToTile, quadbinParent, quadbinZoom} from './quadbin-utils';\n\ntype QuadbinTileIndex = {i: string};\n\nexport default class QuadbinTileset2D extends Tileset2D {\n // @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT\n getTileIndices(opts): QuadbinTileIndex[] {\n return super\n .getTileIndices(opts)\n .map(tileToQuadbin)\n .map(i => ({i}));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileId({i}: QuadbinTileIndex): string {\n return i;\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileMetadata({i}: QuadbinTileIndex) {\n return super.getTileMetadata(quadbinToTile(i));\n }\n\n // @ts-expect-error TileIndex must be generic\n getTileZoom({i}: QuadbinTileIndex): number {\n return Number(quadbinZoom(i));\n }\n\n // @ts-expect-error TileIndex must be generic\n getParentIndex({i}: QuadbinTileIndex): QuadbinTileIndex {\n return {i: quadbinParent(i)};\n }\n}\n"],"file":"quadbin-tileset-2d.js"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { worldToLngLat } from '@math.gl/web-mercator';
|
|
2
|
+
const TILE_SIZE = 512;
|
|
3
|
+
const B = [0x5555555555555555n, 0x3333333333333333n, 0x0f0f0f0f0f0f0f0fn, 0x00ff00ff00ff00ffn, 0x0000ffff0000ffffn, 0x00000000ffffffffn];
|
|
4
|
+
const S = [0n, 1n, 2n, 4n, 8n, 16n];
|
|
5
|
+
|
|
6
|
+
function indexToBigInt(index) {
|
|
7
|
+
return BigInt("0x".concat(index));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function bigIntToIndex(quadbin) {
|
|
11
|
+
return quadbin.toString(16);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function tileToQuadbin(tile) {
|
|
15
|
+
if (tile.z < 0 || tile.z > 26) {
|
|
16
|
+
throw new Error('Wrong zoom');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const z = BigInt(tile.z);
|
|
20
|
+
let x = BigInt(tile.x) << 32n - z;
|
|
21
|
+
let y = BigInt(tile.y) << 32n - z;
|
|
22
|
+
|
|
23
|
+
for (let i = 0; i < 5; i++) {
|
|
24
|
+
const s = S[5 - i];
|
|
25
|
+
const b = B[4 - i];
|
|
26
|
+
x = (x | x << s) & b;
|
|
27
|
+
y = (y | y << s) & b;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const quadbin = 0x4000000000000000n | 1n << 59n | z << 52n | (x | y << 1n) >> 12n | 0xfffffffffffffn >> z * 2n;
|
|
31
|
+
return bigIntToIndex(quadbin);
|
|
32
|
+
}
|
|
33
|
+
export function quadbinToTile(index) {
|
|
34
|
+
const quadbin = indexToBigInt(index);
|
|
35
|
+
const mode = quadbin >> 59n & 7n;
|
|
36
|
+
const modeDep = quadbin >> 57n & 3n;
|
|
37
|
+
const z = quadbin >> 52n & 0x1fn;
|
|
38
|
+
const q = (quadbin & 0xfffffffffffffn) << 12n;
|
|
39
|
+
|
|
40
|
+
if (mode !== 1n && modeDep !== 0n) {
|
|
41
|
+
throw new Error('Wrong mode');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let x = q;
|
|
45
|
+
let y = q >> 1n;
|
|
46
|
+
|
|
47
|
+
for (let i = 0; i < 6; i++) {
|
|
48
|
+
const s = S[i];
|
|
49
|
+
const b = B[i];
|
|
50
|
+
x = (x | x >> s) & b;
|
|
51
|
+
y = (y | y >> s) & b;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
x = x >> 32n - z;
|
|
55
|
+
y = y >> 32n - z;
|
|
56
|
+
return {
|
|
57
|
+
z: Number(z),
|
|
58
|
+
x: Number(x),
|
|
59
|
+
y: Number(y)
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function quadbinZoom(index) {
|
|
63
|
+
const quadbin = indexToBigInt(index);
|
|
64
|
+
return quadbin >> 52n & 0x1fn;
|
|
65
|
+
}
|
|
66
|
+
export function quadbinParent(index) {
|
|
67
|
+
const quadbin = indexToBigInt(index);
|
|
68
|
+
const zparent = quadbinZoom(index) - 1n;
|
|
69
|
+
const parent = quadbin & ~(0x1fn << 52n) | zparent << 52n | 0xfffffffffffffn >> zparent * 2n;
|
|
70
|
+
return bigIntToIndex(parent);
|
|
71
|
+
}
|
|
72
|
+
export function quadbinToWorldBounds(quadbin) {
|
|
73
|
+
const {
|
|
74
|
+
x,
|
|
75
|
+
y,
|
|
76
|
+
z
|
|
77
|
+
} = quadbinToTile(quadbin);
|
|
78
|
+
const mask = 1 << z;
|
|
79
|
+
const scale = mask / TILE_SIZE;
|
|
80
|
+
return [[x / scale, TILE_SIZE - y / scale], [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]];
|
|
81
|
+
}
|
|
82
|
+
export function getQuadbinPolygon(quadbin) {
|
|
83
|
+
const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin);
|
|
84
|
+
const [w, n] = worldToLngLat(topLeft);
|
|
85
|
+
const [e, s] = worldToLngLat(bottomRight);
|
|
86
|
+
return [e, n, e, s, w, s, w, n, e, n];
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=quadbin-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/layers/quadbin-utils.ts"],"names":["worldToLngLat","TILE_SIZE","B","S","indexToBigInt","index","BigInt","bigIntToIndex","quadbin","toString","tileToQuadbin","tile","z","Error","x","y","i","s","b","quadbinToTile","mode","modeDep","q","Number","quadbinZoom","quadbinParent","zparent","parent","quadbinToWorldBounds","mask","scale","getQuadbinPolygon","topLeft","bottomRight","w","n","e"],"mappings":"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","sourcesContent":["import {worldToLngLat} from '@math.gl/web-mercator';\n\nconst TILE_SIZE = 512;\n\nconst B = [\n 0x5555555555555555n,\n 0x3333333333333333n,\n 0x0f0f0f0f0f0f0f0fn,\n 0x00ff00ff00ff00ffn,\n 0x0000ffff0000ffffn,\n 0x00000000ffffffffn\n];\nconst S = [0n, 1n, 2n, 4n, 8n, 16n];\n\nfunction indexToBigInt(index: string): bigint {\n return BigInt(`0x${index}`);\n}\n\nfunction bigIntToIndex(quadbin: bigint): string {\n return quadbin.toString(16);\n}\n\nexport function tileToQuadbin(tile): string {\n if (tile.z < 0 || tile.z > 26) {\n throw new Error('Wrong zoom');\n }\n const z = BigInt(tile.z);\n let x = BigInt(tile.x) << (32n - z);\n let y = BigInt(tile.y) << (32n - z);\n\n for (let i = 0; i < 5; i++) {\n const s = S[5 - i];\n const b = B[4 - i];\n x = (x | (x << s)) & b;\n y = (y | (y << s)) & b;\n }\n\n const quadbin =\n 0x4000000000000000n |\n (1n << 59n) | // | (mode << 59) | (mode_dep << 57)\n (z << 52n) |\n ((x | (y << 1n)) >> 12n) |\n (0xfffffffffffffn >> (z * 2n));\n return bigIntToIndex(quadbin);\n}\n\nexport function quadbinToTile(index: string) {\n const quadbin = indexToBigInt(index);\n const mode = (quadbin >> 59n) & 7n;\n const modeDep = (quadbin >> 57n) & 3n;\n const z = (quadbin >> 52n) & 0x1fn;\n const q = (quadbin & 0xfffffffffffffn) << 12n;\n\n if (mode !== 1n && modeDep !== 0n) {\n throw new Error('Wrong mode');\n }\n\n let x = q;\n let y = q >> 1n;\n\n for (let i = 0; i < 6; i++) {\n const s = S[i];\n const b = B[i];\n x = (x | (x >> s)) & b;\n y = (y | (y >> s)) & b;\n }\n\n x = x >> (32n - z);\n y = y >> (32n - z);\n\n return {z: Number(z), x: Number(x), y: Number(y)};\n}\n\nexport function quadbinZoom(index: string) {\n const quadbin = indexToBigInt(index);\n return (quadbin >> 52n) & 0x1fn;\n}\n\nexport function quadbinParent(index: string) {\n const quadbin = indexToBigInt(index);\n const zparent = quadbinZoom(index) - 1n;\n const parent =\n (quadbin & ~(0x1fn << 52n)) | (zparent << 52n) | (0xfffffffffffffn >> (zparent * 2n));\n return bigIntToIndex(parent);\n}\n\nexport function quadbinToWorldBounds(quadbin: string): [number[], number[]] {\n const {x, y, z} = quadbinToTile(quadbin);\n const mask = 1 << z;\n const scale = mask / TILE_SIZE;\n return [\n [x / scale, TILE_SIZE - y / scale],\n [(x + 0.99) / scale, TILE_SIZE - (y + 0.99) / scale]\n ];\n}\n\nexport function getQuadbinPolygon(quadbin: string): number[] {\n const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin);\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":"quadbin-utils.js"}
|