@deck.gl/carto 9.0.0-beta.2 → 9.0.0-beta.3
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/api/carto-api-error.js +47 -0
- package/dist/{esm/api → api}/common.js +4 -5
- package/dist/api/endpoints.js +22 -0
- package/dist/api/fetch-map.js +187 -0
- package/dist/api/index.js +3 -0
- package/dist/api/layer-map.js +373 -0
- package/dist/api/parse-map.js +250 -0
- package/dist/api/query.js +24 -0
- package/dist/api/request-with-parameters.js +53 -0
- package/dist/api/types.js +12 -0
- package/dist/basemap.js +9 -0
- package/dist/cartoRasterTile-worker.js +2 -2
- package/dist/cartoSpatialTile-worker.js +7 -7
- package/dist/cartoVectorTile-worker.js +3 -3
- package/dist/dist.dev.js +1226 -1077
- package/dist/index.cjs +2685 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +37 -0
- package/{typed → dist}/index.d.ts.map +1 -1
- package/dist/index.js +34 -0
- package/dist/layers/h3-tile-layer.js +64 -0
- package/dist/layers/h3-tileset-2d.js +99 -0
- package/dist/layers/point-label-layer.js +150 -0
- package/dist/layers/quadbin-layer.js +21 -0
- package/dist/layers/quadbin-tile-layer.js +47 -0
- package/dist/layers/quadbin-tileset-2d.js +27 -0
- package/dist/layers/quadbin-utils.js +21 -0
- package/dist/{esm/layers → layers}/raster-layer-vertex.glsl.js +0 -1
- package/dist/layers/raster-layer.js +97 -0
- package/dist/layers/raster-tile-layer.js +43 -0
- package/dist/layers/schema/carto-properties-tile-loader.js +21 -0
- package/dist/layers/schema/carto-properties-tile.js +14 -0
- package/dist/layers/schema/carto-raster-tile-loader.js +36 -0
- package/dist/layers/schema/carto-raster-tile.js +46 -0
- package/dist/layers/schema/carto-spatial-tile-loader.js +35 -0
- package/dist/layers/schema/carto-spatial-tile.js +38 -0
- package/dist/layers/schema/carto-tile.js +187 -0
- package/dist/layers/schema/carto-vector-tile-loader.js +65 -0
- package/dist/layers/schema/fast-pbf.js +7 -0
- package/dist/layers/schema/spatialjson-utils.js +15 -0
- package/dist/layers/schema/tile-loader-utils.js +6 -0
- package/{typed → dist}/layers/spatial-index-tile-layer.d.ts +1 -1
- package/{typed → dist}/layers/spatial-index-tile-layer.d.ts.map +1 -1
- package/dist/layers/spatial-index-tile-layer.js +64 -0
- package/dist/layers/utils.js +74 -0
- package/dist/layers/vector-tile-layer.js +98 -0
- package/dist/sources/base-source.js +52 -0
- package/{typed → dist}/sources/boundary-query-source.d.ts +1 -1
- package/{typed → dist}/sources/boundary-query-source.d.ts.map +1 -1
- package/dist/sources/boundary-query-source.js +13 -0
- package/dist/sources/boundary-table-source.js +13 -0
- package/dist/sources/h3-query-source.js +18 -0
- package/dist/sources/h3-table-source.js +18 -0
- package/dist/sources/h3-tileset-source.js +6 -0
- package/dist/sources/index.js +13 -0
- package/dist/sources/quadbin-query-source.js +18 -0
- package/dist/sources/quadbin-table-source.js +18 -0
- package/dist/sources/quadbin-tileset-source.js +6 -0
- package/dist/sources/raster-source.js +6 -0
- package/dist/sources/types.js +1 -0
- package/dist/sources/vector-query-source.js +10 -0
- package/dist/sources/vector-table-source.js +10 -0
- package/dist/sources/vector-tileset-source.js +6 -0
- package/dist/style/color-bins-style.js +21 -0
- package/dist/style/color-categories-style.js +25 -0
- package/dist/style/color-continuous-style.js +21 -0
- package/dist/style/palette.js +62 -0
- package/dist/style/utils.js +11 -0
- package/dist/utils.js +41 -0
- package/dist/workers/cartoRasterTile.js +3 -0
- package/dist/workers/cartoSpatialTile.js +3 -0
- package/dist/workers/cartoVectorTile.js +3 -0
- package/dist.min.js +28 -42
- package/package.json +21 -14
- package/src/api/fetch-map.ts +1 -1
- package/src/api/query.ts +1 -1
- package/src/index.ts +4 -4
- package/src/layers/spatial-index-tile-layer.ts +3 -2
- package/src/sources/boundary-query-source.ts +1 -1
- package/dist/es5/api/carto-api-error.js +0 -83
- package/dist/es5/api/carto-api-error.js.map +0 -1
- package/dist/es5/api/common.js +0 -25
- package/dist/es5/api/common.js.map +0 -1
- package/dist/es5/api/endpoints.js +0 -61
- package/dist/es5/api/endpoints.js.map +0 -1
- package/dist/es5/api/fetch-map.js +0 -566
- package/dist/es5/api/fetch-map.js.map +0 -1
- package/dist/es5/api/index.js +0 -30
- package/dist/es5/api/index.js.map +0 -1
- package/dist/es5/api/layer-map.js +0 -634
- package/dist/es5/api/layer-map.js.map +0 -1
- package/dist/es5/api/parse-map.js +0 -347
- package/dist/es5/api/parse-map.js.map +0 -1
- package/dist/es5/api/query.js +0 -81
- package/dist/es5/api/query.js.map +0 -1
- package/dist/es5/api/request-with-parameters.js +0 -150
- package/dist/es5/api/request-with-parameters.js.map +0 -1
- package/dist/es5/api/types.js +0 -21
- package/dist/es5/api/types.js.map +0 -1
- package/dist/es5/basemap.js +0 -17
- package/dist/es5/basemap.js.map +0 -1
- package/dist/es5/index.js +0 -205
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/layers/h3-tile-layer.js +0 -128
- package/dist/es5/layers/h3-tile-layer.js.map +0 -1
- package/dist/es5/layers/h3-tileset-2d.js +0 -172
- package/dist/es5/layers/h3-tileset-2d.js.map +0 -1
- package/dist/es5/layers/point-label-layer.js +0 -263
- package/dist/es5/layers/point-label-layer.js.map +0 -1
- package/dist/es5/layers/quadbin-layer.js +0 -72
- package/dist/es5/layers/quadbin-layer.js.map +0 -1
- package/dist/es5/layers/quadbin-tile-layer.js +0 -103
- package/dist/es5/layers/quadbin-tile-layer.js.map +0 -1
- package/dist/es5/layers/quadbin-tileset-2d.js +0 -76
- package/dist/es5/layers/quadbin-tileset-2d.js.map +0 -1
- package/dist/es5/layers/quadbin-utils.js +0 -60
- package/dist/es5/layers/quadbin-utils.js.map +0 -1
- package/dist/es5/layers/raster-layer-vertex.glsl.js +0 -9
- package/dist/es5/layers/raster-layer-vertex.glsl.js.map +0 -1
- package/dist/es5/layers/raster-layer.js +0 -174
- package/dist/es5/layers/raster-layer.js.map +0 -1
- package/dist/es5/layers/raster-tile-layer.js +0 -91
- package/dist/es5/layers/raster-tile-layer.js.map +0 -1
- package/dist/es5/layers/schema/carto-properties-tile-loader.js +0 -60
- package/dist/es5/layers/schema/carto-properties-tile-loader.js.map +0 -1
- package/dist/es5/layers/schema/carto-properties-tile.js +0 -38
- package/dist/es5/layers/schema/carto-properties-tile.js.map +0 -1
- package/dist/es5/layers/schema/carto-raster-tile-loader.js +0 -89
- package/dist/es5/layers/schema/carto-raster-tile-loader.js.map +0 -1
- package/dist/es5/layers/schema/carto-raster-tile.js +0 -79
- package/dist/es5/layers/schema/carto-raster-tile.js.map +0 -1
- package/dist/es5/layers/schema/carto-spatial-tile-loader.js +0 -81
- package/dist/es5/layers/schema/carto-spatial-tile-loader.js.map +0 -1
- package/dist/es5/layers/schema/carto-spatial-tile.js +0 -80
- package/dist/es5/layers/schema/carto-spatial-tile.js.map +0 -1
- package/dist/es5/layers/schema/carto-tile.js +0 -269
- package/dist/es5/layers/schema/carto-tile.js.map +0 -1
- package/dist/es5/layers/schema/carto-vector-tile-loader.js +0 -120
- package/dist/es5/layers/schema/carto-vector-tile-loader.js.map +0 -1
- package/dist/es5/layers/schema/fast-pbf.js +0 -14
- package/dist/es5/layers/schema/fast-pbf.js.map +0 -1
- package/dist/es5/layers/schema/spatialjson-utils.js +0 -42
- package/dist/es5/layers/schema/spatialjson-utils.js.map +0 -1
- package/dist/es5/layers/schema/tile-loader-utils.js +0 -17
- package/dist/es5/layers/schema/tile-loader-utils.js.map +0 -1
- package/dist/es5/layers/spatial-index-tile-layer.js +0 -126
- package/dist/es5/layers/spatial-index-tile-layer.js.map +0 -1
- package/dist/es5/layers/utils.js +0 -131
- package/dist/es5/layers/utils.js.map +0 -1
- package/dist/es5/layers/vector-tile-layer.js +0 -248
- package/dist/es5/layers/vector-tile-layer.js.map +0 -1
- package/dist/es5/sources/base-source.js +0 -128
- package/dist/es5/sources/base-source.js.map +0 -1
- package/dist/es5/sources/boundary-query-source.js +0 -51
- package/dist/es5/sources/boundary-query-source.js.map +0 -1
- package/dist/es5/sources/boundary-table-source.js +0 -51
- package/dist/es5/sources/boundary-table-source.js.map +0 -1
- package/dist/es5/sources/h3-query-source.js +0 -56
- package/dist/es5/sources/h3-query-source.js.map +0 -1
- package/dist/es5/sources/h3-table-source.js +0 -56
- package/dist/es5/sources/h3-table-source.js.map +0 -1
- package/dist/es5/sources/h3-tileset-source.js +0 -43
- package/dist/es5/sources/h3-tileset-source.js.map +0 -1
- package/dist/es5/sources/index.js +0 -110
- package/dist/es5/sources/index.js.map +0 -1
- package/dist/es5/sources/quadbin-query-source.js +0 -56
- package/dist/es5/sources/quadbin-query-source.js.map +0 -1
- package/dist/es5/sources/quadbin-table-source.js +0 -56
- package/dist/es5/sources/quadbin-table-source.js.map +0 -1
- package/dist/es5/sources/quadbin-tileset-source.js +0 -43
- package/dist/es5/sources/quadbin-tileset-source.js.map +0 -1
- package/dist/es5/sources/raster-source.js +0 -43
- package/dist/es5/sources/raster-source.js.map +0 -1
- package/dist/es5/sources/types.js +0 -2
- package/dist/es5/sources/types.js.map +0 -1
- package/dist/es5/sources/vector-query-source.js +0 -51
- package/dist/es5/sources/vector-query-source.js.map +0 -1
- package/dist/es5/sources/vector-table-source.js +0 -51
- package/dist/es5/sources/vector-table-source.js.map +0 -1
- package/dist/es5/sources/vector-tileset-source.js +0 -43
- package/dist/es5/sources/vector-tileset-source.js.map +0 -1
- package/dist/es5/style/color-bins-style.js +0 -37
- package/dist/es5/style/color-bins-style.js.map +0 -1
- package/dist/es5/style/color-categories-style.js +0 -65
- package/dist/es5/style/color-categories-style.js.map +0 -1
- package/dist/es5/style/color-continuous-style.js +0 -37
- package/dist/es5/style/color-continuous-style.js.map +0 -1
- package/dist/es5/style/palette.js +0 -81
- package/dist/es5/style/palette.js.map +0 -1
- package/dist/es5/style/utils.js +0 -28
- package/dist/es5/style/utils.js.map +0 -1
- package/dist/es5/utils.js +0 -65
- package/dist/es5/utils.js.map +0 -1
- package/dist/es5/workers/cartoRasterTile.js +0 -10
- package/dist/es5/workers/cartoRasterTile.js.map +0 -1
- package/dist/es5/workers/cartoSpatialTile.js +0 -10
- package/dist/es5/workers/cartoSpatialTile.js.map +0 -1
- package/dist/es5/workers/cartoVectorTile.js +0 -10
- package/dist/es5/workers/cartoVectorTile.js.map +0 -1
- package/dist/esm/api/carto-api-error.js +0 -46
- package/dist/esm/api/carto-api-error.js.map +0 -1
- package/dist/esm/api/common.js.map +0 -1
- package/dist/esm/api/endpoints.js +0 -41
- package/dist/esm/api/endpoints.js.map +0 -1
- package/dist/esm/api/fetch-map.js +0 -298
- package/dist/esm/api/fetch-map.js.map +0 -1
- package/dist/esm/api/index.js +0 -4
- package/dist/esm/api/index.js.map +0 -1
- package/dist/esm/api/layer-map.js +0 -520
- package/dist/esm/api/layer-map.js.map +0 -1
- package/dist/esm/api/parse-map.js +0 -343
- package/dist/esm/api/parse-map.js.map +0 -1
- package/dist/esm/api/query.js +0 -40
- package/dist/esm/api/query.js.map +0 -1
- package/dist/esm/api/request-with-parameters.js +0 -82
- package/dist/esm/api/request-with-parameters.js.map +0 -1
- package/dist/esm/api/types.js +0 -14
- package/dist/esm/api/types.js.map +0 -1
- package/dist/esm/basemap.js +0 -10
- package/dist/esm/basemap.js.map +0 -1
- package/dist/esm/index.js +0 -35
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/layers/h3-tile-layer.js +0 -77
- package/dist/esm/layers/h3-tile-layer.js.map +0 -1
- package/dist/esm/layers/h3-tileset-2d.js +0 -119
- package/dist/esm/layers/h3-tileset-2d.js.map +0 -1
- package/dist/esm/layers/point-label-layer.js +0 -194
- package/dist/esm/layers/point-label-layer.js.map +0 -1
- package/dist/esm/layers/quadbin-layer.js +0 -31
- package/dist/esm/layers/quadbin-layer.js.map +0 -1
- package/dist/esm/layers/quadbin-tile-layer.js +0 -51
- package/dist/esm/layers/quadbin-tile-layer.js.map +0 -1
- package/dist/esm/layers/quadbin-tileset-2d.js +0 -39
- package/dist/esm/layers/quadbin-tileset-2d.js.map +0 -1
- package/dist/esm/layers/quadbin-utils.js +0 -23
- package/dist/esm/layers/quadbin-utils.js.map +0 -1
- package/dist/esm/layers/raster-layer-vertex.glsl.js.map +0 -1
- package/dist/esm/layers/raster-layer.js +0 -108
- package/dist/esm/layers/raster-layer.js.map +0 -1
- package/dist/esm/layers/raster-tile-layer.js +0 -48
- package/dist/esm/layers/raster-tile-layer.js.map +0 -1
- package/dist/esm/layers/schema/carto-properties-tile-loader.js +0 -23
- package/dist/esm/layers/schema/carto-properties-tile-loader.js.map +0 -1
- package/dist/esm/layers/schema/carto-properties-tile.js +0 -18
- package/dist/esm/layers/schema/carto-properties-tile.js.map +0 -1
- package/dist/esm/layers/schema/carto-raster-tile-loader.js +0 -54
- package/dist/esm/layers/schema/carto-raster-tile-loader.js.map +0 -1
- package/dist/esm/layers/schema/carto-raster-tile.js +0 -51
- package/dist/esm/layers/schema/carto-raster-tile.js.map +0 -1
- package/dist/esm/layers/schema/carto-spatial-tile-loader.js +0 -44
- package/dist/esm/layers/schema/carto-spatial-tile-loader.js.map +0 -1
- package/dist/esm/layers/schema/carto-spatial-tile.js +0 -47
- package/dist/esm/layers/schema/carto-spatial-tile.js.map +0 -1
- package/dist/esm/layers/schema/carto-tile.js +0 -197
- package/dist/esm/layers/schema/carto-tile.js.map +0 -1
- package/dist/esm/layers/schema/carto-vector-tile-loader.js +0 -82
- package/dist/esm/layers/schema/carto-vector-tile-loader.js.map +0 -1
- package/dist/esm/layers/schema/fast-pbf.js +0 -7
- package/dist/esm/layers/schema/fast-pbf.js.map +0 -1
- package/dist/esm/layers/schema/spatialjson-utils.js +0 -27
- package/dist/esm/layers/schema/spatialjson-utils.js.map +0 -1
- package/dist/esm/layers/schema/tile-loader-utils.js +0 -7
- package/dist/esm/layers/schema/tile-loader-utils.js.map +0 -1
- package/dist/esm/layers/spatial-index-tile-layer.js +0 -86
- package/dist/esm/layers/spatial-index-tile-layer.js.map +0 -1
- package/dist/esm/layers/utils.js +0 -85
- package/dist/esm/layers/utils.js.map +0 -1
- package/dist/esm/layers/vector-tile-layer.js +0 -143
- package/dist/esm/layers/vector-tile-layer.js.map +0 -1
- package/dist/esm/sources/base-source.js +0 -72
- package/dist/esm/sources/base-source.js.map +0 -1
- package/dist/esm/sources/boundary-query-source.js +0 -21
- package/dist/esm/sources/boundary-query-source.js.map +0 -1
- package/dist/esm/sources/boundary-table-source.js +0 -21
- package/dist/esm/sources/boundary-table-source.js.map +0 -1
- package/dist/esm/sources/h3-query-source.js +0 -27
- package/dist/esm/sources/h3-query-source.js.map +0 -1
- package/dist/esm/sources/h3-table-source.js +0 -27
- package/dist/esm/sources/h3-table-source.js.map +0 -1
- package/dist/esm/sources/h3-tileset-source.js +0 -11
- package/dist/esm/sources/h3-tileset-source.js.map +0 -1
- package/dist/esm/sources/index.js +0 -14
- package/dist/esm/sources/index.js.map +0 -1
- package/dist/esm/sources/quadbin-query-source.js +0 -27
- package/dist/esm/sources/quadbin-query-source.js.map +0 -1
- package/dist/esm/sources/quadbin-table-source.js +0 -27
- package/dist/esm/sources/quadbin-table-source.js.map +0 -1
- package/dist/esm/sources/quadbin-tileset-source.js +0 -11
- package/dist/esm/sources/quadbin-tileset-source.js.map +0 -1
- package/dist/esm/sources/raster-source.js +0 -11
- package/dist/esm/sources/raster-source.js.map +0 -1
- package/dist/esm/sources/types.js +0 -2
- package/dist/esm/sources/types.js.map +0 -1
- package/dist/esm/sources/vector-query-source.js +0 -20
- package/dist/esm/sources/vector-query-source.js.map +0 -1
- package/dist/esm/sources/vector-table-source.js +0 -20
- package/dist/esm/sources/vector-table-source.js.map +0 -1
- package/dist/esm/sources/vector-tileset-source.js +0 -11
- package/dist/esm/sources/vector-tileset-source.js.map +0 -1
- package/dist/esm/style/color-bins-style.js +0 -19
- package/dist/esm/style/color-bins-style.js.map +0 -1
- package/dist/esm/style/color-categories-style.js +0 -24
- package/dist/esm/style/color-categories-style.js.map +0 -1
- package/dist/esm/style/color-continuous-style.js +0 -19
- package/dist/esm/style/color-continuous-style.js.map +0 -1
- package/dist/esm/style/palette.js +0 -51
- package/dist/esm/style/palette.js.map +0 -1
- package/dist/esm/style/utils.js +0 -15
- package/dist/esm/style/utils.js.map +0 -1
- package/dist/esm/utils.js +0 -51
- package/dist/esm/utils.js.map +0 -1
- package/dist/esm/workers/cartoRasterTile.js +0 -4
- package/dist/esm/workers/cartoRasterTile.js.map +0 -1
- package/dist/esm/workers/cartoSpatialTile.js +0 -4
- package/dist/esm/workers/cartoSpatialTile.js.map +0 -1
- package/dist/esm/workers/cartoVectorTile.js +0 -4
- package/dist/esm/workers/cartoVectorTile.js.map +0 -1
- package/typed/index.d.ts +0 -37
- /package/{typed → dist}/api/carto-api-error.d.ts +0 -0
- /package/{typed → dist}/api/carto-api-error.d.ts.map +0 -0
- /package/{typed → dist}/api/common.d.ts +0 -0
- /package/{typed → dist}/api/common.d.ts.map +0 -0
- /package/{typed → dist}/api/endpoints.d.ts +0 -0
- /package/{typed → dist}/api/endpoints.d.ts.map +0 -0
- /package/{typed → dist}/api/fetch-map.d.ts +0 -0
- /package/{typed → dist}/api/fetch-map.d.ts.map +0 -0
- /package/{typed → dist}/api/index.d.ts +0 -0
- /package/{typed → dist}/api/index.d.ts.map +0 -0
- /package/{typed → dist}/api/layer-map.d.ts +0 -0
- /package/{typed → dist}/api/layer-map.d.ts.map +0 -0
- /package/{typed → dist}/api/parse-map.d.ts +0 -0
- /package/{typed → dist}/api/parse-map.d.ts.map +0 -0
- /package/{typed → dist}/api/query.d.ts +0 -0
- /package/{typed → dist}/api/query.d.ts.map +0 -0
- /package/{typed → dist}/api/request-with-parameters.d.ts +0 -0
- /package/{typed → dist}/api/request-with-parameters.d.ts.map +0 -0
- /package/{typed → dist}/api/types.d.ts +0 -0
- /package/{typed → dist}/api/types.d.ts.map +0 -0
- /package/{typed → dist}/basemap.d.ts +0 -0
- /package/{typed → dist}/basemap.d.ts.map +0 -0
- /package/{typed → dist}/layers/h3-tile-layer.d.ts +0 -0
- /package/{typed → dist}/layers/h3-tile-layer.d.ts.map +0 -0
- /package/{typed → dist}/layers/h3-tileset-2d.d.ts +0 -0
- /package/{typed → dist}/layers/h3-tileset-2d.d.ts.map +0 -0
- /package/{typed → dist}/layers/point-label-layer.d.ts +0 -0
- /package/{typed → dist}/layers/point-label-layer.d.ts.map +0 -0
- /package/{typed → dist}/layers/quadbin-layer.d.ts +0 -0
- /package/{typed → dist}/layers/quadbin-layer.d.ts.map +0 -0
- /package/{typed → dist}/layers/quadbin-tile-layer.d.ts +0 -0
- /package/{typed → dist}/layers/quadbin-tile-layer.d.ts.map +0 -0
- /package/{typed → dist}/layers/quadbin-tileset-2d.d.ts +0 -0
- /package/{typed → dist}/layers/quadbin-tileset-2d.d.ts.map +0 -0
- /package/{typed → dist}/layers/quadbin-utils.d.ts +0 -0
- /package/{typed → dist}/layers/quadbin-utils.d.ts.map +0 -0
- /package/{typed → dist}/layers/raster-layer-vertex.glsl.d.ts +0 -0
- /package/{typed → dist}/layers/raster-layer-vertex.glsl.d.ts.map +0 -0
- /package/{typed → dist}/layers/raster-layer.d.ts +0 -0
- /package/{typed → dist}/layers/raster-layer.d.ts.map +0 -0
- /package/{typed → dist}/layers/raster-tile-layer.d.ts +0 -0
- /package/{typed → dist}/layers/raster-tile-layer.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-properties-tile-loader.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-properties-tile-loader.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-properties-tile.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-properties-tile.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-raster-tile-loader.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-raster-tile-loader.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-raster-tile.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-raster-tile.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-spatial-tile-loader.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-spatial-tile-loader.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-spatial-tile.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-spatial-tile.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-tile.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-tile.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/carto-vector-tile-loader.d.ts +0 -0
- /package/{typed → dist}/layers/schema/carto-vector-tile-loader.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/fast-pbf.d.ts +0 -0
- /package/{typed → dist}/layers/schema/fast-pbf.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/spatialjson-utils.d.ts +0 -0
- /package/{typed → dist}/layers/schema/spatialjson-utils.d.ts.map +0 -0
- /package/{typed → dist}/layers/schema/tile-loader-utils.d.ts +0 -0
- /package/{typed → dist}/layers/schema/tile-loader-utils.d.ts.map +0 -0
- /package/{typed → dist}/layers/utils.d.ts +0 -0
- /package/{typed → dist}/layers/utils.d.ts.map +0 -0
- /package/{typed → dist}/layers/vector-tile-layer.d.ts +0 -0
- /package/{typed → dist}/layers/vector-tile-layer.d.ts.map +0 -0
- /package/{typed → dist}/sources/base-source.d.ts +0 -0
- /package/{typed → dist}/sources/base-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/boundary-table-source.d.ts +0 -0
- /package/{typed → dist}/sources/boundary-table-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/h3-query-source.d.ts +0 -0
- /package/{typed → dist}/sources/h3-query-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/h3-table-source.d.ts +0 -0
- /package/{typed → dist}/sources/h3-table-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/h3-tileset-source.d.ts +0 -0
- /package/{typed → dist}/sources/h3-tileset-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/index.d.ts +0 -0
- /package/{typed → dist}/sources/index.d.ts.map +0 -0
- /package/{typed → dist}/sources/quadbin-query-source.d.ts +0 -0
- /package/{typed → dist}/sources/quadbin-query-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/quadbin-table-source.d.ts +0 -0
- /package/{typed → dist}/sources/quadbin-table-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/quadbin-tileset-source.d.ts +0 -0
- /package/{typed → dist}/sources/quadbin-tileset-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/raster-source.d.ts +0 -0
- /package/{typed → dist}/sources/raster-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/types.d.ts +0 -0
- /package/{typed → dist}/sources/types.d.ts.map +0 -0
- /package/{typed → dist}/sources/vector-query-source.d.ts +0 -0
- /package/{typed → dist}/sources/vector-query-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/vector-table-source.d.ts +0 -0
- /package/{typed → dist}/sources/vector-table-source.d.ts.map +0 -0
- /package/{typed → dist}/sources/vector-tileset-source.d.ts +0 -0
- /package/{typed → dist}/sources/vector-tileset-source.d.ts.map +0 -0
- /package/{typed → dist}/style/color-bins-style.d.ts +0 -0
- /package/{typed → dist}/style/color-bins-style.d.ts.map +0 -0
- /package/{typed → dist}/style/color-categories-style.d.ts +0 -0
- /package/{typed → dist}/style/color-categories-style.d.ts.map +0 -0
- /package/{typed → dist}/style/color-continuous-style.d.ts +0 -0
- /package/{typed → dist}/style/color-continuous-style.d.ts.map +0 -0
- /package/{typed → dist}/style/palette.d.ts +0 -0
- /package/{typed → dist}/style/palette.d.ts.map +0 -0
- /package/{typed → dist}/style/utils.d.ts +0 -0
- /package/{typed → dist}/style/utils.d.ts.map +0 -0
- /package/{typed → dist}/utils.d.ts +0 -0
- /package/{typed → dist}/utils.d.ts.map +0 -0
- /package/{typed → dist}/workers/cartoRasterTile.d.ts +0 -0
- /package/{typed → dist}/workers/cartoRasterTile.d.ts.map +0 -0
- /package/{typed → dist}/workers/cartoSpatialTile.d.ts +0 -0
- /package/{typed → dist}/workers/cartoSpatialTile.d.ts.map +0 -0
- /package/{typed → dist}/workers/cartoVectorTile.d.ts +0 -0
- /package/{typed → dist}/workers/cartoVectorTile.d.ts.map +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';
|
|
2
|
+
import { polygonToCells, latLngToCell, getResolution, cellToBoundary, cellToParent, gridDisk } from 'h3-js';
|
|
3
|
+
function getHexagonsInBoundingBox({ west, north, east, south }, resolution) {
|
|
4
|
+
const longitudeSpan = Math.abs(east - west);
|
|
5
|
+
if (longitudeSpan > 180) {
|
|
6
|
+
// This is a known issue in h3-js: polygonToCells does not work correctly
|
|
7
|
+
// when longitude span is larger than 180 degrees.
|
|
8
|
+
const nSegments = Math.ceil(longitudeSpan / 180);
|
|
9
|
+
let h3Indices = [];
|
|
10
|
+
for (let s = 0; s < nSegments; s++) {
|
|
11
|
+
const segmentEast = east + s * 180;
|
|
12
|
+
const segmentWest = Math.min(segmentEast + 179.9999999, west);
|
|
13
|
+
h3Indices = h3Indices.concat(getHexagonsInBoundingBox({ west: segmentWest, north, east: segmentEast, south }, resolution));
|
|
14
|
+
}
|
|
15
|
+
return [...new Set(h3Indices)];
|
|
16
|
+
}
|
|
17
|
+
// `polygonToCells()` fills based on hexagon center, which means tiles vanish
|
|
18
|
+
// prematurely. Get more accurate coverage by oversampling
|
|
19
|
+
const oversample = 2;
|
|
20
|
+
const h3Indices = polygonToCells([
|
|
21
|
+
[
|
|
22
|
+
[west, north],
|
|
23
|
+
[west, south],
|
|
24
|
+
[east, south],
|
|
25
|
+
[east, north],
|
|
26
|
+
[west, north]
|
|
27
|
+
]
|
|
28
|
+
], resolution + oversample, true);
|
|
29
|
+
return oversample ? [...new Set(h3Indices.map(i => cellToParent(i, resolution)))] : h3Indices;
|
|
30
|
+
}
|
|
31
|
+
function tileToBoundingBox(index) {
|
|
32
|
+
const coordinates = cellToBoundary(index);
|
|
33
|
+
const latitudes = coordinates.map(c => c[0]);
|
|
34
|
+
const longitudes = coordinates.map(c => c[1]);
|
|
35
|
+
const west = Math.min(...longitudes);
|
|
36
|
+
const south = Math.min(...latitudes);
|
|
37
|
+
const east = Math.max(...longitudes);
|
|
38
|
+
const north = Math.max(...latitudes);
|
|
39
|
+
return { west, south, east, north };
|
|
40
|
+
}
|
|
41
|
+
// Resolution conversion function. Takes a WebMercatorViewport and returns
|
|
42
|
+
// a H3 resolution such that the screen space size of the hexagons is
|
|
43
|
+
// similar
|
|
44
|
+
// Relative scale factor (0 = no biasing, 2 = a few hexagons cover view)
|
|
45
|
+
const BIAS = 2;
|
|
46
|
+
export function getHexagonResolution(viewport) {
|
|
47
|
+
const hexagonScaleFactor = (2 / 3) * viewport.zoom;
|
|
48
|
+
const latitudeScaleFactor = Math.log(1 / Math.cos((Math.PI * viewport.latitude) / 180));
|
|
49
|
+
// Clip and bias
|
|
50
|
+
return Math.max(0, Math.floor(hexagonScaleFactor + latitudeScaleFactor - BIAS));
|
|
51
|
+
}
|
|
52
|
+
export default class H3Tileset2D extends Tileset2D {
|
|
53
|
+
/**
|
|
54
|
+
* Returns all tile indices in the current viewport. If the current zoom level is smaller
|
|
55
|
+
* than minZoom, return an empty array. If the current zoom level is greater than maxZoom,
|
|
56
|
+
* return tiles that are on maxZoom.
|
|
57
|
+
*/
|
|
58
|
+
// @ts-expect-error Tileset2D should be generic over TileIndex
|
|
59
|
+
getTileIndices({ viewport, minZoom, maxZoom }) {
|
|
60
|
+
if (viewport.latitude === undefined)
|
|
61
|
+
return [];
|
|
62
|
+
const [east, south, west, north] = viewport.getBounds();
|
|
63
|
+
let z = getHexagonResolution(viewport);
|
|
64
|
+
let indices;
|
|
65
|
+
if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {
|
|
66
|
+
// TODO support `extent` prop
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {
|
|
70
|
+
z = maxZoom;
|
|
71
|
+
// Once we are at max zoom, getHexagonsInBoundingBox doesn't work, simply
|
|
72
|
+
// get a ring centered on the hexagon in the viewport center
|
|
73
|
+
const center = latLngToCell(viewport.latitude, viewport.longitude, maxZoom);
|
|
74
|
+
indices = gridDisk(center, 1);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
indices = getHexagonsInBoundingBox({ west, north, east, south }, z);
|
|
78
|
+
}
|
|
79
|
+
return indices.map(i => ({ i }));
|
|
80
|
+
}
|
|
81
|
+
// @ts-expect-error Tileset2D should be generic over TileIndex
|
|
82
|
+
getTileId({ i }) {
|
|
83
|
+
return i;
|
|
84
|
+
}
|
|
85
|
+
// @ts-expect-error Tileset2D should be generic over TileIndex
|
|
86
|
+
getTileMetadata({ i }) {
|
|
87
|
+
return { bbox: tileToBoundingBox(i) };
|
|
88
|
+
}
|
|
89
|
+
// @ts-expect-error Tileset2D should be generic over TileIndex
|
|
90
|
+
getTileZoom({ i }) {
|
|
91
|
+
return getResolution(i);
|
|
92
|
+
}
|
|
93
|
+
// @ts-expect-error Tileset2D should be generic over TileIndex
|
|
94
|
+
getParentIndex(index) {
|
|
95
|
+
const resolution = getResolution(index.i);
|
|
96
|
+
const i = cellToParent(index.i, resolution - 1);
|
|
97
|
+
return { i };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { CompositeLayer } from '@deck.gl/core';
|
|
2
|
+
import { TextLayer, _TextBackgroundLayer as TextBackgroundLayer } from '@deck.gl/layers';
|
|
3
|
+
const [LEFT, TOP, RIGHT, BOTTOM] = [0, 1, 2, 3];
|
|
4
|
+
class EnhancedTextBackgroundLayer extends TextBackgroundLayer {
|
|
5
|
+
static { this.layerName = 'EnhancedTextBackgroundLayer'; }
|
|
6
|
+
getShaders() {
|
|
7
|
+
const shaders = super.getShaders();
|
|
8
|
+
let vs = shaders.vs;
|
|
9
|
+
// Modify shader so that the padding is offset by the pixel offset to ensure the padding
|
|
10
|
+
// always captures the anchor point. As padding is uniform we cannot pass it a per-label value
|
|
11
|
+
vs = vs.replaceAll('padding.', '_padding.');
|
|
12
|
+
vs = vs.replace('void main(void) {', 'void main(void) {\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);');
|
|
13
|
+
return { ...shaders, vs };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// TextLayer which includes modified text-background-layer-vertex shader and only renders the
|
|
17
|
+
// primary background layer in the collision pass
|
|
18
|
+
class EnhancedTextLayer extends TextLayer {
|
|
19
|
+
static { this.layerName = 'EnhancedTextLayer'; }
|
|
20
|
+
filterSubLayer({ layer, renderPass }) {
|
|
21
|
+
const background = layer.id.includes('primary-background');
|
|
22
|
+
if (renderPass === 'collision') {
|
|
23
|
+
return background; // Only draw primary background layer in collision pass
|
|
24
|
+
}
|
|
25
|
+
return !background; // Do not draw background layer in other passes
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const defaultProps = {
|
|
29
|
+
...TextLayer.defaultProps,
|
|
30
|
+
getRadius: { type: 'accessor', value: 1 },
|
|
31
|
+
radiusScale: { type: 'number', min: 0, value: 1 }
|
|
32
|
+
};
|
|
33
|
+
export default class PointLabelLayer extends CompositeLayer {
|
|
34
|
+
static { this.layerName = 'PointLabelLayer'; }
|
|
35
|
+
static { this.defaultProps = defaultProps; }
|
|
36
|
+
calculatePixelOffset(secondary) {
|
|
37
|
+
const { getTextAnchor: anchor, getAlignmentBaseline: alignment, getRadius, getSecondaryText, radiusScale, secondarySizeScale, sizeScale } = this.props;
|
|
38
|
+
const xMult = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;
|
|
39
|
+
const yMult = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1;
|
|
40
|
+
// Padding based on font size (font size / 4)
|
|
41
|
+
const xPadding = sizeScale / 4;
|
|
42
|
+
const yPadding = sizeScale * (1 + 1 / 4);
|
|
43
|
+
// Place secondary label under main label (secondary label always 'top' baseline aligned)
|
|
44
|
+
const secondaryOffset = 0.6 * (1 - yMult) * sizeScale;
|
|
45
|
+
let yOffset = secondary ? secondaryOffset : 0;
|
|
46
|
+
// Special case, position relative to secondary label
|
|
47
|
+
if (anchor === 'middle' && alignment === 'top' && getSecondaryText) {
|
|
48
|
+
yOffset -= secondaryOffset;
|
|
49
|
+
yOffset -= secondarySizeScale;
|
|
50
|
+
yOffset += sizeScale;
|
|
51
|
+
}
|
|
52
|
+
// Padding based on point radius (radius/ 4)
|
|
53
|
+
const radiusPadding = 1 + 1 / 4;
|
|
54
|
+
return typeof getRadius === 'function'
|
|
55
|
+
? (d, info) => {
|
|
56
|
+
const r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;
|
|
57
|
+
return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];
|
|
58
|
+
}
|
|
59
|
+
: [
|
|
60
|
+
xMult * (getRadius * radiusScale * radiusPadding + xPadding),
|
|
61
|
+
yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
calculateBackgroundPadding() {
|
|
65
|
+
const { getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale } = this.props;
|
|
66
|
+
// Heuristics to avoid label overlap
|
|
67
|
+
const paddingX = 12 * sizeScale;
|
|
68
|
+
const paddingY = 3 * sizeScale;
|
|
69
|
+
const backgroundPadding = [0, 0, 0, 0];
|
|
70
|
+
if (alignment === 'top') {
|
|
71
|
+
backgroundPadding[TOP] = paddingY;
|
|
72
|
+
}
|
|
73
|
+
else if (alignment === 'bottom') {
|
|
74
|
+
backgroundPadding[BOTTOM] = paddingY;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
backgroundPadding[TOP] = 0.5 * paddingY;
|
|
78
|
+
backgroundPadding[BOTTOM] = 0.5 * paddingY;
|
|
79
|
+
}
|
|
80
|
+
if (anchor === 'start') {
|
|
81
|
+
backgroundPadding[LEFT] = paddingX;
|
|
82
|
+
}
|
|
83
|
+
else if (anchor === 'end') {
|
|
84
|
+
backgroundPadding[RIGHT] = paddingX;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
backgroundPadding[LEFT] = 0.5 * paddingX;
|
|
88
|
+
backgroundPadding[RIGHT] = 0.5 * paddingX;
|
|
89
|
+
}
|
|
90
|
+
return backgroundPadding;
|
|
91
|
+
}
|
|
92
|
+
renderTextLayer(id, { updateTriggers: updateTriggersOverride = {}, ...props }) {
|
|
93
|
+
const { data, characterSet, fontFamily, fontSettings, fontWeight, outlineColor, outlineWidth, sizeScale, radiusScale, getAlignmentBaseline, getColor, getPosition, getTextAnchor, updateTriggers } = this.props;
|
|
94
|
+
return new EnhancedTextLayer(this.getSubLayerProps({
|
|
95
|
+
id,
|
|
96
|
+
data,
|
|
97
|
+
characterSet,
|
|
98
|
+
fontFamily,
|
|
99
|
+
fontSettings,
|
|
100
|
+
fontWeight,
|
|
101
|
+
outlineColor,
|
|
102
|
+
outlineWidth,
|
|
103
|
+
sizeScale,
|
|
104
|
+
getAlignmentBaseline,
|
|
105
|
+
getColor,
|
|
106
|
+
getPosition,
|
|
107
|
+
getTextAnchor,
|
|
108
|
+
updateTriggers: {
|
|
109
|
+
...updateTriggers,
|
|
110
|
+
...updateTriggersOverride,
|
|
111
|
+
getPixelOffset: [
|
|
112
|
+
updateTriggers.getRadius,
|
|
113
|
+
updateTriggers.getTextAnchor,
|
|
114
|
+
updateTriggers.getAlignmentBaseline,
|
|
115
|
+
radiusScale,
|
|
116
|
+
sizeScale
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
}), {
|
|
120
|
+
getSize: 1,
|
|
121
|
+
_subLayerProps: { background: { type: EnhancedTextBackgroundLayer } }
|
|
122
|
+
}, props);
|
|
123
|
+
}
|
|
124
|
+
renderLayers() {
|
|
125
|
+
const { getText, getSecondaryColor, getSecondaryText, secondaryOutlineColor, secondarySizeScale, updateTriggers } = this.props;
|
|
126
|
+
const getPixelOffset = this.calculatePixelOffset(false);
|
|
127
|
+
const backgroundPadding = this.calculateBackgroundPadding();
|
|
128
|
+
const out = [
|
|
129
|
+
// Text doesn't update via updateTrigger for some reason
|
|
130
|
+
this.renderTextLayer(`${updateTriggers.getText}-primary`, {
|
|
131
|
+
backgroundPadding,
|
|
132
|
+
getText,
|
|
133
|
+
getPixelOffset,
|
|
134
|
+
background: true // Only use background for primary label for faster collisions
|
|
135
|
+
}),
|
|
136
|
+
Boolean(getSecondaryText) &&
|
|
137
|
+
this.renderTextLayer(`${updateTriggers.getSecondaryText}-secondary`, {
|
|
138
|
+
getText: getSecondaryText,
|
|
139
|
+
getPixelOffset: this.calculatePixelOffset(true),
|
|
140
|
+
getAlignmentBaseline: 'top',
|
|
141
|
+
// updateTriggers: {getText: updateTriggers.getSecondaryText},
|
|
142
|
+
// Optional overrides
|
|
143
|
+
...(getSecondaryColor && { getColor: getSecondaryColor }),
|
|
144
|
+
...(secondarySizeScale && { sizeScale: secondarySizeScale }),
|
|
145
|
+
...(secondaryOutlineColor && { outlineColor: secondaryOutlineColor })
|
|
146
|
+
})
|
|
147
|
+
];
|
|
148
|
+
return out;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { _GeoCellLayer as GeoCellLayer } from '@deck.gl/geo-layers';
|
|
2
|
+
import { getQuadbinPolygon } from "./quadbin-utils.js";
|
|
3
|
+
const defaultProps = {
|
|
4
|
+
getQuadbin: { type: 'accessor', value: (d) => d.quadbin }
|
|
5
|
+
};
|
|
6
|
+
export default class QuadbinLayer extends GeoCellLayer {
|
|
7
|
+
static { this.layerName = 'QuadbinLayer'; }
|
|
8
|
+
static { this.defaultProps = defaultProps; }
|
|
9
|
+
indexToBounds() {
|
|
10
|
+
const { data, extruded, getQuadbin } = this.props;
|
|
11
|
+
// To avoid z-fighting reduce polygon footprint when extruding
|
|
12
|
+
const coverage = extruded ? 0.99 : 1;
|
|
13
|
+
return {
|
|
14
|
+
data,
|
|
15
|
+
_normalize: false,
|
|
16
|
+
positionFormat: 'XY',
|
|
17
|
+
getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo), coverage),
|
|
18
|
+
updateTriggers: { getPolygon: coverage }
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CompositeLayer } from '@deck.gl/core';
|
|
2
|
+
import QuadbinLayer from "./quadbin-layer.js";
|
|
3
|
+
import QuadbinTileset2D from "./quadbin-tileset-2d.js";
|
|
4
|
+
import SpatialIndexTileLayer from "./spatial-index-tile-layer.js";
|
|
5
|
+
import { hexToBigInt } from 'quadbin';
|
|
6
|
+
import { injectAccessToken, TilejsonPropType } from "./utils.js";
|
|
7
|
+
export const renderSubLayers = props => {
|
|
8
|
+
const { data } = props;
|
|
9
|
+
if (!data || !data.length)
|
|
10
|
+
return null;
|
|
11
|
+
const isBigInt = typeof data[0].id === 'bigint';
|
|
12
|
+
return new QuadbinLayer(props, {
|
|
13
|
+
getQuadbin: isBigInt ? d => d.id : d => hexToBigInt(d.id)
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
const defaultProps = {
|
|
17
|
+
data: TilejsonPropType
|
|
18
|
+
};
|
|
19
|
+
export default class QuadbinTileLayer extends CompositeLayer {
|
|
20
|
+
static { this.layerName = 'QuadbinTileLayer'; }
|
|
21
|
+
static { this.defaultProps = defaultProps; }
|
|
22
|
+
getLoadOptions() {
|
|
23
|
+
const loadOptions = super.getLoadOptions() || {};
|
|
24
|
+
const tileJSON = this.props.data;
|
|
25
|
+
injectAccessToken(loadOptions, tileJSON.accessToken);
|
|
26
|
+
loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: 'quadbin' };
|
|
27
|
+
return loadOptions;
|
|
28
|
+
}
|
|
29
|
+
renderLayers() {
|
|
30
|
+
const tileJSON = this.props.data;
|
|
31
|
+
if (!tileJSON)
|
|
32
|
+
return null;
|
|
33
|
+
const { tiles: data, maxresolution: maxZoom } = tileJSON;
|
|
34
|
+
return [
|
|
35
|
+
// @ts-ignore
|
|
36
|
+
new SpatialIndexTileLayer(this.props, {
|
|
37
|
+
id: `quadbin-tile-layer-${this.props.id}`,
|
|
38
|
+
data,
|
|
39
|
+
// TODO: Tileset2D should be generic over TileIndex type
|
|
40
|
+
TilesetClass: QuadbinTileset2D,
|
|
41
|
+
renderSubLayers,
|
|
42
|
+
maxZoom,
|
|
43
|
+
loadOptions: this.getLoadOptions()
|
|
44
|
+
})
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';
|
|
2
|
+
import { bigIntToHex, cellToParent, cellToTile, getResolution, tileToCell } from 'quadbin';
|
|
3
|
+
export default class QuadbinTileset2D extends Tileset2D {
|
|
4
|
+
// @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT
|
|
5
|
+
getTileIndices(opts) {
|
|
6
|
+
return super
|
|
7
|
+
.getTileIndices(opts)
|
|
8
|
+
.map(tileToCell)
|
|
9
|
+
.map(q => ({ q, i: bigIntToHex(q) }));
|
|
10
|
+
}
|
|
11
|
+
// @ts-expect-error TileIndex must be generic
|
|
12
|
+
getTileId({ q, i }) {
|
|
13
|
+
return i || bigIntToHex(q);
|
|
14
|
+
}
|
|
15
|
+
// @ts-expect-error TileIndex must be generic
|
|
16
|
+
getTileMetadata({ q }) {
|
|
17
|
+
return super.getTileMetadata(cellToTile(q));
|
|
18
|
+
}
|
|
19
|
+
// @ts-expect-error TileIndex must be generic
|
|
20
|
+
getTileZoom({ q }) {
|
|
21
|
+
return Number(getResolution(q));
|
|
22
|
+
}
|
|
23
|
+
// @ts-expect-error TileIndex must be generic
|
|
24
|
+
getParentIndex({ q }) {
|
|
25
|
+
return { q: cellToParent(q) };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { worldToLngLat } from '@math.gl/web-mercator';
|
|
2
|
+
import { cellToTile } from 'quadbin';
|
|
3
|
+
const TILE_SIZE = 512;
|
|
4
|
+
export function quadbinToOffset(quadbin) {
|
|
5
|
+
const { x, y, z } = cellToTile(quadbin);
|
|
6
|
+
const scale = TILE_SIZE / (1 << z);
|
|
7
|
+
return [x * scale, TILE_SIZE - y * scale, scale];
|
|
8
|
+
}
|
|
9
|
+
export function quadbinToWorldBounds(quadbin, coverage) {
|
|
10
|
+
const [xOffset, yOffset, scale] = quadbinToOffset(quadbin);
|
|
11
|
+
return [
|
|
12
|
+
[xOffset, yOffset],
|
|
13
|
+
[xOffset + coverage * scale, yOffset - coverage * scale]
|
|
14
|
+
];
|
|
15
|
+
}
|
|
16
|
+
export function getQuadbinPolygon(quadbin, coverage = 1) {
|
|
17
|
+
const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin, coverage);
|
|
18
|
+
const [w, n] = worldToLngLat(topLeft);
|
|
19
|
+
const [e, s] = worldToLngLat(bottomRight);
|
|
20
|
+
return [e, n, e, s, w, s, w, n, e, n];
|
|
21
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { GL } from '@luma.gl/constants';
|
|
2
|
+
import { CompositeLayer } from '@deck.gl/core';
|
|
3
|
+
import { ColumnLayer } from '@deck.gl/layers';
|
|
4
|
+
import { quadbinToOffset } from "./quadbin-utils.js";
|
|
5
|
+
import vs from "./raster-layer-vertex.glsl.js";
|
|
6
|
+
import { assert, createBinaryProxy } from "../utils.js";
|
|
7
|
+
const defaultProps = {
|
|
8
|
+
...ColumnLayer.defaultProps,
|
|
9
|
+
extruded: false,
|
|
10
|
+
diskResolution: 4,
|
|
11
|
+
vertices: [
|
|
12
|
+
[-0.5, -0.5],
|
|
13
|
+
[0.5, -0.5],
|
|
14
|
+
[0.5, 0.5],
|
|
15
|
+
[-0.5, 0.5]
|
|
16
|
+
]
|
|
17
|
+
};
|
|
18
|
+
// Modified ColumnLayer with custom vertex shader
|
|
19
|
+
class RasterColumnLayer extends ColumnLayer {
|
|
20
|
+
static { this.layerName = 'RasterColumnLayer'; }
|
|
21
|
+
getShaders() {
|
|
22
|
+
const shaders = super.getShaders();
|
|
23
|
+
return { ...shaders, vs };
|
|
24
|
+
}
|
|
25
|
+
initializeState() {
|
|
26
|
+
// Only add attributes needed by shader
|
|
27
|
+
const attributeManager = this.getAttributeManager();
|
|
28
|
+
/* eslint-disable max-len */
|
|
29
|
+
attributeManager.addInstanced({
|
|
30
|
+
instanceElevations: {
|
|
31
|
+
size: 1,
|
|
32
|
+
transition: true,
|
|
33
|
+
accessor: 'getElevation'
|
|
34
|
+
},
|
|
35
|
+
instanceFillColors: {
|
|
36
|
+
size: this.props.colorFormat.length,
|
|
37
|
+
type: GL.UNSIGNED_BYTE,
|
|
38
|
+
normalized: true,
|
|
39
|
+
transition: true,
|
|
40
|
+
accessor: 'getFillColor',
|
|
41
|
+
defaultValue: [0, 0, 0, 255]
|
|
42
|
+
},
|
|
43
|
+
instanceLineColors: {
|
|
44
|
+
size: this.props.colorFormat.length,
|
|
45
|
+
type: GL.UNSIGNED_BYTE,
|
|
46
|
+
normalized: true,
|
|
47
|
+
transition: true,
|
|
48
|
+
accessor: 'getLineColor',
|
|
49
|
+
defaultValue: [255, 255, 255, 255]
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Adapter layer around RasterColumnLayer that converts data & accessors into correct format
|
|
55
|
+
export default class RasterLayer extends CompositeLayer {
|
|
56
|
+
static { this.layerName = 'RasterLayer'; }
|
|
57
|
+
static { this.defaultProps = defaultProps; }
|
|
58
|
+
renderLayers() {
|
|
59
|
+
// Rendering props underlying layer
|
|
60
|
+
const { data, getElevation, getFillColor, getLineColor, getLineWidth, tileIndex, updateTriggers } = this.props;
|
|
61
|
+
if (!data || !tileIndex)
|
|
62
|
+
return null;
|
|
63
|
+
const { blockWidth, blockHeight } = data;
|
|
64
|
+
assert(blockWidth === blockHeight, `blockWidth (${blockWidth}) must equal blockHeight (${blockHeight})`);
|
|
65
|
+
const [xOffset, yOffset, scale] = quadbinToOffset(tileIndex);
|
|
66
|
+
const offset = [xOffset, yOffset, scale / blockWidth];
|
|
67
|
+
// Filled Column Layer
|
|
68
|
+
const CellLayer = this.getSubLayerClass('column', RasterColumnLayer);
|
|
69
|
+
return new CellLayer(this.props, this.getSubLayerProps({
|
|
70
|
+
id: 'cell',
|
|
71
|
+
updateTriggers,
|
|
72
|
+
getElevation: this.getSubLayerAccessor(getElevation),
|
|
73
|
+
getFillColor: this.getSubLayerAccessor(getFillColor),
|
|
74
|
+
getLineColor: this.getSubLayerAccessor(getLineColor),
|
|
75
|
+
getLineWidth: this.getSubLayerAccessor(getLineWidth)
|
|
76
|
+
}), {
|
|
77
|
+
data: {
|
|
78
|
+
data, // Pass through data for getSubLayerAccessor()
|
|
79
|
+
length: blockWidth * blockHeight
|
|
80
|
+
},
|
|
81
|
+
offset
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
getSubLayerAccessor(accessor) {
|
|
85
|
+
if (typeof accessor !== 'function') {
|
|
86
|
+
return super.getSubLayerAccessor(accessor);
|
|
87
|
+
}
|
|
88
|
+
// Proxy values back in standard feature format
|
|
89
|
+
return (object, info) => {
|
|
90
|
+
const { data, index } = info;
|
|
91
|
+
const binaryData = data.data;
|
|
92
|
+
const proxy = createBinaryProxy(binaryData.cells, index);
|
|
93
|
+
// @ts-ignore (TS2349) accessor is always function
|
|
94
|
+
return accessor({ properties: proxy }, info);
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { CompositeLayer } from '@deck.gl/core';
|
|
2
|
+
import RasterLayer from "./raster-layer.js";
|
|
3
|
+
import QuadbinTileset2D from "./quadbin-tileset-2d.js";
|
|
4
|
+
import SpatialIndexTileLayer from "./spatial-index-tile-layer.js";
|
|
5
|
+
import { injectAccessToken, TilejsonPropType } from "./utils.js";
|
|
6
|
+
export const renderSubLayers = props => {
|
|
7
|
+
const tileIndex = props.tile?.index?.q;
|
|
8
|
+
if (!tileIndex)
|
|
9
|
+
return null;
|
|
10
|
+
return new RasterLayer(props, { tileIndex });
|
|
11
|
+
};
|
|
12
|
+
const defaultProps = {
|
|
13
|
+
data: TilejsonPropType
|
|
14
|
+
};
|
|
15
|
+
export default class RasterTileLayer extends CompositeLayer {
|
|
16
|
+
static { this.layerName = 'RasterTileLayer'; }
|
|
17
|
+
static { this.defaultProps = defaultProps; }
|
|
18
|
+
getLoadOptions() {
|
|
19
|
+
const loadOptions = super.getLoadOptions() || {};
|
|
20
|
+
const tileJSON = this.props.data;
|
|
21
|
+
injectAccessToken(loadOptions, tileJSON.accessToken);
|
|
22
|
+
return loadOptions;
|
|
23
|
+
}
|
|
24
|
+
renderLayers() {
|
|
25
|
+
const tileJSON = this.props.data;
|
|
26
|
+
if (!tileJSON)
|
|
27
|
+
return null;
|
|
28
|
+
const { tiles: data, minzoom: minZoom, maxzoom: maxZoom } = tileJSON;
|
|
29
|
+
return [
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
new SpatialIndexTileLayer(this.props, {
|
|
32
|
+
id: `raster-tile-layer-${this.props.id}`,
|
|
33
|
+
data,
|
|
34
|
+
// TODO: Tileset2D should be generic over TileIndex type
|
|
35
|
+
TilesetClass: QuadbinTileset2D,
|
|
36
|
+
renderSubLayers,
|
|
37
|
+
minZoom,
|
|
38
|
+
maxZoom,
|
|
39
|
+
loadOptions: this.getLoadOptions()
|
|
40
|
+
})
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TileReader } from "./carto-properties-tile.js";
|
|
2
|
+
import { parsePbf } from "./tile-loader-utils.js";
|
|
3
|
+
const CartoPropertiesTileLoader = {
|
|
4
|
+
name: 'CARTO Properties Tile',
|
|
5
|
+
version: '1',
|
|
6
|
+
id: 'cartoPropertiesTile',
|
|
7
|
+
module: 'carto',
|
|
8
|
+
extensions: ['pbf'],
|
|
9
|
+
mimeTypes: ['application/vnd.carto-properties-tile'],
|
|
10
|
+
category: 'geometry',
|
|
11
|
+
worker: false,
|
|
12
|
+
parse: async (arrayBuffer, options) => parseCartoPropertiesTile(arrayBuffer, options),
|
|
13
|
+
parseSync: parseCartoPropertiesTile,
|
|
14
|
+
options: {}
|
|
15
|
+
};
|
|
16
|
+
function parseCartoPropertiesTile(arrayBuffer, options) {
|
|
17
|
+
if (!arrayBuffer)
|
|
18
|
+
return null;
|
|
19
|
+
return parsePbf(arrayBuffer, TileReader);
|
|
20
|
+
}
|
|
21
|
+
export default CartoPropertiesTileLoader;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NumericPropKeyValueReader, PropertiesReader } from "./carto-tile.js";
|
|
2
|
+
export class TileReader {
|
|
3
|
+
static read(pbf, end) {
|
|
4
|
+
return pbf.readFields(TileReader._readField, { properties: [], numericProps: {} }, end);
|
|
5
|
+
}
|
|
6
|
+
static _readField(tag, obj, pbf) {
|
|
7
|
+
if (tag === 1)
|
|
8
|
+
obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));
|
|
9
|
+
else if (tag === 2) {
|
|
10
|
+
const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);
|
|
11
|
+
obj.numericProps[entry.key] = entry.value;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TileReader } from "./carto-raster-tile.js";
|
|
2
|
+
import { parsePbf } from "./tile-loader-utils.js";
|
|
3
|
+
import { getWorkerUrl } from "../../utils.js";
|
|
4
|
+
const VERSION = typeof "9.0.0-beta.2" !== 'undefined' ? "9.0.0-beta.2" : 'latest';
|
|
5
|
+
const id = 'cartoRasterTile';
|
|
6
|
+
const DEFAULT_OPTIONS = {
|
|
7
|
+
cartoRasterTile: {
|
|
8
|
+
workerUrl: getWorkerUrl(id, VERSION)
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const CartoRasterTileLoader = {
|
|
12
|
+
name: 'CARTO Raster Tile',
|
|
13
|
+
version: VERSION,
|
|
14
|
+
id,
|
|
15
|
+
module: 'carto',
|
|
16
|
+
extensions: ['pbf'],
|
|
17
|
+
mimeTypes: ['application/vnd.carto-raster-tile'],
|
|
18
|
+
category: 'geometry',
|
|
19
|
+
parse: async (arrayBuffer, options) => parseCartoRasterTile(arrayBuffer, options),
|
|
20
|
+
parseSync: parseCartoRasterTile,
|
|
21
|
+
worker: true,
|
|
22
|
+
options: DEFAULT_OPTIONS
|
|
23
|
+
};
|
|
24
|
+
function parseCartoRasterTile(arrayBuffer, options) {
|
|
25
|
+
if (!arrayBuffer)
|
|
26
|
+
return null;
|
|
27
|
+
const tile = parsePbf(arrayBuffer, TileReader);
|
|
28
|
+
const { bands, blockHeight, blockWidth } = tile;
|
|
29
|
+
const numericProps = {};
|
|
30
|
+
for (let i = 0; i < bands.length; i++) {
|
|
31
|
+
const { name, data } = bands[i];
|
|
32
|
+
numericProps[name] = data;
|
|
33
|
+
}
|
|
34
|
+
return { blockWidth, blockHeight, cells: { numericProps, properties: [] } };
|
|
35
|
+
}
|
|
36
|
+
export default CartoRasterTileLoader;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readPackedTypedArray } from "./fast-pbf.js";
|
|
2
|
+
const ARRAY_TYPES = {
|
|
3
|
+
uint8: Uint8Array,
|
|
4
|
+
uint16: Uint16Array,
|
|
5
|
+
uint32: Uint32Array,
|
|
6
|
+
uint64: BigUint64Array,
|
|
7
|
+
int8: Int8Array,
|
|
8
|
+
int16: Int16Array,
|
|
9
|
+
int32: Int32Array,
|
|
10
|
+
int64: BigInt64Array,
|
|
11
|
+
float32: Float32Array,
|
|
12
|
+
float64: Float64Array
|
|
13
|
+
};
|
|
14
|
+
// Band ========================================
|
|
15
|
+
export class BandReader {
|
|
16
|
+
static read(pbf, end) {
|
|
17
|
+
return pbf.readFields(BandReader._readField, { name: '', type: '', data: null }, end);
|
|
18
|
+
}
|
|
19
|
+
static _readField(tag, obj, pbf) {
|
|
20
|
+
if (tag === 1)
|
|
21
|
+
obj.name = pbf.readString();
|
|
22
|
+
else if (tag === 2)
|
|
23
|
+
obj.type = pbf.readString();
|
|
24
|
+
else if (tag === 3) {
|
|
25
|
+
const TypedArray = ARRAY_TYPES[obj.type];
|
|
26
|
+
if (!TypedArray) {
|
|
27
|
+
throw Error(`Invalid data type: ${obj.type}`);
|
|
28
|
+
}
|
|
29
|
+
obj.data = {};
|
|
30
|
+
readPackedTypedArray(TypedArray, pbf, obj.data);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class TileReader {
|
|
35
|
+
static read(pbf, end) {
|
|
36
|
+
return pbf.readFields(TileReader._readField, { blockWidth: 0, blockHeight: 0, bands: [] }, end);
|
|
37
|
+
}
|
|
38
|
+
static _readField(tag, obj, pbf) {
|
|
39
|
+
if (tag === 1)
|
|
40
|
+
obj.blockWidth = pbf.readVarint();
|
|
41
|
+
else if (tag === 2)
|
|
42
|
+
obj.blockHeight = pbf.readVarint();
|
|
43
|
+
else if (tag === 3)
|
|
44
|
+
obj.bands.push(BandReader.read(pbf, pbf.readVarint() + pbf.pos));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { TileReader } from "./carto-spatial-tile.js";
|
|
2
|
+
import { parsePbf } from "./tile-loader-utils.js";
|
|
3
|
+
import { getWorkerUrl } from "../../utils.js";
|
|
4
|
+
import { binaryToSpatialjson } from "./spatialjson-utils.js";
|
|
5
|
+
const VERSION = typeof "9.0.0-beta.2" !== 'undefined' ? "9.0.0-beta.2" : 'latest';
|
|
6
|
+
const id = 'cartoSpatialTile';
|
|
7
|
+
const DEFAULT_OPTIONS = {
|
|
8
|
+
cartoSpatialTile: {
|
|
9
|
+
scheme: 'quadbin',
|
|
10
|
+
workerUrl: getWorkerUrl(id, VERSION)
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const CartoSpatialTileLoader = {
|
|
14
|
+
name: 'CARTO Spatial Tile',
|
|
15
|
+
version: VERSION,
|
|
16
|
+
id,
|
|
17
|
+
module: 'carto',
|
|
18
|
+
extensions: ['pbf'],
|
|
19
|
+
mimeTypes: ['application/vnd.carto-spatial-tile'],
|
|
20
|
+
category: 'geometry',
|
|
21
|
+
parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),
|
|
22
|
+
parseSync: parseCartoSpatialTile,
|
|
23
|
+
worker: true,
|
|
24
|
+
options: DEFAULT_OPTIONS
|
|
25
|
+
};
|
|
26
|
+
function parseCartoSpatialTile(arrayBuffer, options) {
|
|
27
|
+
if (!arrayBuffer)
|
|
28
|
+
return null;
|
|
29
|
+
const tile = parsePbf(arrayBuffer, TileReader);
|
|
30
|
+
const { cells } = tile;
|
|
31
|
+
const scheme = options?.cartoSpatialTile?.scheme;
|
|
32
|
+
const data = { cells, scheme };
|
|
33
|
+
return binaryToSpatialjson(data);
|
|
34
|
+
}
|
|
35
|
+
export default CartoSpatialTileLoader;
|