Granice administracyjne (GeoJSON)
GET /v1/boundaries/counties i GET /v1/boundaries/regions zwracają granice administracyjne Polski z zatwierdzonej edycji PRG (GUGiK) jako RFC 7946 FeatureCollection w WGS84: 380 powiatów (włącznie z miastami na prawach powiatu) i 16 województw, kluczowanych kodem TERC. Każdy feature niesie geometrię Polygon albo MultiPolygon w parach [lon, lat] (pierścienie zamknięte, zewnętrzne przeciwnie do wskazówek zegara) oraz właściwości terc, name (dosłowna nazwa z katalogu TERC tej instancji; null, gdy katalogu brak), kind, provinceCode oraz labelLat/labelLon — punkt etykietowania: punkt wnętrza najdalszy od granicy kształtu, nie środek bounding boxa, który dla dziesięciu z 380 powiatów leży w sąsiedzie.
Wspólna granica sąsiadów jest upraszczana RAZ — jako łuk, którym oba powiaty przechodzą — więc sąsiednie feature niosą tę samą linię i miedzy powiatami nie ma rys, bez zamalowywania ich białym obrysem. Opcjonalny filtr ?province=<WOJ> zawęża zbiór do jednego województwa (cały kraj to ~0,7 MB surowe, ~70 kB po kompresji); 404 dla dobrze sformułowanego kodu, którego geometria nie zna — pusta kolekcja czytałaby się jak „województwo zniknęło”. Nagłówek odpowiedzi X-PRG-Boundaries-Version podaje edycję PRG, z której geometria pochodzi, więc konsument może audytować, co narysował.
GET /v1/boundaries/counties
Wszystkie 380 powiatów w jednym GeoJSON; ?province= zawęża do jednego województwa. Content-Type: application/geo+json.
Sprawdź na żywo: /v1/boundaries/counties?province=14
| Nazwa | Wymagany | Opis |
|---|---|---|
province | — | Optional 2-digit TERC voivodeship code filter (e.g. '14'), as served by /v1/regions — trims the collection to that voivodeship's geometry. A blank value is treated as absent. |
Przykład
Powiaty Mazowieckiego (?province=14)
curl "https://teryt24.pl/v1/boundaries/counties?province=14"Odpowiedź (skrócona — pokazano pierwsze wiersze):
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[21.20657, 51.58833], [21.21739, 51.59667], [21.20116, 51.605],
[21.21739, 51.60667], [21.2282, 51.63167], [21.24172, 51.63667],
… 67 more pairs — the ring closes on [21.20657, 51.58833]
]]
},
"properties": { "terc": "1401", "name": "białobrzeski", "kind": "powiat", "provinceCode": "14", "labelLat": 51.61462, "labelLon": 20.95693 }
},
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[[ [20.85504, 51.34333], [20.86045, 51.36], [20.84152, 51.35667], … 79 more pairs — closes on [20.85504, 51.34333] ]],
[[ [20.61978, 51.235], [20.62789, 51.24], [20.61708, 51.24333], [20.61978, 51.235] ]]
]
},
"properties": { "terc": "1423", "name": "przysuski", "kind": "powiat", "provinceCode": "14", "labelLat": 51.38507, "labelLon": 20.63991 }
}
]
}| Status | Opis |
|---|---|
200 | Successful response — an RFC 7946 FeatureCollection. |
400 | Invalid query parameters. |
404 | The province filter is a well-formed code the boundary geometry does not cover. |
429 | Rate limit exceeded (60 requests/min/IP) or a plan's monthly quota exhausted. Includes `Retry-After` and `X-RateLimit-*` headers; the body's `code` distinguishes the two kinds. |
503 | Service is warming up. |
Cały przykład na żywo — choropleth 380 powiatów po realnych liczbach tej instancji — działa na demonstracji granic.
const res = await fetch("https://teryt24.pl/v1/boundaries/counties?province=14");
const geo = await res.json(); // RFC 7946 FeatureCollection — WGS84 [lon, lat]
map.on("load", function () {
map.addSource("powiats", { type: "geojson", data: geo });
map.addLayer({
id: "powiats-fill",
type: "fill",
source: "powiats",
paint: { "fill-color": "#9fc7ae", "fill-opacity": 0.55 },
});
map.addLayer({
id: "powiats-outline",
type: "line",
source: "powiats",
paint: { "line-color": "#2f6f4f", "line-width": 0.7 },
});
});
// feature.properties.terc is the join key: the same 4-digit county codes
// GET /v1/regions/{code}/counties answers with, so shading the map by any
// per-county figure of your own is one match() expression on ["get", "terc"].GET /v1/boundaries/regions
16 województw — ta sama geometria co powiaty, poziom wyżej: provinceCode jest tu równe terc.
Sprawdź na żywo: /v1/boundaries/regions
| Nazwa | Wymagany | Opis |
|---|---|---|
province | — | Optional 2-digit TERC voivodeship code filter (e.g. '14'), as served by /v1/regions — trims the collection to that voivodeship's geometry. A blank value is treated as absent. |
Przykład
Lista województw
curl "https://teryt24.pl/v1/boundaries/regions"Odpowiedź (skrócona — pokazano pierwsze wiersze):
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [[
[16.41491, 51.785], [16.26889, 51.66333], [16.21751, 51.715],
… 137 more pairs — the ring closes on [16.41491, 51.785]
]]
},
"properties": { "terc": "02", "name": "DOLNOŚLĄSKIE", "kind": "region", "provinceCode": "02", "labelLat": 51.14961, "labelLon": 16.42419 }
}
… 15 more features — one per voivodeship, sorted by TERC code
]
}| Status | Opis |
|---|---|
200 | Successful response — an RFC 7946 FeatureCollection. |
400 | Invalid query parameters. |
404 | The province filter is a well-formed code the boundary geometry does not cover. |
429 | Rate limit exceeded (60 requests/min/IP) or a plan's monthly quota exhausted. Includes `Retry-After` and `X-RateLimit-*` headers; the body's `code` distinguishes the two kinds. |
503 | Service is warming up. |
Przeglądaj dane
Te same granice rysują strony statystyczne — mapa i tabela w przeglądarce:
Wszystkie endpointy /v1 zwracają JSON, obsługują CORS i są objęte dokumentem openapi.json. Interaktywna wersja tej referencji: /docs.
Limity: 60 zapytań/min na IP bez klucza; klucz API (nagłówek X-API-Key) dostaje własny kubełek. Po przekroczeniu endpointy odpowiadają HTTP 429 z nagłówkiem Retry-After. Szczegóły: limity i klucze · zasady użycia.
Dane: GUS TERYT, punkty adresowe PRG (GUGiK), kody pocztowe GeoNames — przez teryt24.pl z linkiem do zasad użycia. Użycie wyłącznie po stronie serwera jest zwolnione.