Skip to content

Granice kantonów ​

Plik: data/canton-boundaries.json. Granica każdego z 162 kantonów sądowych jako geometria GeoJSON, w postaci zdigitalizowanej przez NGI (Nationaal Geografisch Instituut / Institut géographique national, belgijski Narodowy Instytut Geograficzny) na podstawie załącznika do Gerechtelijk Wetboek / Code judiciaire (belgijskiego kodeksu sądowego).

Do czego się przydaje ​

  • Kanton adresu w podzielonym mieście. 55 kantonów obejmuje tylko część gminy (Antwerpen, Gent, Brussel, Luik, Charleroi, …), a getCantonsForMunicipality może jedynie wymienić kandydatów. Dla zgeokodowanego adresu findCantonsAt(lon, lat) podaje jeden kanton, a więc i vredegerecht / justice de paix (sąd pokoju).
  • Mapy. Geometria to standardowy GeoJSON w WGS 84: narysuj kantony na mapie, połącz je z innymi danymi przestrzennymi albo wczytaj do PostGIS, QGIS lub arkusza kalkulacyjnego z mapą.
  • Sprawdzanie tekstu prawnego. Wielokąty NGI są drugim odczytaniem tego samego załącznika, obok tekstu territory każdego kantonu.

Tekst prawny wygrywa

Granica jest interpretacją załącznika do Gerechtelijk Wetboek / Code judiciaire dokonaną przez NGI, zdigitalizowaną na podstawie granic gmin katastralnych, cieków wodnych i dróg. Prawem jest sam załącznik, cytowany dosłownie w territory każdego kantonu. Dla punktu blisko linii granicy przeczytaj tekst; wymienia on ulice i numery domów.

Źródło i aktualizacje ​

ŹródłoNGI, Judicial cantons and arrondissements (Territorial Divisions) na geo.be: GeoPackage w WGS 84 (EPSG:4326), typ obiektu judicialcanton, zrewidowany 16 lipca 2026
Licencja© NGI, CC BY 4.0
Budowane przezscripts/parse/boundaries.ts z cotygodniowego snapshotu GeoPackage
Zmienia się, gdyNGI publikuje nową wersję: co roku, gdy aktualizowane są granice gmin FOD Financiën / SPF Finances, albo gdy ustawa zmienia załącznik
ZakresOd 21 października 2026, dnia, w którym plik został odczytany po raz pierwszy: wyszukiwania dla wcześniejszego dnia rzucają RangeError (czas)
SprawdzanieCo tydzień, przez workflow sources: build kończy się błędem, gdy kanton nie ma granicy albo granica nie pasuje do żadnego kantonu

Jak NGI wyznaczył granice, według jego własnego opisu: tam, gdzie załącznik odwołuje się do granic gmin, użył granic katastralnych FOD Financiën / SPF Finances; tam, gdzie odwołuje się do cieków wodnych lub dróg, własnych danych topograficznych NGI; tam, gdzie odwołuje się do dawnych gmin, granic tych gmin według NGI. Skala to 1:10 000.

Pola ​

PoleTypOpis
idCantonIdId kantonu: kanton ma jedną granicę, która przejmuje jego klucz
validFrom, validTostring?Dni, w których rekord obowiązuje; brak: od początku zakresu albo nadal obowiązuje. Zobacz czas
cantonCantonIdKanton, do którego należy granica
ngiIdstringIdentyfikator obiektu w NGI (jego tgid), GUID
cantonCode{ nl, fr }Kod kantonu w danych NGI: sześć cyfr (248112 dla Gent 1), z prefiksem N lub F zależnie od języka w Regionie Stołecznym Brukseli i w Sint-Genesius-Rode (N238104)
geometryMultiPolygonGeoJSON (RFC 7946): WGS 84, najpierw długość geograficzna, pierścienie zewnętrzne przeciwnie do ruchu wskazówek zegara, otwory zgodnie z nim
sources{ url, retrieved }[]Plik NGI, z którego odczytano rekord
ts
interface CantonBoundary {
    id: CantonId // 'gent-1'
    canton: CantonId // 'gent-1'
    ngiId: string // '{3905ED53-F233-4C4E-8225-4E43FEC7C541}'
    cantonCode: Bilingual // { nl: '248114', fr: '248114' }
    geometry: MultiPolygon // { type: 'MultiPolygon', coordinates: [[[[lon, lat], …]]] }
    sources: SourceRef[]
}

