Files
PMTiles/js
2022-11-22 14:43:15 +08:00
..
2022-11-22 02:12:07 +08:00
2022-02-17 13:31:17 +08:00
2022-11-21 19:47:55 +08:00
2022-11-21 19:48:16 +08:00
2022-11-21 19:48:16 +08:00
2022-11-21 19:50:18 +08:00
2022-11-22 10:59:09 +08:00
2022-10-17 23:23:38 +08:00

PMTiles for Browsers + NodeJS

the PMTiles package can be included via script tag or ES6 module:

 <script src="https://unpkg.com/pmtiles@2.5.0/dist/index.js"></script>

As an ES6 module: npm add pmtiles

import * as pmtiles from "pmtiles";

Leaflet: Raster tileset

Example of a raster PMTiles archive displayed in Leaflet:

const p = new pmtiles.PMTiles('example.pmtiles')
pmtiles.leafletRasterLayer(p,{attribution:'© <a href="https://openstreetmap.org">OpenStreetMap</a>'}).addTo(map)

Live example | Code

Leaflet: Vector tileset

See protomaps.js

MapLibre GL JS

Example of a PMTiles archive displayed in MapLibre GL JS:

let protocol = new pmtiles.Protocol();
maplibregl.addProtocol("pmtiles",protocol.tile);
var style = {
"version": 8,
"sources": {
    "example_source": {
        "type": "vector",
        "url": "pmtiles://https://example.com/example.pmtiles",
        "attribution": '© <a href="https://openstreetmap.org">OpenStreetMap</a>'
    ...

Live example | Code

CORS

Reading a PMTiles archive from cloud storage requires CORS configuration if your web page is hosted on a different domain than your storage bucket.

Amazon S3 and S3-Compatible Storage

[
    {
        "AllowedHeaders": ["Range"],
        "AllowedMethods": ["GET","HEAD"],
        "AllowedOrigins": ["*","example.com"],
        "ExposeHeaders": ["ETag"],
        "MaxAgeSeconds": 3000
    }
]

Google Cloud Storage

[
    {
      "origin": ["example.com","*"],
      "method": ["GET","HEAD"],
      "responseHeader": ["range","etag"],
      "maxAgeSeconds": 3000
    }
]

Setting CORS from the command line

AWS CLI is the recommended way to do this:

create a file cors_rules.json:

{
  "CORSRules": [
    {
      "AllowedOrigins": ["example.com","*"],
      "AllowedHeaders": ["range"],
      "AllowedMethods": ["GET","HEAD"],
      "MaxAgeSeconds": 3000,
      "ExposeHeaders": ["ETag"]
    }
  ]
}

Then configure your bucket with:

aws s3api put-bucket-cors --bucket MY_BUCKET --cors-configuration file:///home/user/cors_rules.json

Optional arguments:

  • -endpoint-url https://S3_COMPATIBLE_ENDPOINT: for non-S3 storages.
  • --profile PROFILE: choose credentials named in ~/.aws/credentials