Tilify · Ground Station
probing…
--:--:-- UTC
CURSOR --.----, --.---- TILE z-/x-/y- GET /osm/atlas/{z}/{x}/{y}.png SCROLL

File to endpoint, server-side

Nothing to install, no keys to manage. The same pipeline runs whether you drop a file on the scene above or POST raw bytes to the API.

STEP 1

Drop

GeoTIFF / COG, GeoJSON, or zipped Shapefile. Drop onto the scene, or send raw bytes to POST /upload-*.

STEP 2

Normalize

Vector: ogr2ogr → WGS84 FlatGeobuf. Raster: GDAL → sharded, multiscale Zarr v3 store.

STEP 3

Tile

Vector: tippecanoe → PMTiles. Raster: pyramid rendered on demand to RGBA8 PNG.

STEP 4

Serve

A public XYZ endpoint, CORS *. Paste into Leaflet, MapLibre, OpenLayers, deck.gl or QGIS.

One request · one endpoint · same pipeline as the API

No dataset handy?

It really uploads: you get a real public endpoint.

Endpoints

Everything the scene above does is one HTTP call away. Every tile and JSON route sends Access-Control-Allow-Origin: *.

RouteReturns
POST/upload-vector?format=geojson|shapefilebody = file bytes → { "key", "tiles", "minzoom", "maxzoom" }
POST/upload-raster?format=geotiff|cogbody = file bytes → { "key", "tiles", "minzoom", "maxzoom" }
GET/tiles/:key/{z}/{x}/{y}.pbfvector XYZ tiles (MVT)
GET/raster/:key/{z}/{x}/{y}.pngraster XYZ tiles (RGBA8 PNG)
GET/osm/:style/{z}/{x}/{y}.pngbasemap tiles (atlas · paper · onyx · terra · fjord · meridian)
GET/osm/stylesstyle list (JSON, with URL templates)
GET/health200 ok

    

Tip: add ?key=<name> to an upload to pick your own layer key; omit it and one is generated.

Six self-hosted basemaps

OpenMapTiles data served from a self-hosted tileserver behind this domain: no key, no third-party quota. Covers below are real tiles from /osm/<style>/{z}/{x}/{y}.png; select one to load it live.

Your data, on the map.

One drop away from a public XYZ endpoint. Nothing to sign, nothing to install, nothing to run.