Townships Tiles

Vector tiles for PLSS (Public Land Survey System) township boundaries and labels. Townships are the primary subdivision of the PLSS grid, typically 6 miles square.

Endpoint

GEThttps://api.landmapmagic.com/v1/tiles/townships/{z}/{x}/{y}.mvt

Returns a Mapbox Vector Tile containing township polygon geometries and label points. Zoom range: 0 – 14.

URL Parameters

Parameters

NameTypeDescription
z*numberZoom level (0-14).
x*numberTile X coordinate.
y*numberTile Y coordinate.
key*stringYour API key.

Source Layers

Source Layers

townshipsTownship polygon boundaries.z0-14
townships_labelsTownship label points (centroids).z0-14

Attributes

Available Attributes

AttributeTypeDescription
township_idstringUnique township identifier.
township_namestringPLSS township designation (e.g. "T83N R24W").
display_namestringHuman-readable display name for the township.
friendly_namestringEnriched name from Minor Civil Division (MCD) data when available.
state_namestringFull name of the state containing this township.
typestringFeature type classification (e.g. "township").
feature_idstringBLM (Bureau of Land Management) feature identifier.

Code Examples

curl
curl "https://api.landmapmagic.com/v1/tiles/townships/10/210/380.mvt?key=YOUR_API_KEY" \
  --output tile.mvt
JavaScript
const response = await fetch(
  "https://api.landmapmagic.com/v1/tiles/townships/10/210/380.mvt?key=YOUR_API_KEY"
);
const data = await response.arrayBuffer();
console.log("Tile size:", data.byteLength, "bytes");
Python
import requests

response = requests.get(
    "https://api.landmapmagic.com/v1/tiles/townships/10/210/380.mvt",
    params={"key": "YOUR_API_KEY"}
)
print(f"Status: {response.status_code}, Size: {len(response.content)} bytes")

Response

Response Headers

HTTP/1.1 200 OK
Content-Type: application/vnd.mapbox-vector-tile
Content-Encoding: gzip
Cache-Control: public, max-age=86400

The response body is a binary MVT protobuf. Empty tiles return HTTP 204 with no body.

Styles

Fetch a renderer-ready style for the Townships layer from the unified /v1/styles endpoint. The response includes sources, layers, attribution, zoom ranges, and label deduplication baked in. Use the landmapmagic npm package for one-line install per target, or call the API directly.

MapLibre / Mapbox

Identical payload either way — Mapbox GL JS consumes a MapLibre Style Spec v8 doc as-is. Pick the keyword that reads best in your codebase.

URL (maplibre)
GET https://api.landmapmagic.com/v1/styles?target=maplibre&layers=townships&key=YOUR_API_KEY
URL (mapbox)
GET https://api.landmapmagic.com/v1/styles?target=mapbox&layers=townships&key=YOUR_API_KEY
JavaScript
const style = await fetch(
  'https://api.landmapmagic.com/v1/styles?' +
    new URLSearchParams({
      key: 'YOUR_API_KEY',
      target: 'maplibre', // or 'mapbox' — same response
      layers: 'townships',
    })
).then((r) => r.json());

map.setStyle(style);

Leaflet

URL
GET https://api.landmapmagic.com/v1/styles?target=leaflet&layers=townships&key=YOUR_API_KEY
JavaScript
import { mountLeafletLandMap } from 'landmapmagic/leaflet';

await mountLeafletLandMap({
  apiKey: 'YOUR_API_KEY',
  map,
  layers: ['townships'],
});

Google + deck.gl

URL
GET https://api.landmapmagic.com/v1/styles?target=google&layers=townships&key=YOUR_API_KEY
JavaScript
import { mountGoogleLandMap } from 'landmapmagic/google';

await mountGoogleLandMap({
  apiKey: 'YOUR_API_KEY',
  map,
  overlay,
  layers: ['townships'],
});
Township boundaries are enriched with Minor Civil Division (MCD) names from the US Census Bureau where available. The friendly_nameattribute provides the local MCD name (e.g. "Lincoln Township") in addition to the standard PLSS designation. PLSS data is sourced from the BLM National PLSS dataset and covers the 30 western and midwestern PLSS states.