CLU Tiles
Vector tiles for USDA Common Land Unit (CLU) boundaries. CLUs represent individual agricultural field boundaries used by the Farm Service Agency for program administration.
Endpoint
https://api.landmapmagic.com/v1/tiles/clu/{z}/{x}/{y}.mvtReturns a Mapbox Vector Tile containing CLU polygon geometries and label points. Zoom range: 12 – 17.
URL Parameters
Parameters
| Name | Type | Description |
|---|---|---|
| z* | number | Zoom level (12-17). |
| x* | number | Tile X coordinate. |
| y* | number | Tile Y coordinate. |
| key* | string | Your API key. |
Source Layers
Source Layers
cluCLU polygon boundaries with acreage and FIPS attributes.z12-17clu_labelsCLU label points showing acreage at higher zoom levels.z13-17Attributes
Available Attributes
| Layer | Attribute | Type | Description |
|---|---|---|---|
| clu | id | number | Unique internal feature identifier. |
| clu | calcacres | number | Calculated acreage of the CLU polygon. |
| clu | state_fips | string | Two-digit FIPS state code (e.g. "19"). |
| clu | county_fips | string | Three-digit FIPS county code (e.g. "169"). |
| clu_labels | id | number | Unique internal feature identifier. |
| clu_labels | calcacres | number | Calculated acreage displayed as the label value. |
Code Examples
curl "https://api.landmapmagic.com/v1/tiles/clu/14/3640/6350.mvt?key=YOUR_API_KEY" \
--output tile.mvtconst response = await fetch(
"https://api.landmapmagic.com/v1/tiles/clu/14/3640/6350.mvt?key=YOUR_API_KEY"
);
const data = await response.arrayBuffer();
console.log("Tile size:", data.byteLength, "bytes");import requests
response = requests.get(
"https://api.landmapmagic.com/v1/tiles/clu/14/3640/6350.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=86400The response body is a binary MVT protobuf. Empty tiles (areas with no CLU data, such as urban zones or non-agricultural land) return HTTP 204 with no body.
Styles
Fetch a renderer-ready style for the CLU 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.
GET https://api.landmapmagic.com/v1/styles?target=maplibre&layers=clu&key=YOUR_API_KEYGET https://api.landmapmagic.com/v1/styles?target=mapbox&layers=clu&key=YOUR_API_KEYconst style = await fetch(
'https://api.landmapmagic.com/v1/styles?' +
new URLSearchParams({
key: 'YOUR_API_KEY',
target: 'maplibre', // or 'mapbox' — same response
layers: 'clu',
})
).then((r) => r.json());
map.setStyle(style);Leaflet
GET https://api.landmapmagic.com/v1/styles?target=leaflet&layers=clu&key=YOUR_API_KEYimport { mountLeafletLandMap } from 'landmapmagic/leaflet';
await mountLeafletLandMap({
apiKey: 'YOUR_API_KEY',
map,
layers: ['clu'],
});Google + deck.gl
GET https://api.landmapmagic.com/v1/styles?target=google&layers=clu&key=YOUR_API_KEYimport { mountGoogleLandMap } from 'landmapmagic/google';
await mountGoogleLandMap({
apiKey: 'YOUR_API_KEY',
map,
overlay,
layers: ['clu'],
});