@deck.gl/carto 8.8.9 → 8.8.11

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.
Files changed (96) hide show
  1. package/dist/dist.dev.js +1747 -1555
  2. package/dist/es5/api/layer-map.js +104 -9
  3. package/dist/es5/api/layer-map.js.map +1 -1
  4. package/dist/es5/api/maps-v3-client.js +8 -8
  5. package/dist/es5/api/maps-v3-client.js.map +1 -1
  6. package/dist/es5/api/parseMap.js +38 -4
  7. package/dist/es5/api/parseMap.js.map +1 -1
  8. package/dist/es5/api/types.js +2 -0
  9. package/dist/es5/api/types.js.map +1 -0
  10. package/dist/es5/layers/carto-tile-layer.js +33 -107
  11. package/dist/es5/layers/carto-tile-layer.js.map +1 -1
  12. package/dist/es5/layers/schema/carto-spatial-tile-loader.js +6 -30
  13. package/dist/es5/layers/schema/carto-spatial-tile-loader.js.map +1 -1
  14. package/dist/es5/layers/schema/carto-tile.js +30 -6
  15. package/dist/es5/layers/schema/carto-tile.js.map +1 -1
  16. package/dist/es5/layers/schema/carto-vector-tile-loader.js +81 -0
  17. package/dist/es5/layers/schema/carto-vector-tile-loader.js.map +1 -0
  18. package/dist/es5/layers/schema/tile-loader-utils.js +34 -0
  19. package/dist/es5/layers/schema/tile-loader-utils.js.map +1 -0
  20. package/dist/es5/layers/spatial-index-tile-layer.js +40 -0
  21. package/dist/es5/layers/spatial-index-tile-layer.js.map +1 -1
  22. package/dist/esm/api/layer-map.js +85 -9
  23. package/dist/esm/api/layer-map.js.map +1 -1
  24. package/dist/esm/api/maps-v3-client.js +3 -2
  25. package/dist/esm/api/maps-v3-client.js.map +1 -1
  26. package/dist/esm/api/parseMap.js +41 -5
  27. package/dist/esm/api/parseMap.js.map +1 -1
  28. package/dist/esm/api/types.js +2 -0
  29. package/dist/esm/api/types.js.map +1 -0
  30. package/dist/esm/layers/carto-tile-layer.js +31 -82
  31. package/dist/esm/layers/carto-tile-layer.js.map +1 -1
  32. package/dist/esm/layers/schema/carto-spatial-tile-loader.js +4 -27
  33. package/dist/esm/layers/schema/carto-spatial-tile-loader.js.map +1 -1
  34. package/dist/esm/layers/schema/carto-tile.js +22 -6
  35. package/dist/esm/layers/schema/carto-tile.js.map +1 -1
  36. package/dist/esm/layers/schema/carto-vector-tile-loader.js +40 -0
  37. package/dist/esm/layers/schema/carto-vector-tile-loader.js.map +1 -0
  38. package/dist/esm/layers/schema/tile-loader-utils.js +23 -0
  39. package/dist/esm/layers/schema/tile-loader-utils.js.map +1 -0
  40. package/dist/esm/layers/spatial-index-tile-layer.js +40 -1
  41. package/dist/esm/layers/spatial-index-tile-layer.js.map +1 -1
  42. package/dist.min.js +138 -138
  43. package/package.json +2 -2
  44. package/src/api/layer-map.ts +103 -17
  45. package/src/api/maps-v3-client.ts +3 -3
  46. package/src/api/parseMap.ts +80 -15
  47. package/src/api/types.ts +108 -0
  48. package/src/layers/carto-tile-layer.ts +32 -82
  49. package/src/layers/schema/carto-spatial-tile-loader.ts +4 -27
  50. package/src/layers/schema/carto-tile.ts +31 -6
  51. package/src/layers/schema/carto-vector-tile-loader.ts +39 -0
  52. package/src/layers/schema/tile-loader-utils.ts +22 -0
  53. package/src/layers/spatial-index-tile-layer.ts +37 -1
  54. package/typed/api/layer-map.d.ts +10 -13
  55. package/typed/api/layer-map.d.ts.map +1 -1
  56. package/typed/api/parseMap.d.ts.map +1 -1
  57. package/typed/api/types.d.ts +87 -0
  58. package/typed/api/types.d.ts.map +1 -0
  59. package/typed/layers/carto-tile-layer.d.ts +2 -0
  60. package/typed/layers/carto-tile-layer.d.ts.map +1 -1
  61. package/typed/layers/schema/carto-spatial-tile-loader.d.ts.map +1 -1
  62. package/typed/layers/schema/carto-tile.d.ts +4 -0
  63. package/typed/layers/schema/carto-tile.d.ts.map +1 -1
  64. package/typed/layers/schema/carto-vector-tile-loader.d.ts +4 -0
  65. package/typed/layers/schema/carto-vector-tile-loader.d.ts.map +1 -0
  66. package/typed/layers/schema/tile-loader-utils.d.ts +5 -0
  67. package/typed/layers/schema/tile-loader-utils.d.ts.map +1 -0
  68. package/typed/layers/spatial-index-tile-layer.d.ts +2 -1
  69. package/typed/layers/spatial-index-tile-layer.d.ts.map +1 -1
  70. package/typed/api/index.js +0 -3
  71. package/typed/api/layer-map.js +0 -264
  72. package/typed/api/maps-api-common.js +0 -50
  73. package/typed/api/maps-client.js +0 -125
  74. package/typed/api/maps-v3-client.js +0 -304
  75. package/typed/api/parseMap.js +0 -178
  76. package/typed/basemap.js +0 -9
  77. package/typed/config.js +0 -35
  78. package/typed/index.js +0 -10
  79. package/typed/layers/carto-layer.js +0 -173
  80. package/typed/layers/carto-tile-layer.js +0 -105
  81. package/typed/layers/h3-tile-layer.js +0 -47
  82. package/typed/layers/h3-tileset-2d.js +0 -85
  83. package/typed/layers/quadkey-tile-layer.d.ts +0 -21
  84. package/typed/layers/quadkey-tile-layer.d.ts.map +0 -1
  85. package/typed/layers/quadkey-tile-layer.js +0 -42
  86. package/typed/layers/quadkey-tileset-2d.d.ts +0 -15
  87. package/typed/layers/quadkey-tileset-2d.d.ts.map +0 -1
  88. package/typed/layers/quadkey-tileset-2d.js +0 -36
  89. package/typed/layers/schema/carto-tile.js +0 -161
  90. package/typed/layers/spatial-index-tile-layer.js +0 -40
  91. package/typed/style/color-bins-style.js +0 -12
  92. package/typed/style/color-categories-style.js +0 -16
  93. package/typed/style/color-continuous-style.js +0 -12
  94. package/typed/style/palette.js +0 -62
  95. package/typed/style/utils.js +0 -15
  96. package/typed/utils.js +0 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["getDefaultCredentials","buildMapsUrlFromBase","buildStatsUrlFromBase","API_VERSIONS","COLUMNS_SUPPORT","encodeParameter","FORMATS","GEO_COLUMN_SUPPORT","MAP_TYPES","TILE_FORMATS","parseMap","log","assert","MAX_GET_LENGTH","DEFAULT_CLIENT","request","method","url","headers","customHeaders","accessToken","body","Accept","Authorization","fetch","error","Error","requestJson","response","json","ok","dealWithError","requestData","format","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","queryParameters","parameters","sourceName","QUERY","push","JSON","stringify","join","isSpatialIndexGeoColumn","spatialIndex","split","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","V3","apiBaseUrl","includes","fetchLayerData","formatTiles","mapFormat","_fetchDataUrl","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","Object","values","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","_fetchTilestats","attribute","statsUrl","stats","attributes","tilestats","layers","index","findIndex","d","fillInMapDatasets","datasets","token","promises","map","Promise","all","fillInTileStats","keplerMapConfig","config","visState","layer","channel","keys","visualChannels","name","find","id","dataId","TILESET","filteredAttributes","a","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval","geojsonLayers","filter","geojsonDatasetIds","forEach"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {\n getDefaultCredentials,\n buildMapsUrlFromBase,\n buildStatsUrlFromBase,\n CloudNativeCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n QueryParameters,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\n\nexport type Headers = Record<string, string>;\ninterface RequestParams {\n method?: string;\n url: string;\n headers?: Headers;\n accessToken?: string;\n body?: any;\n}\n\n/**\n * Request against Maps API\n */\nasync function request({\n method,\n url,\n headers: customHeaders,\n accessToken,\n body\n}: RequestParams): Promise<Response> {\n const headers: Headers = {\n ...customHeaders,\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n return await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n}\n\nasync function requestJson<T = unknown>({\n method,\n url,\n headers,\n accessToken,\n body\n}: RequestParams): Promise<T> {\n const response = await request({method, url, headers, accessToken, body});\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n return json as T;\n}\n\nasync function requestData({\n method,\n url,\n accessToken,\n format,\n body\n}: RequestParams & {\n format: Format;\n}): Promise<Response | unknown> {\n if (format === FORMATS.NDJSON) {\n return request({method, url, accessToken, body});\n }\n\n const data = await requestJson<any>({method, url, accessToken, body});\n return data.rows ? data.rows : data;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}: {response: Response; error?: string}): never {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\ntype FetchLayerDataParams = {\n type: MapType;\n source: string;\n connection: string;\n credentials: CloudNativeCredentials;\n geoColumn?: string;\n columns?: string[];\n clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n headers?: Headers;\n aggregationExp?: string;\n aggregationResLevel?: number;\n queryParameters?: QueryParameters;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (queryParameters) {\n parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));\n }\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n } else if (isSpatialIndexGeoColumn(geoColumn)) {\n // Default aggregationExp required for spatial index layers\n parameters.push(encodeParameter('aggregationExp', '1 AS value'));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\n }\n\n return parameters.join('&');\n}\n\nfunction isSpatialIndexGeoColumn(geoColumn: string | undefined) {\n const spatialIndex = geoColumn?.split(':')[0];\n return spatialIndex === 'h3' || spatialIndex === 'quadbin';\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationResLevel,\n aggregationExp,\n queryParameters\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT,\n queryParameters\n });\n return await requestJson({method: 'POST', url: baseUrl, headers, accessToken, body});\n }\n\n return await requestJson({url, headers, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata: MapInstantiation, format: Format): string | null {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n\n if (!aggregationExp) {\n assert(\n !aggregationResLevel,\n 'Have aggregationResLevel, but aggregationExp parameter is missing'\n );\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string,\n headers?: Headers,\n queryParameters?: QueryParameters\n) {\n const {\n aggregationExp,\n aggregationResLevel,\n connectionName: connection,\n columns,\n format,\n geoColumn,\n source,\n type\n } = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n aggregationExp,\n aggregationResLevel,\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n headers,\n source,\n type,\n queryParameters\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n dataset.data = await requestData({url, format: mapFormat, accessToken});\n\n return true;\n}\n\nasync function _fetchTilestats(\n attribute,\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials\n) {\n const {connectionName: connection, source, type} = dataset;\n\n const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);\n let url = `${statsUrl}/${connection}/`;\n if (type === MAP_TYPES.QUERY) {\n url += `${attribute}?q=${source}`;\n } else {\n // MAP_TYPE.TABLE\n url += `${source}/${attribute}`;\n }\n const stats = await requestData({url, format: FORMATS.JSON, accessToken});\n\n // Replace tilestats for attribute with value from API\n const {attributes} = dataset.data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\n\nasync function fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials,\n headers?: Headers\n) {\n const promises = datasets.map(dataset =>\n _fetchMapDataset(dataset, token, credentials, clientId, headers)\n );\n return await Promise.all(promises);\n}\n\nasync function fillInTileStats(\n {datasets, keplerMapConfig, token},\n credentials: CloudNativeCredentials\n) {\n const attributes: {attribute?: string; dataset?: any}[] = [];\n const {layers} = keplerMapConfig.config.visState;\n for (const layer of layers) {\n for (const channel of Object.keys(layer.visualChannels)) {\n const attribute = layer.visualChannels[channel]?.name;\n if (attribute) {\n const dataset = datasets.find(d => d.id === layer.config.dataId);\n if (dataset.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {\n // Only fetch stats for QUERY & TABLE map types\n attributes.push({attribute, dataset});\n }\n }\n }\n }\n // Remove duplicates to avoid repeated requests\n const filteredAttributes: {attribute?: string; dataset?: any}[] = [];\n for (const a of attributes) {\n if (\n !filteredAttributes.find(\n ({attribute, dataset}) => attribute === a.attribute && dataset === a.dataset\n )\n ) {\n filteredAttributes.push(a);\n }\n }\n\n const promises = filteredAttributes.map(({attribute, dataset}) =>\n _fetchTilestats(attribute, dataset, token, credentials)\n );\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n headers,\n autoRefresh,\n onNewData\n}: {\n cartoMapId: string;\n clientId: string;\n credentials?: CloudNativeCredentials;\n headers?: Headers;\n autoRefresh?: number;\n onNewData?: (map: any) => void;\n}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n } as CloudNativeCredentials;\n const {accessToken} = localCreds;\n\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n\n assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n if (autoRefresh || onNewData) {\n assert(onNewData, 'Must define `onNewData` when using autoRefresh');\n assert(typeof onNewData === 'function', '`onNewData` must be a function');\n assert(\n typeof autoRefresh === 'number' && autoRefresh > 0,\n '`autoRefresh` must be a positive number'\n );\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await requestJson<any>({url, headers, accessToken});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh: (() => void) | undefined;\n if (autoRefresh) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const intervalId = setInterval(async () => {\n const changed = await fillInMapDatasets(map, clientId, localCreds, headers);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\n const geojsonDatasetIds = geojsonLayers.map(({config}) => config.dataId);\n map.datasets.forEach(dataset => {\n if (geojsonDatasetIds.includes(dataset.id)) {\n dataset.format = 'geojson';\n }\n });\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds, headers);\n\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
1
+ {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["getDefaultCredentials","buildMapsUrlFromBase","buildStatsUrlFromBase","API_VERSIONS","COLUMNS_SUPPORT","encodeParameter","FORMATS","GEO_COLUMN_SUPPORT","MAP_TYPES","TILE_FORMATS","parseMap","log","assert","MAX_GET_LENGTH","DEFAULT_CLIENT","request","method","url","headers","customHeaders","accessToken","body","Accept","Authorization","fetch","error","Error","requestJson","response","json","ok","dealWithError","requestData","format","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","queryParameters","parameters","sourceName","QUERY","push","JSON","stringify","join","isSpatialIndexGeoColumn","spatialIndex","split","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","V3","apiBaseUrl","includes","fetchLayerData","formatTiles","mapFormat","_fetchDataUrl","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","Object","values","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","_fetchTilestats","attribute","statsUrl","stats","attributes","tilestats","layers","index","findIndex","d","fillInMapDatasets","datasets","token","promises","map","Promise","all","fillInTileStats","keplerMapConfig","config","visState","layer","channel","keys","visualChannels","name","find","id","dataId","TILESET","filteredAttributes","a","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval","geojsonLayers","filter","geojsonDatasetIds","forEach"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {\n getDefaultCredentials,\n buildMapsUrlFromBase,\n buildStatsUrlFromBase,\n CloudNativeCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n QueryParameters,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\n\nexport type Headers = Record<string, string>;\ninterface RequestParams {\n method?: string;\n url: string;\n headers?: Headers;\n accessToken?: string;\n body?: any;\n}\n\n/**\n * Request against Maps API\n */\nasync function request({\n method,\n url,\n headers: customHeaders,\n accessToken,\n body\n}: RequestParams): Promise<Response> {\n const headers: Headers = {\n ...customHeaders,\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n return await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n}\n\nasync function requestJson<T = unknown>({\n method,\n url,\n headers,\n accessToken,\n body\n}: RequestParams): Promise<T> {\n const response = await request({method, url, headers, accessToken, body});\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n return json as T;\n}\n\nasync function requestData({\n method,\n url,\n accessToken,\n format,\n body\n}: RequestParams & {\n format: Format;\n}): Promise<Response | unknown> {\n if (format === FORMATS.NDJSON) {\n return request({method, url, accessToken, body});\n }\n\n const data = await requestJson<any>({method, url, accessToken, body});\n return data.rows ? data.rows : data;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}: {response: Response; error?: string}): never {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\ntype FetchLayerDataParams = {\n type: MapType;\n source: string;\n connection: string;\n credentials: CloudNativeCredentials;\n geoColumn?: string;\n columns?: string[];\n clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n headers?: Headers;\n aggregationExp?: string;\n aggregationResLevel?: number;\n queryParameters?: QueryParameters;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (queryParameters) {\n parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));\n }\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n } else if (isSpatialIndexGeoColumn(geoColumn)) {\n // Default aggregationExp required for spatial index layers\n parameters.push(encodeParameter('aggregationExp', '1 AS value'));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\n }\n\n return parameters.join('&');\n}\n\nfunction isSpatialIndexGeoColumn(geoColumn: string | undefined) {\n const spatialIndex = geoColumn?.split(':')[0];\n return spatialIndex === 'h3' || spatialIndex === 'quadbin';\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationResLevel,\n aggregationExp,\n queryParameters\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT,\n queryParameters\n });\n return await requestJson({method: 'POST', url: baseUrl, headers, accessToken, body});\n }\n\n return await requestJson({url, headers, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata: MapInstantiation, format: Format): string | null {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n\n if (!aggregationExp) {\n assert(\n !aggregationResLevel,\n 'Have aggregationResLevel, but aggregationExp parameter is missing'\n );\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string,\n headers?: Headers\n) {\n const {\n aggregationExp,\n aggregationResLevel,\n connectionName: connection,\n columns,\n format,\n geoColumn,\n source,\n type,\n queryParameters\n } = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n aggregationExp,\n aggregationResLevel,\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n headers,\n source,\n type,\n queryParameters\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n dataset.data = await requestData({url, format: mapFormat, accessToken});\n\n return true;\n}\n\nasync function _fetchTilestats(\n attribute,\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials\n) {\n const {connectionName: connection, source, type} = dataset;\n\n const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);\n let url = `${statsUrl}/${connection}/`;\n if (type === MAP_TYPES.QUERY) {\n url += `${attribute}?q=${source}`;\n } else {\n // MAP_TYPE.TABLE\n url += `${source}/${attribute}`;\n }\n const stats = await requestData({url, format: FORMATS.JSON, accessToken});\n\n // Replace tilestats for attribute with value from API\n const {attributes} = dataset.data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\n\nasync function fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials,\n headers?: Headers\n) {\n const promises = datasets.map(dataset =>\n _fetchMapDataset(dataset, token, credentials, clientId, headers)\n );\n return await Promise.all(promises);\n}\n\nasync function fillInTileStats(\n {datasets, keplerMapConfig, token},\n credentials: CloudNativeCredentials\n) {\n const attributes: {attribute?: string; dataset?: any}[] = [];\n const {layers} = keplerMapConfig.config.visState;\n for (const layer of layers) {\n for (const channel of Object.keys(layer.visualChannels)) {\n const attribute = layer.visualChannels[channel]?.name;\n if (attribute) {\n const dataset = datasets.find(d => d.id === layer.config.dataId);\n if (dataset.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {\n // Only fetch stats for QUERY & TABLE map types\n attributes.push({attribute, dataset});\n }\n }\n }\n }\n // Remove duplicates to avoid repeated requests\n const filteredAttributes: {attribute?: string; dataset?: any}[] = [];\n for (const a of attributes) {\n if (\n !filteredAttributes.find(\n ({attribute, dataset}) => attribute === a.attribute && dataset === a.dataset\n )\n ) {\n filteredAttributes.push(a);\n }\n }\n\n const promises = filteredAttributes.map(({attribute, dataset}) =>\n _fetchTilestats(attribute, dataset, token, credentials)\n );\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n headers,\n autoRefresh,\n onNewData\n}: {\n cartoMapId: string;\n clientId: string;\n credentials?: CloudNativeCredentials;\n headers?: Headers;\n autoRefresh?: number;\n onNewData?: (map: any) => void;\n}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n } as CloudNativeCredentials;\n const {accessToken} = localCreds;\n\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n\n assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n if (autoRefresh || onNewData) {\n assert(onNewData, 'Must define `onNewData` when using autoRefresh');\n assert(typeof onNewData === 'function', '`onNewData` must be a function');\n assert(\n typeof autoRefresh === 'number' && autoRefresh > 0,\n '`autoRefresh` must be a positive number'\n );\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await requestJson<any>({url, headers, accessToken});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh: (() => void) | undefined;\n if (autoRefresh) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const intervalId = setInterval(async () => {\n const changed = await fillInMapDatasets(map, clientId, localCreds, headers);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\n const geojsonDatasetIds = geojsonLayers.map(({config}) => config.dataId);\n map.datasets.forEach(dataset => {\n if (geojsonDatasetIds.includes(dataset.id)) {\n dataset.format = 'geojson';\n }\n });\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds, headers);\n\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
@@ -1,4 +1,4 @@
1
- import { AGGREGATION, getLayer, getColorAccessor, getColorValueAccessor, getSizeAccessor, getTextAccessor, getTextPixelOffsetAccessor, OPACITY_MAP, opacityToAlpha } from './layer-map';
1
+ import { AGGREGATION, getLayer, getColorAccessor, getColorValueAccessor, getSizeAccessor, getTextAccessor, getTextPixelOffsetAccessor, OPACITY_MAP, opacityToAlpha, getIconUrlAccessor, negateAccessor, getMaxMarkerSize } from './layer-map';
2
2
  import { _flatten as flatten, log } from '@deck.gl/core';
3
3
  import { assert } from '../utils';
4
4
  export function parseMap(json) {
@@ -167,6 +167,8 @@ function createChannelProps(visualChannels, type, config, data) {
167
167
  const {
168
168
  colorField,
169
169
  colorScale,
170
+ radiusField,
171
+ radiusScale,
170
172
  sizeField,
171
173
  sizeScale,
172
174
  strokeColorField,
@@ -214,6 +216,10 @@ function createChannelProps(visualChannels, type, config, data) {
214
216
  }, visConfig.opacity, data);
215
217
  }
216
218
 
219
+ if (radiusField || sizeField) {
220
+ result.getPointRadius = getSizeAccessor(radiusField || sizeField, radiusScale || sizeScale, visConfig.sizeAggregation, visConfig.radiusRange || visConfig.sizeRange, data);
221
+ }
222
+
217
223
  if (strokeColorField) {
218
224
  const fallbackOpacity = type === 'point' ? visConfig.opacity : 1;
219
225
  const opacity = visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : fallbackOpacity;
@@ -231,15 +237,45 @@ function createChannelProps(visualChannels, type, config, data) {
231
237
  result.getElevation = getSizeAccessor(heightField, heightScale, visConfig.heightAggregation, visConfig.heightRange || visConfig.sizeRange, data);
232
238
  }
233
239
 
234
- if (sizeField) {
235
- result.getPointRadius = getSizeAccessor(sizeField, sizeScale, visConfig.sizeAggregation, visConfig.radiusRange || visConfig.sizeRange, data);
236
- }
237
-
238
240
  if (textLabelField) {
239
241
  result.getText = getTextAccessor(textLabelField, data);
240
242
  result.pointType = 'text';
241
243
  const radius = result.getPointRadius || visConfig.radius;
242
244
  result.getTextPixelOffset = getTextPixelOffsetAccessor(textLabel, radius);
245
+ } else if (visConfig.customMarkers) {
246
+ const maxIconSize = getMaxMarkerSize(visConfig, visualChannels);
247
+ const {
248
+ getPointRadius,
249
+ getFillColor
250
+ } = result;
251
+ result.pointType = 'icon';
252
+ result.getIcon = getIconUrlAccessor(visualChannels.customMarkersField, visConfig.customMarkersUrl, visConfig.customMarkersRange, maxIconSize, data);
253
+ result._subLayerProps = {
254
+ 'points-icon': {
255
+ loadOptions: {
256
+ image: {
257
+ type: 'imagebitmap'
258
+ },
259
+ imagebitmap: {
260
+ resizeWidth: maxIconSize,
261
+ resizeHeight: maxIconSize,
262
+ resizeQuality: 'high'
263
+ }
264
+ }
265
+ }
266
+ };
267
+
268
+ if (getFillColor) {
269
+ result.getIconColor = getFillColor;
270
+ }
271
+
272
+ if (getPointRadius) {
273
+ result.getIconSize = getPointRadius;
274
+ }
275
+
276
+ if (visualChannels.rotationField) {
277
+ result.getIconAngle = negateAccessor(getSizeAccessor(visualChannels.rotationField, undefined, null, undefined, data));
278
+ }
243
279
  }
244
280
 
245
281
  return result;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/parseMap.ts"],"names":["AGGREGATION","getLayer","getColorAccessor","getColorValueAccessor","getSizeAccessor","getTextAccessor","getTextPixelOffsetAccessor","OPACITY_MAP","opacityToAlpha","_flatten","flatten","log","assert","parseMap","json","keplerMapConfig","datasets","version","mapState","mapStyle","config","layers","layerBlending","interactionConfig","visState","id","title","description","createdAt","updatedAt","initialViewState","extractTextLayers","reverse","map","type","visualChannels","dataId","dataset","find","d","data","Layer","propMap","defaultProps","createBlendingProps","textLabel","createInteractionProps","createStyleProps","createChannelProps","e","error","message","undefined","rest","configRest","filter","t","field","name","label","visConfig","opacity","parameters","blendFunc","blendEquation","pickable","tooltip","enabled","autoHighlight","mapProps","source","target","mapping","sourceKey","sourceValue","targetKey","key","value","Object","entries","result","stroked","getLineColor","getFillColor","colorAccessor","Array","isArray","color","opacityKey","highlightColor","enable3d","colorField","colorScale","sizeField","sizeScale","strokeColorField","strokeColorScale","heightField","heightScale","textLabelField","colorScaleType","colorAggregation","getColorValue","getColorWeight","aggregation","colorRange","range","fallbackOpacity","strokeOpacity","strokeColorAggregation","strokeColorRange","getElevation","heightAggregation","heightRange","sizeRange","getPointRadius","sizeAggregation","radiusRange","getText","pointType","radius","getTextPixelOffset"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {\n AGGREGATION,\n getLayer,\n getColorAccessor,\n getColorValueAccessor,\n getSizeAccessor,\n getTextAccessor,\n getTextPixelOffsetAccessor,\n OPACITY_MAP,\n opacityToAlpha\n} from './layer-map';\nimport {_flatten as flatten, log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nexport function parseMap(json) {\n const {keplerMapConfig, datasets} = json;\n assert(keplerMapConfig.version === 'v1', 'Only support Kepler v1');\n const {mapState, mapStyle} = keplerMapConfig.config;\n const {layers, layerBlending, interactionConfig} = keplerMapConfig.config.visState;\n\n return {\n id: json.id,\n title: json.title,\n description: json.description,\n createdAt: json.createdAt,\n updatedAt: json.updatedAt,\n initialViewState: mapState,\n mapStyle,\n layers: extractTextLayers(layers.reverse()).map(({id, type, config, visualChannels}) => {\n try {\n const {dataId} = config;\n const dataset = datasets.find(d => d.id === dataId);\n assert(dataset, `No dataset matching dataId: ${dataId}`);\n const {data} = dataset;\n assert(data, `No data loaded for dataId: ${dataId}`);\n const {Layer, propMap, defaultProps} = getLayer(type, config, dataset);\n return new Layer({\n id,\n data,\n ...defaultProps,\n ...createBlendingProps(layerBlending),\n ...(!config.textLabel && createInteractionProps(interactionConfig)),\n ...createStyleProps(config, propMap),\n ...createChannelProps(visualChannels, type, config, data) // Must come after style\n });\n } catch (e: any) {\n log.error(e.message)();\n return undefined;\n }\n })\n };\n}\n\nfunction extractTextLayers(layers) {\n return flatten(\n layers.map(({id, config, ...rest}) => {\n const {textLabel, ...configRest} = config;\n return [\n // Original layer without textLabel\n {id, config: configRest, ...rest},\n\n // One layer per valid text label, with full opacity\n ...textLabel\n .filter(t => t.field)\n .map(t => {\n return {\n id: `${id}-label-${t.field.name}`,\n config: {\n textLabel: t,\n ...configRest,\n label: `${config.label}-label-${t.field.name}`,\n visConfig: {...configRest.visConfig, opacity: 1}\n },\n ...rest\n };\n })\n ];\n })\n );\n}\n\nfunction createBlendingProps(layerBlending) {\n if (layerBlending === 'additive') {\n return {\n parameters: {\n blendFunc: [GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: GL.FUNC_ADD\n }\n };\n } else if (layerBlending === 'subtractive') {\n return {\n parameters: {\n blendFunc: [GL.ONE, GL.ONE_MINUS_DST_COLOR, GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: [GL.FUNC_SUBTRACT, GL.FUNC_ADD]\n }\n };\n }\n\n return {};\n}\n\nfunction createInteractionProps(interactionConfig) {\n const pickable = interactionConfig && interactionConfig.tooltip.enabled;\n return {\n autoHighlight: pickable,\n pickable\n };\n}\n\nfunction mapProps(source, target, mapping) {\n for (const sourceKey in mapping) {\n const sourceValue = source[sourceKey];\n const targetKey = mapping[sourceKey];\n if (sourceValue === undefined) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (typeof targetKey === 'string') {\n target[targetKey] = sourceValue;\n } else if (typeof targetKey === 'function') {\n const [key, value] = Object.entries(targetKey(sourceValue))[0];\n target[key] = value;\n } else if (typeof targetKey === 'object') {\n // Nested definition, recurse down one level (also handles arrays)\n mapProps(sourceValue, target, targetKey);\n }\n }\n}\n\nfunction createStyleProps(config, mapping) {\n const result: Record<string, any> = {};\n mapProps(config, result, mapping);\n\n // Kepler format sometimes omits strokeColor. TODO: remove once we can rely on\n // `strokeColor` always being set when `stroke: true`.\n if (result.stroked && !result.getLineColor) {\n result.getLineColor = result.getFillColor;\n }\n\n for (const colorAccessor in OPACITY_MAP) {\n if (Array.isArray(result[colorAccessor])) {\n const color = [...result[colorAccessor]];\n const opacityKey = OPACITY_MAP[colorAccessor];\n const opacity = config.visConfig[opacityKey];\n color[3] = opacityToAlpha(opacity);\n result[colorAccessor] = color;\n }\n }\n\n result.highlightColor = config.visConfig.enable3d ? [255, 255, 255, 60] : [252, 242, 26, 255];\n return result;\n}\n\n/* eslint-disable complexity, max-statements */\nfunction createChannelProps(visualChannels, type, config, data) {\n const {colorField, colorScale, sizeField, sizeScale, strokeColorField, strokeColorScale} =\n visualChannels;\n let {heightField, heightScale} = visualChannels;\n if (type === 'hexagonId') {\n heightField = sizeField;\n heightScale = sizeScale;\n }\n const {textLabel, visConfig} = config;\n const result: Record<string, any> = {};\n const textLabelField = textLabel && textLabel.field;\n\n if (type === 'grid' || type === 'hexagon') {\n result.colorScaleType = colorScale;\n if (colorField) {\n const {colorAggregation} = config.visConfig;\n if (!AGGREGATION[colorAggregation]) {\n result.getColorValue = getColorValueAccessor(colorField, colorAggregation, data);\n } else {\n result.getColorWeight = d => d[colorField.name];\n }\n }\n } else if (colorField) {\n const {colorAggregation: aggregation, colorRange: range} = visConfig;\n result.getFillColor = getColorAccessor(\n colorField,\n colorScale,\n {aggregation, range},\n visConfig.opacity,\n data\n );\n }\n\n if (strokeColorField) {\n const fallbackOpacity = type === 'point' ? visConfig.opacity : 1;\n const opacity =\n visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : fallbackOpacity;\n const {strokeColorAggregation: aggregation, strokeColorRange: range} = visConfig;\n result.getLineColor = getColorAccessor(\n strokeColorField,\n strokeColorScale,\n {aggregation, range},\n opacity,\n data\n );\n }\n if (heightField) {\n result.getElevation = getSizeAccessor(\n heightField,\n heightScale,\n visConfig.heightAggregation,\n visConfig.heightRange || visConfig.sizeRange,\n data\n );\n }\n if (sizeField) {\n result.getPointRadius = getSizeAccessor(\n sizeField,\n sizeScale,\n visConfig.sizeAggregation,\n visConfig.radiusRange || visConfig.sizeRange,\n data\n );\n }\n if (textLabelField) {\n result.getText = getTextAccessor(textLabelField, data);\n result.pointType = 'text';\n const radius = result.getPointRadius || visConfig.radius;\n result.getTextPixelOffset = getTextPixelOffsetAccessor(textLabel, radius);\n }\n\n return result;\n}\n"],"file":"parseMap.js"}
1
+ {"version":3,"sources":["../../../src/api/parseMap.ts"],"names":["AGGREGATION","getLayer","getColorAccessor","getColorValueAccessor","getSizeAccessor","getTextAccessor","getTextPixelOffsetAccessor","OPACITY_MAP","opacityToAlpha","getIconUrlAccessor","negateAccessor","getMaxMarkerSize","_flatten","flatten","log","assert","parseMap","json","keplerMapConfig","datasets","version","mapState","mapStyle","config","layers","layerBlending","interactionConfig","visState","id","title","description","createdAt","updatedAt","initialViewState","extractTextLayers","reverse","map","type","visualChannels","dataId","dataset","find","d","data","Layer","propMap","defaultProps","createBlendingProps","textLabel","createInteractionProps","createStyleProps","createChannelProps","e","error","message","undefined","rest","configRest","filter","t","field","name","label","visConfig","opacity","parameters","blendFunc","blendEquation","pickable","tooltip","enabled","autoHighlight","mapProps","source","target","mapping","sourceKey","sourceValue","targetKey","key","value","Object","entries","result","stroked","getLineColor","getFillColor","colorAccessor","Array","isArray","color","opacityKey","highlightColor","enable3d","colorField","colorScale","radiusField","radiusScale","sizeField","sizeScale","strokeColorField","strokeColorScale","heightField","heightScale","textLabelField","colorScaleType","colorAggregation","getColorValue","getColorWeight","aggregation","colorRange","range","getPointRadius","sizeAggregation","radiusRange","sizeRange","fallbackOpacity","strokeOpacity","strokeColorAggregation","strokeColorRange","getElevation","heightAggregation","heightRange","getText","pointType","radius","getTextPixelOffset","customMarkers","maxIconSize","getIcon","customMarkersField","customMarkersUrl","customMarkersRange","_subLayerProps","loadOptions","image","imagebitmap","resizeWidth","resizeHeight","resizeQuality","getIconColor","getIconSize","rotationField","getIconAngle"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {\n AGGREGATION,\n getLayer,\n getColorAccessor,\n getColorValueAccessor,\n getSizeAccessor,\n getTextAccessor,\n getTextPixelOffsetAccessor,\n OPACITY_MAP,\n opacityToAlpha,\n getIconUrlAccessor,\n negateAccessor,\n getMaxMarkerSize\n} from './layer-map';\nimport {_flatten as flatten, log} from '@deck.gl/core';\nimport {assert} from '../utils';\nimport {MapDataset, MapTextSubLayerConfig, VisualChannels} from './types';\n\nexport function parseMap(json) {\n const {keplerMapConfig, datasets} = json;\n assert(keplerMapConfig.version === 'v1', 'Only support Kepler v1');\n const {mapState, mapStyle} = keplerMapConfig.config;\n const {layers, layerBlending, interactionConfig} = keplerMapConfig.config.visState;\n\n return {\n id: json.id,\n title: json.title,\n description: json.description,\n createdAt: json.createdAt,\n updatedAt: json.updatedAt,\n initialViewState: mapState,\n mapStyle,\n layers: extractTextLayers(layers.reverse()).map(({id, type, config, visualChannels}) => {\n try {\n const {dataId} = config;\n const dataset: MapDataset | null = datasets.find(d => d.id === dataId);\n assert(dataset, `No dataset matching dataId: ${dataId}`);\n const {data} = dataset;\n assert(data, `No data loaded for dataId: ${dataId}`);\n const {Layer, propMap, defaultProps} = getLayer(type, config, dataset);\n return new Layer({\n id,\n data,\n ...defaultProps,\n ...createBlendingProps(layerBlending),\n ...(!config.textLabel && createInteractionProps(interactionConfig)),\n ...createStyleProps(config, propMap),\n ...createChannelProps(visualChannels, type, config, data) // Must come after style\n });\n } catch (e: any) {\n log.error(e.message)();\n return undefined;\n }\n })\n };\n}\n\nfunction extractTextLayers(layers) {\n return flatten(\n layers.map(({id, config, ...rest}) => {\n const {textLabel, ...configRest} = config;\n return [\n // Original layer without textLabel\n {id, config: configRest, ...rest},\n\n // One layer per valid text label, with full opacity\n ...textLabel\n .filter(t => t.field)\n .map(t => {\n return {\n id: `${id}-label-${t.field.name}`,\n config: {\n textLabel: t,\n ...configRest,\n label: `${config.label}-label-${t.field.name}`,\n visConfig: {...configRest.visConfig, opacity: 1}\n },\n ...rest\n };\n })\n ];\n })\n );\n}\n\nfunction createBlendingProps(layerBlending) {\n if (layerBlending === 'additive') {\n return {\n parameters: {\n blendFunc: [GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: GL.FUNC_ADD\n }\n };\n } else if (layerBlending === 'subtractive') {\n return {\n parameters: {\n blendFunc: [GL.ONE, GL.ONE_MINUS_DST_COLOR, GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: [GL.FUNC_SUBTRACT, GL.FUNC_ADD]\n }\n };\n }\n\n return {};\n}\n\nfunction createInteractionProps(interactionConfig) {\n const pickable = interactionConfig && interactionConfig.tooltip.enabled;\n return {\n autoHighlight: pickable,\n pickable\n };\n}\n\nfunction mapProps(source, target, mapping) {\n for (const sourceKey in mapping) {\n const sourceValue = source[sourceKey];\n const targetKey = mapping[sourceKey];\n if (sourceValue === undefined) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (typeof targetKey === 'string') {\n target[targetKey] = sourceValue;\n } else if (typeof targetKey === 'function') {\n const [key, value] = Object.entries(targetKey(sourceValue))[0];\n target[key] = value;\n } else if (typeof targetKey === 'object') {\n // Nested definition, recurse down one level (also handles arrays)\n mapProps(sourceValue, target, targetKey);\n }\n }\n}\n\nfunction createStyleProps(config: MapTextSubLayerConfig, mapping) {\n const result: Record<string, any> = {};\n mapProps(config, result, mapping);\n\n // Kepler format sometimes omits strokeColor. TODO: remove once we can rely on\n // `strokeColor` always being set when `stroke: true`.\n if (result.stroked && !result.getLineColor) {\n result.getLineColor = result.getFillColor;\n }\n\n for (const colorAccessor in OPACITY_MAP) {\n if (Array.isArray(result[colorAccessor])) {\n const color = [...result[colorAccessor]];\n const opacityKey = OPACITY_MAP[colorAccessor];\n const opacity = config.visConfig[opacityKey];\n color[3] = opacityToAlpha(opacity);\n result[colorAccessor] = color;\n }\n }\n\n result.highlightColor = config.visConfig.enable3d ? [255, 255, 255, 60] : [252, 242, 26, 255];\n return result;\n}\n\n/* eslint-disable complexity, max-statements */\nfunction createChannelProps(\n visualChannels: VisualChannels,\n type: string,\n config: MapTextSubLayerConfig,\n data\n) {\n const {\n colorField,\n colorScale,\n radiusField,\n radiusScale,\n sizeField,\n sizeScale,\n strokeColorField,\n strokeColorScale\n } = visualChannels;\n let {heightField, heightScale} = visualChannels;\n if (type === 'hexagonId') {\n heightField = sizeField;\n heightScale = sizeScale;\n }\n const {textLabel, visConfig} = config;\n const result: Record<string, any> = {};\n const textLabelField = textLabel && textLabel.field;\n\n if (type === 'grid' || type === 'hexagon') {\n result.colorScaleType = colorScale;\n if (colorField) {\n const {colorAggregation} = config.visConfig;\n if (!AGGREGATION[colorAggregation]) {\n result.getColorValue = getColorValueAccessor(colorField, colorAggregation, data);\n } else {\n result.getColorWeight = d => d[colorField.name];\n }\n }\n } else if (colorField) {\n const {colorAggregation: aggregation, colorRange: range} = visConfig;\n result.getFillColor = getColorAccessor(\n colorField,\n // @ts-ignore\n colorScale,\n {aggregation, range},\n visConfig.opacity,\n data\n );\n }\n\n if (radiusField || sizeField) {\n result.getPointRadius = getSizeAccessor(\n // @ts-ignore\n radiusField || sizeField,\n // @ts-ignore\n radiusScale || sizeScale,\n visConfig.sizeAggregation,\n visConfig.radiusRange || visConfig.sizeRange,\n data\n );\n }\n\n if (strokeColorField) {\n const fallbackOpacity = type === 'point' ? visConfig.opacity : 1;\n const opacity =\n visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : fallbackOpacity;\n const {strokeColorAggregation: aggregation, strokeColorRange: range} = visConfig;\n result.getLineColor = getColorAccessor(\n strokeColorField,\n // @ts-ignore\n strokeColorScale,\n // @ts-ignore\n {aggregation, range},\n opacity,\n data\n );\n }\n\n if (heightField) {\n result.getElevation = getSizeAccessor(\n heightField,\n // @ts-ignore\n heightScale,\n visConfig.heightAggregation,\n visConfig.heightRange || visConfig.sizeRange,\n data\n );\n }\n\n if (textLabelField) {\n result.getText = getTextAccessor(textLabelField, data);\n result.pointType = 'text';\n const radius = result.getPointRadius || visConfig.radius;\n result.getTextPixelOffset = getTextPixelOffsetAccessor(textLabel, radius);\n } else if (visConfig.customMarkers) {\n const maxIconSize = getMaxMarkerSize(visConfig, visualChannels);\n const {getPointRadius, getFillColor} = result;\n result.pointType = 'icon';\n result.getIcon = getIconUrlAccessor(\n visualChannels.customMarkersField,\n visConfig.customMarkersUrl,\n visConfig.customMarkersRange,\n maxIconSize,\n data\n );\n result._subLayerProps = {\n 'points-icon': {\n loadOptions: {\n image: {\n type: 'imagebitmap'\n },\n imagebitmap: {\n resizeWidth: maxIconSize,\n resizeHeight: maxIconSize,\n resizeQuality: 'high'\n }\n }\n }\n };\n\n if (getFillColor) {\n result.getIconColor = getFillColor;\n }\n\n if (getPointRadius) {\n result.getIconSize = getPointRadius;\n }\n\n if (visualChannels.rotationField) {\n result.getIconAngle = negateAccessor(\n getSizeAccessor(visualChannels.rotationField, undefined, null, undefined, data)\n );\n }\n }\n\n return result;\n}\n"],"file":"parseMap.js"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"types.js"}
@@ -1,87 +1,25 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import Protobuf from 'pbf';
3
- import { log } from '@deck.gl/core';
2
+ import { registerLoaders } from '@loaders.gl/core';
3
+ import CartoVectorTileLoader from './schema/carto-vector-tile-loader';
4
+ registerLoaders([CartoVectorTileLoader]);
4
5
  import { ClipExtension } from '@deck.gl/extensions';
5
6
  import { MVTLayer, _getURLFromTemplate } from '@deck.gl/geo-layers';
6
7
  import { GeoJsonLayer } from '@deck.gl/layers';
7
- import { geojsonToBinary } from '@loaders.gl/gis';
8
- import { TileReader } from './schema/carto-tile';
8
+ import { binaryToGeojson } from '@loaders.gl/gis';
9
9
  import { TILE_FORMATS } from '../api/maps-api-common';
10
-
11
- function parseJSON(arrayBuffer) {
12
- return JSON.parse(new TextDecoder().decode(arrayBuffer));
13
- }
14
-
15
- function parsePbf(buffer) {
16
- const pbf = new Protobuf(buffer);
17
- const tile = TileReader.read(pbf);
18
- return tile;
19
- }
20
-
21
- function unpackProperties(properties) {
22
- if (!properties || !properties.length) {
23
- return [];
24
- }
25
-
26
- return properties.map(item => {
27
- const currentRecord = {};
28
- item.data.forEach(({
29
- key,
30
- value
31
- }) => {
32
- currentRecord[key] = value;
33
- });
34
- return currentRecord;
35
- });
36
- }
37
-
38
- function parseCartoTile(arrayBuffer, options) {
39
- if (!arrayBuffer) return null;
40
- const formatTiles = options && options.cartoTile && options.cartoTile.formatTiles;
41
- if (formatTiles === TILE_FORMATS.GEOJSON) return geojsonToBinary(parseJSON(arrayBuffer).features);
42
- const tile = parsePbf(arrayBuffer);
43
- const {
44
- points,
45
- lines,
46
- polygons
47
- } = tile;
48
- const data = {
49
- points: { ...points,
50
- properties: unpackProperties(points.properties)
51
- },
52
- lines: { ...lines,
53
- properties: unpackProperties(lines.properties)
54
- },
55
- polygons: { ...polygons,
56
- properties: unpackProperties(polygons.properties)
57
- }
58
- };
59
- return data;
60
- }
61
-
62
10
  const defaultTileFormat = TILE_FORMATS.BINARY;
63
- const CartoTileLoader = {
64
- name: 'CARTO Tile',
65
- version: '1',
66
- id: 'cartoTile',
67
- module: 'carto',
68
- extensions: ['pbf'],
69
- mimeTypes: ['application/vnd.carto-vector-tile', 'application/x-protobuf'],
70
- category: 'geometry',
71
- worker: false,
72
- parse: async (arrayBuffer, options) => parseCartoTile(arrayBuffer, options),
73
- parseSync: parseCartoTile,
74
- options: {
75
- cartoTile: {
76
- formatTiles: defaultTileFormat
77
- }
78
- }
79
- };
80
11
  const defaultProps = { ...MVTLayer.defaultProps,
81
- formatTiles: defaultTileFormat,
82
- loaders: [CartoTileLoader]
12
+ formatTiles: defaultTileFormat
83
13
  };
84
14
  export default class CartoTileLayer extends MVTLayer {
15
+ initializeState() {
16
+ super.initializeState();
17
+ const binary = this.props.formatTiles === TILE_FORMATS.BINARY;
18
+ this.setState({
19
+ binary
20
+ });
21
+ }
22
+
85
23
  getTileData(tile) {
86
24
  const url = _getURLFromTemplate(this.state.data, tile);
87
25
 
@@ -97,14 +35,10 @@ export default class CartoTileLayer extends MVTLayer {
97
35
  const {
98
36
  signal
99
37
  } = tile;
100
- loadOptions = { ...loadOptions,
101
- mimeType: 'application/x-protobuf'
102
- };
103
38
 
104
- if (formatTiles) {
105
- log.assert(Object.values(TILE_FORMATS).includes(formatTiles), "Invalid value for formatTiles: ".concat(formatTiles, ". Use value from TILE_FORMATS"));
106
- loadOptions.cartoTile = {
107
- formatTiles
39
+ if (formatTiles === TILE_FORMATS.BINARY) {
40
+ loadOptions = { ...loadOptions,
41
+ mimeType: 'application/vnd.carto-vector-tile'
108
42
  };
109
43
  }
110
44
 
@@ -137,6 +71,21 @@ export default class CartoTileLayer extends MVTLayer {
137
71
  return subLayer;
138
72
  }
139
73
 
74
+ getPickingInfo(params) {
75
+ const info = super.getPickingInfo(params);
76
+
77
+ if (this.state.binary && info.index !== -1) {
78
+ const {
79
+ data
80
+ } = params.sourceLayer.props;
81
+ info.object = binaryToGeojson(data, {
82
+ globalFeatureId: info.index
83
+ });
84
+ }
85
+
86
+ return info;
87
+ }
88
+
140
89
  }
141
90
 
142
91
  _defineProperty(CartoTileLayer, "layerName", 'CartoTileLayer');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/carto-tile-layer.ts"],"names":["Protobuf","log","ClipExtension","MVTLayer","_getURLFromTemplate","GeoJsonLayer","geojsonToBinary","TileReader","TILE_FORMATS","parseJSON","arrayBuffer","JSON","parse","TextDecoder","decode","parsePbf","buffer","pbf","tile","read","unpackProperties","properties","length","map","item","currentRecord","data","forEach","key","value","parseCartoTile","options","formatTiles","cartoTile","GEOJSON","features","points","lines","polygons","defaultTileFormat","BINARY","CartoTileLoader","name","version","id","module","extensions","mimeTypes","category","worker","parseSync","defaultProps","loaders","CartoTileLayer","getTileData","url","state","Promise","reject","loadOptions","getLoadOptions","fetch","props","signal","mimeType","assert","Object","values","includes","propName","layer","renderSubLayers","tileBbox","bbox","west","south","east","north","subLayerProps","autoHighlight","clipBounds","subLayer"],"mappings":"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","sourcesContent":["/* global TextDecoder */\nimport Protobuf from 'pbf';\nimport {log, DefaultProps} from '@deck.gl/core';\nimport {ClipExtension} from '@deck.gl/extensions';\nimport {\n MVTLayer,\n MVTLayerProps,\n TileLayer,\n _getURLFromTemplate,\n _Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {geojsonToBinary} from '@loaders.gl/gis';\nimport {KeyValueProperties, Tile, TileReader} from './schema/carto-tile';\nimport {TileFormat, TILE_FORMATS} from '../api/maps-api-common';\nimport {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nfunction parseJSON(arrayBuffer: ArrayBuffer): any {\n return JSON.parse(new TextDecoder().decode(arrayBuffer));\n}\n\nfunction parsePbf(buffer: ArrayBuffer): Tile {\n const pbf = new Protobuf(buffer);\n const tile = TileReader.read(pbf);\n return tile;\n}\n\nfunction unpackProperties(properties: KeyValueProperties[]) {\n if (!properties || !properties.length) {\n return [];\n }\n return properties.map(item => {\n const currentRecord: Record<string, unknown> = {};\n item.data.forEach(({key, value}) => {\n currentRecord[key] = value;\n });\n return currentRecord;\n });\n}\n\nfunction parseCartoTile(arrayBuffer: ArrayBuffer, options?: LoaderOptions): BinaryFeatures | null {\n if (!arrayBuffer) return null;\n const formatTiles = options && options.cartoTile && options.cartoTile.formatTiles;\n if (formatTiles === TILE_FORMATS.GEOJSON) return geojsonToBinary(parseJSON(arrayBuffer).features);\n\n const tile = parsePbf(arrayBuffer);\n\n const {points, lines, polygons} = tile;\n const data = {\n points: {...points, properties: unpackProperties(points.properties)},\n lines: {...lines, properties: unpackProperties(lines.properties)},\n polygons: {...polygons, properties: unpackProperties(polygons.properties)}\n };\n\n // Note: there is slight, difference in `numericProps` type, however geojson/mvtlayer can cope with this\n return data as unknown as BinaryFeatures;\n}\n\nconst defaultTileFormat = TILE_FORMATS.BINARY;\n\nconst CartoTileLoader: LoaderWithParser = {\n name: 'CARTO Tile',\n version: '1',\n id: 'cartoTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: [\n 'application/vnd.carto-vector-tile',\n 'application/x-protobuf' // Back-compatibility\n ],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoTile(arrayBuffer, options),\n parseSync: parseCartoTile,\n options: {\n cartoTile: {\n formatTiles: defaultTileFormat\n }\n }\n};\n\nconst defaultProps: DefaultProps<CartoTileLayerProps> = {\n ...MVTLayer.defaultProps,\n formatTiles: defaultTileFormat,\n loaders: [CartoTileLoader]\n};\n\n/** All properties supported by CartoTileLayer. */\nexport type CartoTileLayerProps<DataT extends Feature = Feature> = _CartoTileLayerProps &\n MVTLayerProps<DataT>;\n\n/** Properties added by CartoTileLayer. */\ntype _CartoTileLayerProps = {\n /** Use to override the default tile data format.\n *\n * Possible values are: `TILE_FORMATS.BINARY`, `TILE_FORMATS.GEOJSON` and `TILE_FORMATS.MVT`.\n *\n * Only supported when `apiVersion` is `API_VERSIONS.V3` and `format` is `FORMATS.TILEJSON`.\n */\n formatTiles?: TileFormat;\n};\n\nexport default class CartoTileLayer<\n DataT extends Feature = Feature,\n ExtraProps = {}\n> extends MVTLayer<DataT, Required<_CartoTileLayerProps> & ExtraProps> {\n static layerName = 'CartoTileLayer';\n static defaultProps = defaultProps;\n\n getTileData(tile: TileLoadProps) {\n const url = _getURLFromTemplate(this.state.data, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n\n let loadOptions = this.getLoadOptions();\n const {fetch, formatTiles} = this.props;\n const {signal} = tile;\n\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf'\n };\n\n if (formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n loadOptions.cartoTile = {formatTiles};\n }\n\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: any;\n _offset: number;\n tile: _Tile2DHeader;\n }\n ): GeoJsonLayer | null {\n if (props.data === null) {\n return null;\n }\n\n const tileBbox = props.tile.bbox as any;\n const {west, south, east, north} = tileBbox;\n\n const subLayerProps = {\n ...props,\n autoHighlight: false,\n extensions: [new ClipExtension(), ...(props.extensions || [])],\n clipBounds: [west, south, east, north]\n };\n\n const subLayer = new GeoJsonLayer(subLayerProps);\n return subLayer;\n }\n}\n"],"file":"carto-tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/carto-tile-layer.ts"],"names":["registerLoaders","CartoVectorTileLoader","ClipExtension","MVTLayer","_getURLFromTemplate","GeoJsonLayer","binaryToGeojson","TILE_FORMATS","defaultTileFormat","BINARY","defaultProps","formatTiles","CartoTileLayer","initializeState","binary","props","setState","getTileData","tile","url","state","data","Promise","reject","loadOptions","getLoadOptions","fetch","signal","mimeType","propName","layer","renderSubLayers","tileBbox","bbox","west","south","east","north","subLayerProps","autoHighlight","extensions","clipBounds","subLayer","getPickingInfo","params","info","index","sourceLayer","object","globalFeatureId"],"mappings":"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","sourcesContent":["import {registerLoaders} from '@loaders.gl/core';\nimport CartoVectorTileLoader from './schema/carto-vector-tile-loader';\nregisterLoaders([CartoVectorTileLoader]);\n\nimport {DefaultProps} from '@deck.gl/core';\nimport {ClipExtension} from '@deck.gl/extensions';\nimport {\n MVTLayer,\n MVTLayerProps,\n TileLayer,\n _getURLFromTemplate,\n _Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {binaryToGeojson, geojsonToBinary} from '@loaders.gl/gis';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport {TileFormat, TILE_FORMATS} from '../api/maps-api-common';\nimport type {Feature} from 'geojson';\n\nconst defaultTileFormat = TILE_FORMATS.BINARY;\n\nconst defaultProps: DefaultProps<CartoTileLayerProps> = {\n ...MVTLayer.defaultProps,\n formatTiles: defaultTileFormat\n};\n\n/** All properties supported by CartoTileLayer. */\nexport type CartoTileLayerProps<DataT extends Feature = Feature> = _CartoTileLayerProps &\n MVTLayerProps<DataT>;\n\n/** Properties added by CartoTileLayer. */\ntype _CartoTileLayerProps = {\n /** Use to override the default tile data format.\n *\n * Possible values are: `TILE_FORMATS.BINARY`, `TILE_FORMATS.GEOJSON` and `TILE_FORMATS.MVT`.\n *\n * Only supported when `apiVersion` is `API_VERSIONS.V3` and `format` is `FORMATS.TILEJSON`.\n */\n formatTiles?: TileFormat;\n};\n\nexport default class CartoTileLayer<\n DataT extends Feature = Feature,\n ExtraProps = {}\n> extends MVTLayer<DataT, Required<_CartoTileLayerProps> & ExtraProps> {\n static layerName = 'CartoTileLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n super.initializeState();\n const binary = this.props.formatTiles === TILE_FORMATS.BINARY;\n this.setState({binary});\n }\n\n getTileData(tile: TileLoadProps) {\n const url = _getURLFromTemplate(this.state.data, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n\n let loadOptions = this.getLoadOptions();\n const {fetch, formatTiles} = this.props;\n const {signal} = tile;\n\n // The backend doesn't yet support our custom mime-type, so force it here\n // TODO remove once backend sends the correct mime-type\n if (formatTiles === TILE_FORMATS.BINARY) {\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/vnd.carto-vector-tile'\n };\n }\n\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: any;\n _offset: number;\n tile: _Tile2DHeader;\n }\n ): GeoJsonLayer | null {\n if (props.data === null) {\n return null;\n }\n\n const tileBbox = props.tile.bbox as any;\n const {west, south, east, north} = tileBbox;\n\n const subLayerProps = {\n ...props,\n autoHighlight: false,\n extensions: [new ClipExtension(), ...(props.extensions || [])],\n clipBounds: [west, south, east, north]\n };\n\n const subLayer = new GeoJsonLayer(subLayerProps);\n return subLayer;\n }\n\n getPickingInfo(params) {\n const info = super.getPickingInfo(params);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatures, {globalFeatureId: info.index}) as DataT;\n }\n\n return info;\n }\n}\n"],"file":"carto-tile-layer.js"}
@@ -1,13 +1,13 @@
1
- import Protobuf from 'pbf';
2
- import { binaryToSpatialjson } from './spatialjson-utils';
3
1
  import { TileReader } from './carto-spatial-tile';
2
+ import { parsePbf, unpackProperties } from './tile-loader-utils';
3
+ import { binaryToSpatialjson } from './spatialjson-utils';
4
4
  const CartoSpatialTileLoader = {
5
5
  name: 'CARTO Spatial Tile',
6
6
  version: '1',
7
7
  id: 'cartoSpatialTile',
8
8
  module: 'carto',
9
9
  extensions: ['pbf'],
10
- mimeTypes: ['application/vnd.carto-spatial-tile', 'application/x-protobuf'],
10
+ mimeTypes: ['application/vnd.carto-spatial-tile'],
11
11
  category: 'geometry',
12
12
  worker: false,
13
13
  parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),
@@ -15,32 +15,9 @@ const CartoSpatialTileLoader = {
15
15
  options: {}
16
16
  };
17
17
 
18
- function parsePbf(buffer) {
19
- const pbf = new Protobuf(buffer);
20
- const tile = TileReader.read(pbf);
21
- return tile;
22
- }
23
-
24
- function unpackProperties(properties) {
25
- if (!properties || !properties.length) {
26
- return [];
27
- }
28
-
29
- return properties.map(item => {
30
- const currentRecord = {};
31
- item.data.forEach(({
32
- key,
33
- value
34
- }) => {
35
- currentRecord[key] = value;
36
- });
37
- return currentRecord;
38
- });
39
- }
40
-
41
18
  function parseCartoSpatialTile(arrayBuffer, options) {
42
19
  if (!arrayBuffer) return null;
43
- const tile = parsePbf(arrayBuffer);
20
+ const tile = parsePbf(arrayBuffer, TileReader);
44
21
  const {
45
22
  cells
46
23
  } = tile;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/layers/schema/carto-spatial-tile-loader.ts"],"names":["Protobuf","binaryToSpatialjson","TileReader","CartoSpatialTileLoader","name","version","id","module","extensions","mimeTypes","category","worker","parse","arrayBuffer","options","parseCartoSpatialTile","parseSync","parsePbf","buffer","pbf","tile","read","unpackProperties","properties","length","map","item","currentRecord","data","forEach","key","value","cells"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,KAArB;AAIA,SAAQC,mBAAR,QAA2D,qBAA3D;AACA,SAAcC,UAAd,QAA+B,sBAA/B;AAEA,MAAMC,sBAAwC,GAAG;AAC/CC,EAAAA,IAAI,EAAE,oBADyC;AAE/CC,EAAAA,OAAO,EAAE,GAFsC;AAG/CC,EAAAA,EAAE,EAAE,kBAH2C;AAI/CC,EAAAA,MAAM,EAAE,OAJuC;AAK/CC,EAAAA,UAAU,EAAE,CAAC,KAAD,CALmC;AAM/CC,EAAAA,SAAS,EAAE,CACT,oCADS,EAET,wBAFS,CANoC;AAU/CC,EAAAA,QAAQ,EAAE,UAVqC;AAW/CC,EAAAA,MAAM,EAAE,KAXuC;AAY/CC,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBC,OAApB,KAAgCC,qBAAqB,CAACF,WAAD,EAAcC,OAAd,CAZb;AAa/CE,EAAAA,SAAS,EAAED,qBAboC;AAc/CD,EAAAA,OAAO,EAAE;AAdsC,CAAjD;;AAiBA,SAASG,QAAT,CAAkBC,MAAlB,EAA6C;AAC3C,QAAMC,GAAG,GAAG,IAAInB,QAAJ,CAAakB,MAAb,CAAZ;AACA,QAAME,IAAI,GAAGlB,UAAU,CAACmB,IAAX,CAAgBF,GAAhB,CAAb;AACA,SAAOC,IAAP;AACD;;AAED,SAASE,gBAAT,CAA0BC,UAA1B,EAA0E;AACxE,MAAI,CAACA,UAAD,IAAe,CAACA,UAAU,CAACC,MAA/B,EAAuC;AACrC,WAAO,EAAP;AACD;;AACD,SAAOD,UAAU,CAACE,GAAX,CAAeC,IAAI,IAAI;AAC5B,UAAMC,aAAyB,GAAG,EAAlC;AACAD,IAAAA,IAAI,CAACE,IAAL,CAAUC,OAAV,CAAkB,CAAC;AAACC,MAAAA,GAAD;AAAMC,MAAAA;AAAN,KAAD,KAAkB;AAClCJ,MAAAA,aAAa,CAACG,GAAD,CAAb,GAAqBC,KAArB;AACD,KAFD;AAGA,WAAOJ,aAAP;AACD,GANM,CAAP;AAOD;;AAED,SAASZ,qBAAT,CACEF,WADF,EAEEC,OAFF,EAGsB;AACpB,MAAI,CAACD,WAAL,EAAkB,OAAO,IAAP;AAClB,QAAMO,IAAI,GAAGH,QAAQ,CAACJ,WAAD,CAArB;AAEA,QAAM;AAACmB,IAAAA;AAAD,MAAUZ,IAAhB;AACA,QAAMQ,IAAI,GAAG;AACXI,IAAAA,KAAK,EAAE,EAAC,GAAGA,KAAJ;AAAWT,MAAAA,UAAU,EAAED,gBAAgB,CAACU,KAAK,CAACT,UAAP;AAAvC;AADI,GAAb;AAIA,SAAOtB,mBAAmB,CAAC2B,IAAD,CAA1B;AACD;;AAED,eAAezB,sBAAf","sourcesContent":["import Protobuf from 'pbf';\nimport {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\n\nimport {KeyValueProperties} from './carto-tile';\nimport {binaryToSpatialjson, Properties, SpatialJson} from './spatialjson-utils';\nimport {Tile, TileReader} from './carto-spatial-tile';\n\nconst CartoSpatialTileLoader: LoaderWithParser = {\n name: 'CARTO Spatial Tile',\n version: '1',\n id: 'cartoSpatialTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: [\n 'application/vnd.carto-spatial-tile',\n 'application/x-protobuf' // Back-compatibility\n ],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),\n parseSync: parseCartoSpatialTile,\n options: {}\n};\n\nfunction parsePbf(buffer: ArrayBuffer): Tile {\n const pbf = new Protobuf(buffer);\n const tile = TileReader.read(pbf);\n return tile;\n}\n\nfunction unpackProperties(properties: KeyValueProperties[]): Properties[] {\n if (!properties || !properties.length) {\n return [];\n }\n return properties.map(item => {\n const currentRecord: Properties = {};\n item.data.forEach(({key, value}) => {\n currentRecord[key] = value;\n });\n return currentRecord;\n });\n}\n\nfunction parseCartoSpatialTile(\n arrayBuffer: ArrayBuffer,\n options?: LoaderOptions\n): SpatialJson | null {\n if (!arrayBuffer) return null;\n const tile = parsePbf(arrayBuffer);\n\n const {cells} = tile;\n const data = {\n cells: {...cells, properties: unpackProperties(cells.properties)}\n };\n\n return binaryToSpatialjson(data);\n}\n\nexport default CartoSpatialTileLoader;\n"],"file":"carto-spatial-tile-loader.js"}
1
+ {"version":3,"sources":["../../../../src/layers/schema/carto-spatial-tile-loader.ts"],"names":["TileReader","parsePbf","unpackProperties","binaryToSpatialjson","CartoSpatialTileLoader","name","version","id","module","extensions","mimeTypes","category","worker","parse","arrayBuffer","options","parseCartoSpatialTile","parseSync","tile","cells","data","properties"],"mappings":"AAEA,SAAcA,UAAd,QAA+B,sBAA/B;AACA,SAAQC,QAAR,EAAkBC,gBAAlB,QAAyC,qBAAzC;AACA,SAAQC,mBAAR,QAA+C,qBAA/C;AAEA,MAAMC,sBAAwC,GAAG;AAC/CC,EAAAA,IAAI,EAAE,oBADyC;AAE/CC,EAAAA,OAAO,EAAE,GAFsC;AAG/CC,EAAAA,EAAE,EAAE,kBAH2C;AAI/CC,EAAAA,MAAM,EAAE,OAJuC;AAK/CC,EAAAA,UAAU,EAAE,CAAC,KAAD,CALmC;AAM/CC,EAAAA,SAAS,EAAE,CAAC,oCAAD,CANoC;AAO/CC,EAAAA,QAAQ,EAAE,UAPqC;AAQ/CC,EAAAA,MAAM,EAAE,KARuC;AAS/CC,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBC,OAApB,KAAgCC,qBAAqB,CAACF,WAAD,EAAcC,OAAd,CATb;AAU/CE,EAAAA,SAAS,EAAED,qBAVoC;AAW/CD,EAAAA,OAAO,EAAE;AAXsC,CAAjD;;AAcA,SAASC,qBAAT,CACEF,WADF,EAEEC,OAFF,EAGsB;AACpB,MAAI,CAACD,WAAL,EAAkB,OAAO,IAAP;AAClB,QAAMI,IAAU,GAAGjB,QAAQ,CAACa,WAAD,EAAcd,UAAd,CAA3B;AAEA,QAAM;AAACmB,IAAAA;AAAD,MAAUD,IAAhB;AACA,QAAME,IAAI,GAAG;AACXD,IAAAA,KAAK,EAAE,EAAC,GAAGA,KAAJ;AAAWE,MAAAA,UAAU,EAAEnB,gBAAgB,CAACiB,KAAK,CAACE,UAAP;AAAvC;AADI,GAAb;AAIA,SAAOlB,mBAAmB,CAACiB,IAAD,CAA1B;AACD;;AAED,eAAehB,sBAAf","sourcesContent":["import {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\n\nimport {Tile, TileReader} from './carto-spatial-tile';\nimport {parsePbf, unpackProperties} from './tile-loader-utils';\nimport {binaryToSpatialjson, SpatialJson} from './spatialjson-utils';\n\nconst CartoSpatialTileLoader: LoaderWithParser = {\n name: 'CARTO Spatial Tile',\n version: '1',\n id: 'cartoSpatialTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-spatial-tile'],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),\n parseSync: parseCartoSpatialTile,\n options: {}\n};\n\nfunction parseCartoSpatialTile(\n arrayBuffer: ArrayBuffer,\n options?: LoaderOptions\n): SpatialJson | null {\n if (!arrayBuffer) return null;\n const tile: Tile = parsePbf(arrayBuffer, TileReader);\n\n const {cells} = tile;\n const data = {\n cells: {...cells, properties: unpackProperties(cells.properties)}\n };\n\n return binaryToSpatialjson(data);\n}\n\nexport default CartoSpatialTileLoader;\n"],"file":"carto-spatial-tile-loader.js"}