Geometria pochodzi z NGI, wierzchołek po wierzchołku: nic nie jest upraszczane. Współrzędne są zaokrąglane do 7 miejsc po przecinku, około centymetra, poniżej precyzji samego źródła. Każda granica to jeden MultiPolygon, nawet gdy ma jeden wielokąt, więc każdy rekord ma tę samą strukturę.

Jak kantony są dopasowywane do obiektów NGI ​

NGI nazywa każdy obiekt po niderlandzku i po francusku (Eerste gerechtelijk kanton Gent, Premier canton judiciaire de Gand). Obiekt jest granicą kantonu, gdy obie nazwy, zamienione na id w zwykły sposób, dają ten kanton i zgadzają się co do jego numeru. Siedem obiektów jest nazwanych w obu językach nazwą lokalną tam, gdzie załącznik używa egzonimu (Canton judiciaire de Halle, gdzie załącznik mówi Hal; Gerechtelijk kanton Huy, gdzie mówi Hoei); są one mapowane po kodzie kantonu w CANTON_ALIASES w parserze. Wszystko inne zatrzymuje build.

Rozmiar ​

Granice są zdecydowanie największym zbiorem danych: około miliona pozycji. Mają własny entry point, belgica/canton-boundaries, a główny punkt pakietu ich nie reeksportuje, więc nic ich nie ładuje, dopóki o nie nie poprosi:

Entry pointZaładowany JavaScriptgzip
belgica1.0 MB0.1 MB
belgica/canton-boundaries0.2 MB0.0 MB

Surowy plik, data/canton-boundaries.json, jest w pakiecie npm i w każdym wydaniu, więc Python, PostGIS i narzędzia GIS mogą go czytać bez JavaScriptu.

Znajdowanie kantonu dla punktu ​

ts
import { findCantonsAt, getCantonBoundary } from 'belgica/canton-boundaries'
import { getJusticeOfThePeace } from 'belgica/courts'

// Najpierw długość, potem szerokość geograficzna, w kolejności GeoJSON
const [canton] = findCantonsAt(3.7268, 51.053) // Sint-Baafskathedraal, Gent → gent-1
getJusticeOfThePeace(canton.id).address // gdzie złożyć pismo

findCantonsAt(2.3522, 48.8566) // [] : Paryż, poza Belgią
getCantonBoundary('gent-1').geometry // MultiPolygon

findCantonsAt zwraca jeden kanton dla punktu w Belgii, żadnego poza nią i oba kantony dla punktu leżącego dokładnie na linii między dwoma. Nie wymaga żadnej zależności: to prosty test punktu w wielokącie na granicach, około milisekundy na wyszukiwanie. Geokodowanie adresu (ulica i numer na współrzędne) należy do ciebie: robią to regionalne rejestry adresów (flamandzki Adressenregister, brukselski UrbIS, waloński ICAR) i federalne dane adresowe BeSt na geo.be.

W innych językach ​

Plik to zwykła geometria GeoJSON dla każdego rekordu, więc odczyta go każdy GIS. W Pythonie z Shapely:

python
import json
from shapely.geometry import Point, shape

boundaries = json.load(open("data/canton-boundaries.json"))
polygons = {b["canton"]: shape(b["geometry"]) for b in boundaries}

def cantons_at(lon: float, lat: float) -> list[str]:
    point = Point(lon, lat)
    return [canton for canton, polygon in polygons.items() if polygon.covers(point)]

cantons_at(3.7268, 51.053)  # ['gent-1']

Kod na licencji MIT, dane na licencji CC BY 4.0. Dane referencyjne, nie porada prawna: sprawdzaj oficjalne źródła.