ol-pmtiles
Version:
PMTiles sources for OpenLayers
1 lines • 11.1 kB
Source Map (JSON)
{"version":3,"sources":["/Users/bdon/workspace/protomaps/PMTiles/openlayers/dist/cjs/index.cjs","../../src/index.ts"],"names":[],"mappings":"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","file":"/Users/bdon/workspace/protomaps/PMTiles/openlayers/dist/cjs/index.cjs","sourcesContent":[null,"// see import style (.js) at https://openlayers.org/en/latest/examples/data-tiles.html\nimport { type Data } from \"ol/DataTile.js\";\nimport {\n type Options as DataTileSourceOptions,\n default as DataTileSource,\n} from \"ol/source/DataTile.js\";\nimport TileState from \"ol/TileState.js\";\nimport { MVT } from \"ol/format.js\";\nimport type TileSource from \"ol/source/Tile.js\";\nimport { type Extent } from \"ol/extent.js\";\nimport type Projection from \"ol/proj/Projection.js\";\nimport type Tile from \"ol/Tile.js\";\nimport type VectorTile from \"ol/VectorTile.js\";\nimport {\n type Options as VectorTileSourceOptions,\n default as VectorTileSource,\n} from \"ol/source/VectorTile.js\";\nimport type RenderFeature from \"ol/render/Feature.js\";\nimport { createXYZ, extentFromProjection } from \"ol/tilegrid.js\";\nimport { PMTiles, Header, Source } from \"pmtiles\";\n\nexport class PMTilesRasterSource extends DataTileSource {\n loadImage = (src: string): Promise<HTMLImageElement> => {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.addEventListener(\"load\", () => resolve(img));\n img.addEventListener(\"error\", () => reject(new Error(\"load failed\")));\n img.src = src;\n });\n };\n\n constructor(options: DataTileSourceOptions & { url: string | Source }) {\n super({\n ...options,\n ...{\n state: \"loading\",\n },\n });\n\n const p = new PMTiles(options.url);\n p.getHeader().then((h: Header) => {\n const projection =\n options.projection === undefined ? \"EPSG:3857\" : options.projection;\n this.tileGrid =\n options.tileGrid ||\n createXYZ({\n extent: extentFromProjection(projection),\n maxResolution: options.maxResolution,\n minZoom: h.minZoom,\n maxZoom: h.maxZoom,\n tileSize: options.tileSize,\n });\n this.setLoader(async (z, x, y): Promise<Data> => {\n const response = await p.getZxy(z, x, y);\n if (!response) {\n return new Uint8Array();\n }\n const src = URL.createObjectURL(new Blob([response.data]));\n const image = await this.loadImage(src);\n URL.revokeObjectURL(src);\n return image;\n });\n this.setState(\"ready\");\n });\n }\n}\n\nexport class PMTilesVectorSource extends VectorTileSource {\n pmtiles_: PMTiles;\n\n tileLoadFunction = (tile: Tile, url: string) => {\n const vtile = tile as VectorTile;\n // the URL construction is done internally by OL, so we need to parse it\n // back out here using a hacky regex\n const re = new RegExp(/pmtiles:\\/\\/(\\d+)\\/(\\d+)\\/(\\d+)/);\n const result = url.match(re);\n\n if (!(result && result.length >= 4)) {\n throw Error(\"Could not parse tile URL\");\n }\n const z = +result[1];\n const x = +result[2];\n const y = +result[3];\n\n vtile.setLoader(\n (extent: Extent, resolution: number, projection: Projection) => {\n this.pmtiles_\n .getZxy(z, x, y)\n .then((tile_result) => {\n if (tile_result) {\n const format = vtile.getFormat();\n vtile.setFeatures(\n format.readFeatures(tile_result.data, {\n extent: extent,\n featureProjection: projection,\n }),\n );\n vtile.setState(TileState.LOADED);\n } else {\n vtile.setFeatures([]);\n vtile.setState(TileState.EMPTY);\n }\n })\n .catch((err) => {\n vtile.setFeatures([]);\n vtile.setState(TileState.ERROR);\n });\n },\n );\n };\n\n constructor(\n options: VectorTileSourceOptions<RenderFeature> & { url: string | Source },\n ) {\n super({\n ...options,\n ...{\n state: \"loading\",\n url: \"pmtiles://{z}/{x}/{y}\",\n format: options.format || new MVT(),\n },\n });\n\n this.pmtiles_ = new PMTiles(options.url);\n this.pmtiles_.getHeader().then((h: Header) => {\n const projection = options.projection || \"EPSG:3857\";\n const extent = options.extent || extentFromProjection(projection);\n this.tileGrid =\n options.tileGrid ||\n createXYZ({\n extent: extent,\n maxResolution: options.maxResolution,\n maxZoom: options.maxZoom !== undefined ? options.maxZoom : h.maxZoom,\n minZoom: h.minZoom,\n tileSize: options.tileSize || 512,\n });\n this.setTileLoadFunction(this.tileLoadFunction);\n this.setState(\"ready\");\n });\n }\n}\n"]}