Features Pricing Docs Contact Dashboard

πŸ“¦ Dataset Tiles API

Upload your own geodata and serve it as a vector tile layer β€” overlaid on a basemap using the same Maps key. Globally cached, secure, and accessible via a simple tile URL.

GeoJSON Shapefile (ZIP) GPX KML GeoPackage Vector tiles (PBF) Global CDN

βš™οΈ How It Works

πŸ“€ Upload file in dashboard
β†’
βš™οΈ Auto-converted to PMTiles
β†’
🌐 Served via global CDN
β†’
πŸ—ΊοΈ Overlay on your basemap

Files are processed by tippecanoe on our servers and stored on our edge infrastructure. Tiles are typically ready within 5–10 seconds for small files.

πŸ—ΊοΈ Dataset tiles are overlays. They display your data on top of a basemap (streets, labels, terrain). Both use the same pk_latlng_… Maps key β€” one key for everything.

Basemap tiles  β†’  tiles.latlng.work/v1/tiles/{z}/{x}/{y}.pbf?key=pk_…
Your dataset  β†’  tiles.latlng.work/v1/datasets/{id}/{z}/{x}/{y}.pbf?key=pk_…

πŸ“Œ Common Use Cases

🏑
Real Estate

Parcel boundaries, zoning districts, flood zones overlaid on a property search map.

🚚
Logistics

Delivery zones, service areas, route polygons β€” show customers which zone they’re in.

πŸ›οΈ
Urban Planning

Census tracts, school districts, city boundaries β€” without a GIS server.

🌱
Environmental

Field survey points, habitat boundaries, sensor locations on an interactive map.

✨ Live Demo Pre-loaded with a sample NYC dataset

The map below shows a real dataset overlaid on LatLng basemap tiles. Swap in your own key and dataset ID from the Datasets dashboard.

πŸ—ΊοΈ Loading map…

πŸ”— Endpoints

Vector Tile (PBF)

GET https://tiles.latlng.work/v1/datasets/{id}/{z}/{x}/{y}.pbf?key=pk_latlng_…

Metadata (TileJSON)

GET https://tiles.latlng.work/v1/datasets/{id}/metadata?key=pk_latlng_…

Parameters

ParamTypeDescription
id *stringDataset ID from the dashboard, e.g. ds_abc123xyz
z *integerZoom level 0–14
x *integerTile column
y *integerTile row
key *stringYour Maps key (pk_latlng_…) β€” must belong to the dataset owner
⚠️ Dataset tiles only accept Maps keys (pk_latlng_…). Secret keys are rejected with 403 to prevent accidental exposure.

πŸ’» Code Examples

⚠️ Leaflet's L.tileLayer only renders raster (PNG/JPEG) tiles. LatLng basemap tiles are vector (PBF) β€” use OpenStreetMap raster tiles for the basemap, or switch to the MapLibre tab to use LatLng tiles for everything.
const MY_KEY = 'pk_latlng_your_maps_key';
const DATASET_ID = 'ds_your_dataset_id';

const map = L.map('map').setView([40.71, -74.01], 11);

// Basemap β€” OSM raster tiles (Leaflet cannot render vector PBF tiles)
L.tileLayer(
  'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
  { attribution: 'Β© OpenStreetMap contributors', maxZoom: 19 }
).addTo(map);

// Your dataset as an overlay via leaflet.vectorgrid
const datasetLayer = L.vectorGrid.protobuf(
  `https://tiles.latlng.work/v1/datasets/${DATASET_ID}/{z}/{x}/{y}.pbf?key=${MY_KEY}`,
  {
    vectorTileLayerStyles: {
      [DATASET_ID]: {
        color: '#22c55e',
        weight: 2,
        opacity: 1,
        fill: true,
        fillColor: '#22c55e',
        fillOpacity: 0.25,
      }
    }
  }
).addTo(map);
import maplibregl from 'maplibre-gl';

const MY_KEY = 'pk_latlng_your_maps_key';
const DATASET_ID = 'ds_your_dataset_id';

const map = new maplibregl.Map({
  container: 'map',
  style: `https://tiles.latlng.work/v1/style/dark?key=${MY_KEY}`,
  center: [-74.01, 40.71],
  zoom: 11,
});

map.on('load', () => {
  map.addSource('my-dataset', {
    type: 'vector',
    tiles: [
      `https://tiles.latlng.work/v1/datasets/${DATASET_ID}/{z}/{x}/{y}.pbf?key=${MY_KEY}`
    ],
    minzoom: 0,
    maxzoom: 14,
  });

  map.addLayer({
    id: 'dataset-fill',
    type: 'fill',
    source: 'my-dataset',
    'source-layer': DATASET_ID,
    paint: { 'fill-color': '#22c55e', 'fill-opacity': 0.4 },
  });

  map.addLayer({
    id: 'dataset-line',
    type: 'line',
    source: 'my-dataset',
    'source-layer': DATASET_ID,
    paint: { 'line-color': '#22c55e', 'line-width': 2 },
  });
});
const MY_KEY = 'pk_latlng_your_maps_key';
const DATASET_ID = 'ds_your_dataset_id';

// Fetch metadata (bounds, zoom range, layer name)
const meta = await fetch(
  `https://tiles.latlng.work/v1/datasets/${DATASET_ID}/metadata?key=${MY_KEY}`
).then(r => r.json());
console.log(meta.bounds, meta.minzoom, meta.maxzoom);

// Fetch a single tile as ArrayBuffer
const tile = await fetch(
  `https://tiles.latlng.work/v1/datasets/${DATASET_ID}/7/38/48.pbf?key=${MY_KEY}`
).then(r => r.arrayBuffer());
// Decode with @mapbox/vector-tile or pbf library

πŸ“Š Plan Limits

PlanDatasetsMax file sizeTile requests
Free350 MBUnlimited (CDN-cached)
Pro501 GBUnlimited (CDN-cached)
EnterpriseUnlimited5 GBUnlimited (CDN-cached)
Dataset tile requests are included in your plan and served via our global edge. High-traffic datasets are edge-cached, keeping costs low for everyone. Contact us for dedicated high-volume tiers.