From 4ce9f770e453851cad72962eb4bf15991f0df6f3 Mon Sep 17 00:00:00 2001 From: Wim De Clercq Date: Mon, 25 Oct 2021 17:11:06 +0200 Subject: [PATCH 1/4] Add adressenregister client and gateway. Remove py2 code. Issue #104 --- crabpy/client.py | 198 +- crabpy/data/deelgemeenten.json | 7924 ++++++++---------- crabpy/data/gewesten.json | 20 + crabpy/data/provincies.json | 52 + crabpy/gateway/adressenregister.py | 822 ++ crabpy/gateway/capakey.py | 221 +- crabpy/gateway/crab.py | 586 +- crabpy/gateway/exception.py | 25 +- crabpy/wsa.py | 23 +- crabpy/wsse.py | 17 +- examples/adressenregister_gateway_caching.py | 37 + examples/capakey.py | 5 +- examples/capakey_gateway.py | 1 - examples/capakey_gateway_caching.py | 5 +- examples/capakey_gateway_rest.py | 1 - examples/capakey_gateway_rest_caching.py | 5 +- examples/crab.py | 5 +- examples/crab_client.py | 5 +- examples/crab_gateway.py | 5 +- examples/crab_gateway_admin_units.py | 7 +- examples/crab_gateway_adrespositie.py | 7 +- examples/crab_gateway_caching.py | 5 +- examples/crab_gateway_get_huisnummer.py | 7 +- examples/crab_proxy.py | 5 +- requirements-dev.txt | 1 - requirements.txt | 1 - setup.py | 9 +- tests/__init__.py | 33 +- tests/conftest.py | 9 +- tests/gateway/test_adressenregister.py | 526 ++ tests/gateway/test_capakey.py | 5 +- tests/gateway/test_capakey_cached.py | 2 - tests/gateway/test_crab.py | 9 +- tests/gateway/test_crab_cached.py | 6 +- tests/gateway/test_exception.py | 2 - tests/test_client.py | 179 +- tests/test_wsa.py | 2 - tests/test_wsse.py | 8 +- 38 files changed, 5689 insertions(+), 5091 deletions(-) create mode 100644 crabpy/data/gewesten.json create mode 100644 crabpy/data/provincies.json create mode 100644 crabpy/gateway/adressenregister.py create mode 100644 examples/adressenregister_gateway_caching.py create mode 100644 tests/gateway/test_adressenregister.py diff --git a/crabpy/client.py b/crabpy/client.py index adc9285..b897ea5 100644 --- a/crabpy/client.py +++ b/crabpy/client.py @@ -1,20 +1,19 @@ -# -*- coding: utf-8 -*- -''' +""" This module contains utility functions for interacting with AGIV SOAP services. .. versionadded:: 0.1.0 -''' - -from __future__ import unicode_literals - +""" import logging -log = logging.getLogger(__name__) +import requests +from requests import RequestException from suds.client import Client +log = logging.getLogger(__name__) + def crab_factory(**kwargs): - ''' + """ Factory that generates a CRAB client. A few parameters will be handled by the factory, other parameters will @@ -24,22 +23,19 @@ def crab_factory(**kwargs): :param proxy: `Optional.` A dictionary of proxy information that is passed to the underlying :class:`suds.client.Client` :rtype: :class:`suds.client.Client` - ''' - if 'wsdl' in kwargs: - wsdl = kwargs['wsdl'] - del kwargs['wsdl'] + """ + if "wsdl" in kwargs: + wsdl = kwargs["wsdl"] + del kwargs["wsdl"] else: wsdl = "http://crab.agiv.be/wscrab/wscrab.svc?wsdl" - log.info('Creating CRAB client with wsdl: %s', wsdl) - c = Client( - wsdl, - **kwargs - ) + log.info("Creating CRAB client with wsdl: %s", wsdl) + c = Client(wsdl, **kwargs) return c def crab_request(client, action, *args): - ''' + """ Utility function that helps making requests to the CRAB service. :param client: A :class:`suds.client.Client` for the CRAB service. @@ -47,6 +43,168 @@ def crab_request(client, action, *args): :returns: Result of the SOAP call. .. versionadded:: 0.3.0 - ''' - log.debug('Calling %s on CRAB service.', action) + """ + log.debug("Calling %s on CRAB service.", action) return getattr(client.service, action)(*args) + + +class AdressenRegisterClientException(Exception): + pass + + +class AdressenRegisterClient: + def __init__(self, base_url, api_key): + super().__init__() + self.session = requests.Session() + self.session.headers.update( + {"Accept": "application/json", "x-api-key": api_key} + ) + self.base_url = base_url[:-1] if base_url.endswith("/") else base_url + + def _get_list(self, url, response_key, params=None): + if params is None: + params = {} + if "limit" not in params: + params["limit"] = 500 + result = [] + response = {"volgende": f"{self.base_url}{url}"} + try: + while "volgende" in response: + response = self.session.get( + response["volgende"], params=params + ) + response.raise_for_status() + response = response.json() + result.extend(response[response_key]) + except RequestException as e: + raise AdressenRegisterClientException from e + return result + + def _get(self, url, params=None): + try: + response = self.session.get(f"{self.base_url}{url}", params=params) + response.raise_for_status() + return response.json() + except RequestException as e: + raise AdressenRegisterClientException from e + + def get_gemeente(self, gemeente_id): + return self._get(f"/v1/gemeenten/{gemeente_id}") + + def get_gemeenten(self, gemeentenaam=None, status=None): + params = {} + if gemeentenaam is not None: + params["gemeentenaam"] = gemeentenaam + if status is not None: + params["status"] = status + return self._get_list("/v1/gemeenten", "gemeenten", params) + + def get_postinfo(self, postinfo_id): + return self._get(f"/v1/postinfo/{postinfo_id}") + + def get_postinfos(self, gemeentenaam=None): + params = {} + if gemeentenaam is not None: + params["gemeentenaam"] = gemeentenaam + return self._get_list("/v1/postinfo", "postInfoObjecten", params=params) + + def get_straatnaam(self, straatnaam_id): + return self._get(f"/v1/straatnamen/{straatnaam_id}") + + def get_straatnamen( + self, straatnaam=None, gemeentenaam=None, niscode=None, status=None + ): + params = {} + if straatnaam is not None: + params["straatnaam"] = straatnaam + if gemeentenaam is not None: + params["gemeentenaam"] = gemeentenaam + if niscode is not None: + params["nisCode"] = niscode + if status is not None: + params["status"] = status + return self._get_list("/v1/straatnamen", "straatnamen", params=params) + + def get_adres_match( + self, + gemeentenaam=None, + niscode=None, + postcode=None, + kadaster_straatcode=None, + rr_straatcode=None, + straatnaam=None, + huisnummer=None, + index=None, + busnummer=None, + ): + params = {} + if gemeentenaam is not None: + params["gemeentenaam"] = gemeentenaam + if niscode is not None: + params["niscode"] = niscode + if postcode is not None: + params["postcode"] = postcode + if kadaster_straatcode is not None: + params["kadStraatcode"] = kadaster_straatcode + if rr_straatcode is not None: + params["rrStraatcode"] = rr_straatcode + if straatnaam is not None: + params["straatnaam"] = straatnaam + if huisnummer is not None: + params["huisnummer"] = huisnummer + if index is not None: + params["index"] = index + if busnummer is not None: + params["busnummer"] = busnummer + return self._get("/v1/adresmatch", params=params) + + def get_adres(self, adres_id): + return self._get(f"/v1/adressen/{adres_id}") + + def get_adressen( + self, + gemeentenaam=None, + postcode=None, + straatnaam=None, + homoniem_toevoeging=None, + huisnummer=None, + busnummer=None, + niscode=None, + status=None, + ): + params = {} + if gemeentenaam is not None: + params["gemeentenaam"] = gemeentenaam + if postcode is not None: + params["postcode"] = postcode + if straatnaam is not None: + params["straatnaam"] = straatnaam + if homoniem_toevoeging is not None: + params["homoniemToevoeging"] = homoniem_toevoeging + if huisnummer is not None: + params["huisnummer"] = huisnummer + if busnummer is not None: + params["busnummer"] = busnummer + if niscode is not None: + params["niscode"] = niscode + if status is not None: + params["status"] = status + return self._get_list("/v1/adressen", "adressen", params=params) + + def get_perceel(self, perceel_id): + return self._get(f"/v1/percelen/{perceel_id}") + + def get_percelen(self, status=None): + params = {} + if status is not None: + params["status"] = status + return self._get_list(f"/v1/percelen", "percelen", params=params) + + def get_gebouw(self, gebouw_id): + return self._get(f"/v1/gebouwen/{gebouw_id}") + + def get_gebouwen(self, status=None): + params = {} + if status is not None: + params["status"] = status + return self._get_list(f"/v1/gebouwen", "gebouwen", params=params) diff --git a/crabpy/data/deelgemeenten.json b/crabpy/data/deelgemeenten.json index a8d9a96..0cd0907 100644 --- a/crabpy/data/deelgemeenten.json +++ b/crabpy/data/deelgemeenten.json @@ -1,6794 +1,5662 @@ [ { - "deelgemeente_id": "11001A", - "deelgemeente_naam": "Aartselaar", - "gemeente_id": "11001", - "provincie_id": "10000" + "id": "11001A", + "naam": "Aartselaar", + "gemeente_niscode": "11001" }, { - "deelgemeente_id": "11002A", - "deelgemeente_naam": "Antwerpen", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002A", + "naam": "Antwerpen", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002B", - "deelgemeente_naam": "Lillo", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002B", + "naam": "Lillo", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002K", - "deelgemeente_naam": "Berendrecht", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002K", + "naam": "Berendrecht", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002L", - "deelgemeente_naam": "Zandvliet", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002L", + "naam": "Zandvliet", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002P", - "deelgemeente_naam": "Ekeren", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002P", + "naam": "Ekeren", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002Q", - "deelgemeente_naam": "Merksem", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002Q", + "naam": "Merksem", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002R", - "deelgemeente_naam": "Deurne", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002R", + "naam": "Deurne", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002S", - "deelgemeente_naam": "Borgerhout", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002S", + "naam": "Borgerhout", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002T", - "deelgemeente_naam": "Berchem", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002T", + "naam": "Berchem", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002U", - "deelgemeente_naam": "Wilrijk", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002U", + "naam": "Wilrijk", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11002V", - "deelgemeente_naam": "Hoboken", - "gemeente_id": "11002", - "provincie_id": "10000" + "id": "11002V", + "naam": "Hoboken", + "gemeente_niscode": "11002" }, { - "deelgemeente_id": "11004A", - "deelgemeente_naam": "Boechout", - "gemeente_id": "11004", - "provincie_id": "10000" + "id": "11004A", + "naam": "Boechout", + "gemeente_niscode": "11004" }, { - "deelgemeente_id": "11004B", - "deelgemeente_naam": "Vremde", - "gemeente_id": "11004", - "provincie_id": "10000" + "id": "11004B", + "naam": "Vremde", + "gemeente_niscode": "11004" }, { - "deelgemeente_id": "11005A", - "deelgemeente_naam": "Boom", - "gemeente_id": "11005", - "provincie_id": "10000" + "id": "11005A", + "naam": "Boom", + "gemeente_niscode": "11005" }, { - "deelgemeente_id": "11007A", - "deelgemeente_naam": "Borsbeek", - "gemeente_id": "11007", - "provincie_id": "10000" + "id": "11007A", + "naam": "Borsbeek", + "gemeente_niscode": "11007" }, { - "deelgemeente_id": "11008A", - "deelgemeente_naam": "Brasschaat", - "gemeente_id": "11008", - "provincie_id": "10000" + "id": "11008A", + "naam": "Brasschaat", + "gemeente_niscode": "11008" }, { - "deelgemeente_id": "11009A", - "deelgemeente_naam": "Brecht", - "gemeente_id": "11009", - "provincie_id": "10000" + "id": "11009A", + "naam": "Brecht", + "gemeente_niscode": "11009" }, { - "deelgemeente_id": "11009B", - "deelgemeente_naam": "Sint-Lenaarts", - "gemeente_id": "11009", - "provincie_id": "10000" + "id": "11009B", + "naam": "Sint-Lenaarts", + "gemeente_niscode": "11009" }, { - "deelgemeente_id": "11009C", - "deelgemeente_naam": "Sint-Job-in-'t Goor", - "gemeente_id": "11009", - "provincie_id": "10000" + "id": "11009C", + "naam": "Sint-Job-in-'t Goor", + "gemeente_niscode": "11009" }, { - "deelgemeente_id": "11013A", - "deelgemeente_naam": "Edegem", - "gemeente_id": "11013", - "provincie_id": "10000" + "id": "11013A", + "naam": "Edegem", + "gemeente_niscode": "11013" }, { - "deelgemeente_id": "11016A", - "deelgemeente_naam": "Essen", - "gemeente_id": "11016", - "provincie_id": "10000" + "id": "11016A", + "naam": "Essen", + "gemeente_niscode": "11016" }, { - "deelgemeente_id": "11018A", - "deelgemeente_naam": "Hemiksem", - "gemeente_id": "11018", - "provincie_id": "10000" + "id": "11018A", + "naam": "Hemiksem", + "gemeente_niscode": "11018" }, { - "deelgemeente_id": "11021A", - "deelgemeente_naam": "Hove", - "gemeente_id": "11021", - "provincie_id": "10000" + "id": "11021A", + "naam": "Hove", + "gemeente_niscode": "11021" }, { - "deelgemeente_id": "11022A", - "deelgemeente_naam": "Kalmthout", - "gemeente_id": "11022", - "provincie_id": "10000" + "id": "11022A", + "naam": "Kalmthout", + "gemeente_niscode": "11022" }, { - "deelgemeente_id": "11023A", - "deelgemeente_naam": "Kapellen", - "gemeente_id": "11023", - "provincie_id": "10000" + "id": "11023A", + "naam": "Kapellen", + "gemeente_niscode": "11023" }, { - "deelgemeente_id": "11024A", - "deelgemeente_naam": "Kontich", - "gemeente_id": "11024", - "provincie_id": "10000" + "id": "11024A", + "naam": "Kontich", + "gemeente_niscode": "11024" }, { - "deelgemeente_id": "11024B", - "deelgemeente_naam": "Waarloos", - "gemeente_id": "11024", - "provincie_id": "10000" + "id": "11024B", + "naam": "Waarloos", + "gemeente_niscode": "11024" }, { - "deelgemeente_id": "11025A", - "deelgemeente_naam": "Lint", - "gemeente_id": "11025", - "provincie_id": "10000" + "id": "11025A", + "naam": "Lint", + "gemeente_niscode": "11025" }, { - "deelgemeente_id": "11029A", - "deelgemeente_naam": "Mortsel", - "gemeente_id": "11029", - "provincie_id": "10000" + "id": "11029A", + "naam": "Mortsel", + "gemeente_niscode": "11029" }, { - "deelgemeente_id": "11030A", - "deelgemeente_naam": "Niel", - "gemeente_id": "11030", - "provincie_id": "10000" + "id": "11030A", + "naam": "Niel", + "gemeente_niscode": "11030" }, { - "deelgemeente_id": "11035A", - "deelgemeente_naam": "Ranst", - "gemeente_id": "11035", - "provincie_id": "10000" + "id": "11035A", + "naam": "Ranst", + "gemeente_niscode": "11035" }, { - "deelgemeente_id": "11035B", - "deelgemeente_naam": "Oelegem", - "gemeente_id": "11035", - "provincie_id": "10000" + "id": "11035B", + "naam": "Oelegem", + "gemeente_niscode": "11035" }, { - "deelgemeente_id": "11035C", - "deelgemeente_naam": "Broechem", - "gemeente_id": "11035", - "provincie_id": "10000" + "id": "11035C", + "naam": "Broechem", + "gemeente_niscode": "11035" }, { - "deelgemeente_id": "11035D", - "deelgemeente_naam": "Emblem", - "gemeente_id": "11035", - "provincie_id": "10000" + "id": "11035D", + "naam": "Emblem", + "gemeente_niscode": "11035" }, { - "deelgemeente_id": "11037A", - "deelgemeente_naam": "Rumst", - "gemeente_id": "11037", - "provincie_id": "10000" + "id": "11037A", + "naam": "Rumst", + "gemeente_niscode": "11037" }, { - "deelgemeente_id": "11037B", - "deelgemeente_naam": "Terhagen", - "gemeente_id": "11037", - "provincie_id": "10000" + "id": "11037B", + "naam": "Terhagen", + "gemeente_niscode": "11037" }, { - "deelgemeente_id": "11037C", - "deelgemeente_naam": "Reet", - "gemeente_id": "11037", - "provincie_id": "10000" + "id": "11037C", + "naam": "Reet", + "gemeente_niscode": "11037" }, { - "deelgemeente_id": "11038A", - "deelgemeente_naam": "Schelle", - "gemeente_id": "11038", - "provincie_id": "10000" + "id": "11038A", + "naam": "Schelle", + "gemeente_niscode": "11038" }, { - "deelgemeente_id": "11039A", - "deelgemeente_naam": "Schilde", - "gemeente_id": "11039", - "provincie_id": "10000" + "id": "11039A", + "naam": "Schilde", + "gemeente_niscode": "11039" }, { - "deelgemeente_id": "11039B", - "deelgemeente_naam": "'s Gravenwezel", - "gemeente_id": "11039", - "provincie_id": "10000" + "id": "11039B", + "naam": "'s Gravenwezel", + "gemeente_niscode": "11039" }, { - "deelgemeente_id": "11040A", - "deelgemeente_naam": "Schoten", - "gemeente_id": "11040", - "provincie_id": "10000" + "id": "11040A", + "naam": "Schoten", + "gemeente_niscode": "11040" }, { - "deelgemeente_id": "11044A", - "deelgemeente_naam": "Stabroek", - "gemeente_id": "11044", - "provincie_id": "10000" + "id": "11044A", + "naam": "Stabroek", + "gemeente_niscode": "11044" }, { - "deelgemeente_id": "11044B", - "deelgemeente_naam": "Hoevenen", - "gemeente_id": "11044", - "provincie_id": "10000" + "id": "11044B", + "naam": "Hoevenen", + "gemeente_niscode": "11044" }, { - "deelgemeente_id": "11050A", - "deelgemeente_naam": "Wijnegem", - "gemeente_id": "11050", - "provincie_id": "10000" + "id": "11050A", + "naam": "Wijnegem", + "gemeente_niscode": "11050" }, { - "deelgemeente_id": "11052A", - "deelgemeente_naam": "Wommelgem", - "gemeente_id": "11052", - "provincie_id": "10000" + "id": "11052A", + "naam": "Wommelgem", + "gemeente_niscode": "11052" }, { - "deelgemeente_id": "11053A", - "deelgemeente_naam": "Wuustwezel", - "gemeente_id": "11053", - "provincie_id": "10000" + "id": "11053A", + "naam": "Wuustwezel", + "gemeente_niscode": "11053" }, { - "deelgemeente_id": "11053B", - "deelgemeente_naam": "Loenhout", - "gemeente_id": "11053", - "provincie_id": "10000" + "id": "11053B", + "naam": "Loenhout", + "gemeente_niscode": "11053" }, { - "deelgemeente_id": "11054A", - "deelgemeente_naam": "Zandhoven", - "gemeente_id": "11054", - "provincie_id": "10000" + "id": "11054A", + "naam": "Zandhoven", + "gemeente_niscode": "11054" }, { - "deelgemeente_id": "11054B", - "deelgemeente_naam": "Pulderbos", - "gemeente_id": "11054", - "provincie_id": "10000" + "id": "11054B", + "naam": "Pulderbos", + "gemeente_niscode": "11054" }, { - "deelgemeente_id": "11054C", - "deelgemeente_naam": "Pulle", - "gemeente_id": "11054", - "provincie_id": "10000" + "id": "11054C", + "naam": "Pulle", + "gemeente_niscode": "11054" }, { - "deelgemeente_id": "11054D", - "deelgemeente_naam": "Viersel", - "gemeente_id": "11054", - "provincie_id": "10000" + "id": "11054D", + "naam": "Viersel", + "gemeente_niscode": "11054" }, { - "deelgemeente_id": "11054E", - "deelgemeente_naam": "Massenhoven", - "gemeente_id": "11054", - "provincie_id": "10000" + "id": "11054E", + "naam": "Massenhoven", + "gemeente_niscode": "11054" }, { - "deelgemeente_id": "11055A", - "deelgemeente_naam": "Zoersel", - "gemeente_id": "11055", - "provincie_id": "10000" + "id": "11055A", + "naam": "Zoersel", + "gemeente_niscode": "11055" }, { - "deelgemeente_id": "11055B", - "deelgemeente_naam": "Halle", - "gemeente_id": "11055", - "provincie_id": "10000" + "id": "11055B", + "naam": "Halle", + "gemeente_niscode": "11055" }, { - "deelgemeente_id": "11056A", - "deelgemeente_naam": "Zwijndrecht", - "gemeente_id": "11056", - "provincie_id": "10000" + "id": "11056A", + "naam": "Zwijndrecht", + "gemeente_niscode": "11056" }, { - "deelgemeente_id": "11056B", - "deelgemeente_naam": "Burcht", - "gemeente_id": "11056", - "provincie_id": "10000" + "id": "11056B", + "naam": "Burcht", + "gemeente_niscode": "11056" }, { - "deelgemeente_id": "11057A", - "deelgemeente_naam": "Westmalle", - "gemeente_id": "11057", - "provincie_id": "10000" + "id": "11057A", + "naam": "Westmalle", + "gemeente_niscode": "11057" }, { - "deelgemeente_id": "11057B", - "deelgemeente_naam": "Oostmalle", - "gemeente_id": "11057", - "provincie_id": "10000" + "id": "11057B", + "naam": "Oostmalle", + "gemeente_niscode": "11057" }, { - "deelgemeente_id": "12002A", - "deelgemeente_naam": "Berlaar", - "gemeente_id": "12002", - "provincie_id": "10000" + "id": "12002A", + "naam": "Berlaar", + "gemeente_niscode": "12002" }, { - "deelgemeente_id": "12005A", - "deelgemeente_naam": "Bonheiden", - "gemeente_id": "12005", - "provincie_id": "10000" + "id": "12005A", + "naam": "Bonheiden", + "gemeente_niscode": "12005" }, { - "deelgemeente_id": "12005B", - "deelgemeente_naam": "Rijmenam", - "gemeente_id": "12005", - "provincie_id": "10000" + "id": "12005B", + "naam": "Rijmenam", + "gemeente_niscode": "12005" }, { - "deelgemeente_id": "12007A", - "deelgemeente_naam": "Bornem", - "gemeente_id": "12007", - "provincie_id": "10000" + "id": "12007A", + "naam": "Bornem", + "gemeente_niscode": "12007" }, { - "deelgemeente_id": "12007B", - "deelgemeente_naam": "Hingene", - "gemeente_id": "12007", - "provincie_id": "10000" + "id": "12007B", + "naam": "Hingene", + "gemeente_niscode": "12007" }, { - "deelgemeente_id": "12007C", - "deelgemeente_naam": "Mariekerke", - "gemeente_id": "12007", - "provincie_id": "10000" + "id": "12007C", + "naam": "Mariekerke", + "gemeente_niscode": "12007" }, { - "deelgemeente_id": "12007D", - "deelgemeente_naam": "Weert", - "gemeente_id": "12007", - "provincie_id": "10000" + "id": "12007D", + "naam": "Weert", + "gemeente_niscode": "12007" }, { - "deelgemeente_id": "12009A", - "deelgemeente_naam": "Duffel", - "gemeente_id": "12009", - "provincie_id": "10000" + "id": "12009A", + "naam": "Duffel", + "gemeente_niscode": "12009" }, { - "deelgemeente_id": "12014A", - "deelgemeente_naam": "Heist-op-den-Berg", - "gemeente_id": "12014", - "provincie_id": "10000" + "id": "12014A", + "naam": "Heist-op-den-Berg", + "gemeente_niscode": "12014" }, { - "deelgemeente_id": "12014B", - "deelgemeente_naam": "Hallaar", - "gemeente_id": "12014", - "provincie_id": "10000" + "id": "12014B", + "naam": "Hallaar", + "gemeente_niscode": "12014" }, { - "deelgemeente_id": "12014C", - "deelgemeente_naam": "Itegem", - "gemeente_id": "12014", - "provincie_id": "10000" + "id": "12014C", + "naam": "Itegem", + "gemeente_niscode": "12014" }, { - "deelgemeente_id": "12014D", - "deelgemeente_naam": "Wiekevorst", - "gemeente_id": "12014", - "provincie_id": "10000" + "id": "12014D", + "naam": "Wiekevorst", + "gemeente_niscode": "12014" }, { - "deelgemeente_id": "12014E", - "deelgemeente_naam": "Booischot", - "gemeente_id": "12014", - "provincie_id": "10000" + "id": "12014E", + "naam": "Booischot", + "gemeente_niscode": "12014" }, { - "deelgemeente_id": "12014F", - "deelgemeente_naam": "Schriek", - "gemeente_id": "12014", - "provincie_id": "10000" + "id": "12014F", + "naam": "Schriek", + "gemeente_niscode": "12014" }, { - "deelgemeente_id": "12021A", - "deelgemeente_naam": "Lier", - "gemeente_id": "12021", - "provincie_id": "10000" + "id": "12021A", + "naam": "Lier", + "gemeente_niscode": "12021" }, { - "deelgemeente_id": "12021B", - "deelgemeente_naam": "Koningshooikt", - "gemeente_id": "12021", - "provincie_id": "10000" + "id": "12021B", + "naam": "Koningshooikt", + "gemeente_niscode": "12021" }, { - "deelgemeente_id": "12025A", - "deelgemeente_naam": "Mechelen", - "gemeente_id": "12025", - "provincie_id": "10000" + "id": "12025A", + "naam": "Mechelen", + "gemeente_niscode": "12025" }, { - "deelgemeente_id": "12025B", - "deelgemeente_naam": "Hombeek", - "gemeente_id": "12025", - "provincie_id": "10000" + "id": "12025B", + "naam": "Hombeek", + "gemeente_niscode": "12025" }, { - "deelgemeente_id": "12025C", - "deelgemeente_naam": "Leest", - "gemeente_id": "12025", - "provincie_id": "10000" + "id": "12025C", + "naam": "Leest", + "gemeente_niscode": "12025" }, { - "deelgemeente_id": "12025D", - "deelgemeente_naam": "Heffen", - "gemeente_id": "12025", - "provincie_id": "10000" + "id": "12025D", + "naam": "Heffen", + "gemeente_niscode": "12025" }, { - "deelgemeente_id": "12025E", - "deelgemeente_naam": "Walem", - "gemeente_id": "12025", - "provincie_id": "10000" + "id": "12025E", + "naam": "Walem", + "gemeente_niscode": "12025" }, { - "deelgemeente_id": "12025F", - "deelgemeente_naam": "Muizen", - "gemeente_id": "12025", - "provincie_id": "10000" + "id": "12025F", + "naam": "Muizen", + "gemeente_niscode": "12025" }, { - "deelgemeente_id": "12026A", - "deelgemeente_naam": "Nijlen", - "gemeente_id": "12026", - "provincie_id": "10000" + "id": "12026A", + "naam": "Nijlen", + "gemeente_niscode": "12026" }, { - "deelgemeente_id": "12026B", - "deelgemeente_naam": "Bevel", - "gemeente_id": "12026", - "provincie_id": "10000" + "id": "12026B", + "naam": "Bevel", + "gemeente_niscode": "12026" }, { - "deelgemeente_id": "12026C", - "deelgemeente_naam": "Kessel", - "gemeente_id": "12026", - "provincie_id": "10000" + "id": "12026C", + "naam": "Kessel", + "gemeente_niscode": "12026" }, { - "deelgemeente_id": "12029A", - "deelgemeente_naam": "Putte", - "gemeente_id": "12029", - "provincie_id": "10000" + "id": "12029A", + "naam": "Putte", + "gemeente_niscode": "12029" }, { - "deelgemeente_id": "12029B", - "deelgemeente_naam": "Beerzel", - "gemeente_id": "12029", - "provincie_id": "10000" + "id": "12029B", + "naam": "Beerzel", + "gemeente_niscode": "12029" }, { - "deelgemeente_id": "12041A", - "deelgemeente_naam": "Puurs", - "gemeente_id": "12041", - "provincie_id": "10000" + "id": "12041A", + "naam": "Puurs", + "gemeente_niscode": "12041" }, { - "deelgemeente_id": "12041B", - "deelgemeente_naam": "Ruisbroek", - "gemeente_id": "12041", - "provincie_id": "10000" + "id": "12041B", + "naam": "Ruisbroek", + "gemeente_niscode": "12041" }, { - "deelgemeente_id": "12041C", - "deelgemeente_naam": "Breendonk", - "gemeente_id": "12041", - "provincie_id": "10000" + "id": "12041C", + "naam": "Breendonk", + "gemeente_niscode": "12041" }, { - "deelgemeente_id": "12041D", - "deelgemeente_naam": "Liezele", - "gemeente_id": "12041", - "provincie_id": "10000" + "id": "12041D", + "naam": "Liezele", + "gemeente_niscode": "12041" }, { - "deelgemeente_id": "12041E", - "deelgemeente_naam": "Sint-Amands", - "gemeente_id": "12041", - "provincie_id": "10000" + "id": "12041E", + "naam": "Sint-Amands", + "gemeente_niscode": "12041" }, { - "deelgemeente_id": "12041F", - "deelgemeente_naam": "Oppuurs", - "gemeente_id": "12041", - "provincie_id": "10000" + "id": "12041F", + "naam": "Oppuurs", + "gemeente_niscode": "12041" }, { - "deelgemeente_id": "12041G", - "deelgemeente_naam": "Lippelo", - "gemeente_id": "12041", - "provincie_id": "10000" + "id": "12041G", + "naam": "Lippelo", + "gemeente_niscode": "12041" }, { - "deelgemeente_id": "12035A", - "deelgemeente_naam": "Sint-Katelijne-Waver", - "gemeente_id": "12035", - "provincie_id": "10000" + "id": "12035A", + "naam": "Sint-Katelijne-Waver", + "gemeente_niscode": "12035" }, { - "deelgemeente_id": "12035B", - "deelgemeente_naam": "Onze-Lieve-Vrouw-Waver", - "gemeente_id": "12035", - "provincie_id": "10000" + "id": "12035B", + "naam": "Onze-Lieve-Vrouw-Waver", + "gemeente_niscode": "12035" }, { - "deelgemeente_id": "12040A", - "deelgemeente_naam": "Willebroek", - "gemeente_id": "12040", - "provincie_id": "10000" + "id": "12040A", + "naam": "Willebroek", + "gemeente_niscode": "12040" }, { - "deelgemeente_id": "12040B", - "deelgemeente_naam": "Heindonk", - "gemeente_id": "12040", - "provincie_id": "10000" + "id": "12040B", + "naam": "Heindonk", + "gemeente_niscode": "12040" }, { - "deelgemeente_id": "12040C", - "deelgemeente_naam": "Blaasveld", - "gemeente_id": "12040", - "provincie_id": "10000" + "id": "12040C", + "naam": "Blaasveld", + "gemeente_niscode": "12040" }, { - "deelgemeente_id": "12040D", - "deelgemeente_naam": "Tisselt", - "gemeente_id": "12040", - "provincie_id": "10000" + "id": "12040D", + "naam": "Tisselt", + "gemeente_niscode": "12040" }, { - "deelgemeente_id": "13001A", - "deelgemeente_naam": "Arendonk", - "gemeente_id": "13001", - "provincie_id": "10000" + "id": "13001A", + "naam": "Arendonk", + "gemeente_niscode": "13001" }, { - "deelgemeente_id": "13002A", - "deelgemeente_naam": "Baarle-Hertog", - "gemeente_id": "13002", - "provincie_id": "10000" + "id": "13002A", + "naam": "Baarle-Hertog", + "gemeente_niscode": "13002" }, { - "deelgemeente_id": "13003A", - "deelgemeente_naam": "Balen", - "gemeente_id": "13003", - "provincie_id": "10000" + "id": "13003A", + "naam": "Balen", + "gemeente_niscode": "13003" }, { - "deelgemeente_id": "13003B", - "deelgemeente_naam": "Olmen", - "gemeente_id": "13003", - "provincie_id": "10000" + "id": "13003B", + "naam": "Olmen", + "gemeente_niscode": "13003" }, { - "deelgemeente_id": "13004A", - "deelgemeente_naam": "Beerse", - "gemeente_id": "13004", - "provincie_id": "10000" + "id": "13004A", + "naam": "Beerse", + "gemeente_niscode": "13004" }, { - "deelgemeente_id": "13004B", - "deelgemeente_naam": "Vlimmeren", - "gemeente_id": "13004", - "provincie_id": "10000" + "id": "13004B", + "naam": "Vlimmeren", + "gemeente_niscode": "13004" }, { - "deelgemeente_id": "13006A", - "deelgemeente_naam": "Dessel", - "gemeente_id": "13006", - "provincie_id": "10000" + "id": "13006A", + "naam": "Dessel", + "gemeente_niscode": "13006" }, { - "deelgemeente_id": "13008A", - "deelgemeente_naam": "Geel", - "gemeente_id": "13008", - "provincie_id": "10000" + "id": "13008A", + "naam": "Geel", + "gemeente_niscode": "13008" }, { - "deelgemeente_id": "13010A", - "deelgemeente_naam": "Grobbendonk", - "gemeente_id": "13010", - "provincie_id": "10000" + "id": "13010A", + "naam": "Grobbendonk", + "gemeente_niscode": "13010" }, { - "deelgemeente_id": "13010B", - "deelgemeente_naam": "Bouwel", - "gemeente_id": "13010", - "provincie_id": "10000" + "id": "13010B", + "naam": "Bouwel", + "gemeente_niscode": "13010" }, { - "deelgemeente_id": "13011A", - "deelgemeente_naam": "Herentals", - "gemeente_id": "13011", - "provincie_id": "10000" + "id": "13011A", + "naam": "Herentals", + "gemeente_niscode": "13011" }, { - "deelgemeente_id": "13011B", - "deelgemeente_naam": "Noorderwijk", - "gemeente_id": "13011", - "provincie_id": "10000" + "id": "13011B", + "naam": "Noorderwijk", + "gemeente_niscode": "13011" }, { - "deelgemeente_id": "13011C", - "deelgemeente_naam": "Morkhoven", - "gemeente_id": "13011", - "provincie_id": "10000" + "id": "13011C", + "naam": "Morkhoven", + "gemeente_niscode": "13011" }, { - "deelgemeente_id": "13012A", - "deelgemeente_naam": "Herenthout", - "gemeente_id": "13012", - "provincie_id": "10000" + "id": "13012A", + "naam": "Herenthout", + "gemeente_niscode": "13012" }, { - "deelgemeente_id": "13013A", - "deelgemeente_naam": "Herselt", - "gemeente_id": "13013", - "provincie_id": "10000" + "id": "13013A", + "naam": "Herselt", + "gemeente_niscode": "13013" }, { - "deelgemeente_id": "13013B", - "deelgemeente_naam": "Ramsel", - "gemeente_id": "13013", - "provincie_id": "10000" + "id": "13013B", + "naam": "Ramsel", + "gemeente_niscode": "13013" }, { - "deelgemeente_id": "13014A", - "deelgemeente_naam": "Hoogstraten", - "gemeente_id": "13014", - "provincie_id": "10000" + "id": "13014A", + "naam": "Hoogstraten", + "gemeente_niscode": "13014" }, { - "deelgemeente_id": "13014B", - "deelgemeente_naam": "Minderhout", - "gemeente_id": "13014", - "provincie_id": "10000" + "id": "13014B", + "naam": "Minderhout", + "gemeente_niscode": "13014" }, { - "deelgemeente_id": "13014C", - "deelgemeente_naam": "Meer", - "gemeente_id": "13014", - "provincie_id": "10000" + "id": "13014C", + "naam": "Meer", + "gemeente_niscode": "13014" }, { - "deelgemeente_id": "13014D", - "deelgemeente_naam": "Meerle", - "gemeente_id": "13014", - "provincie_id": "10000" + "id": "13014D", + "naam": "Meerle", + "gemeente_niscode": "13014" }, { - "deelgemeente_id": "13014E", - "deelgemeente_naam": "Wortel", - "gemeente_id": "13014", - "provincie_id": "10000" + "id": "13014E", + "naam": "Wortel", + "gemeente_niscode": "13014" }, { - "deelgemeente_id": "13016A", - "deelgemeente_naam": "Hulshout", - "gemeente_id": "13016", - "provincie_id": "10000" + "id": "13016A", + "naam": "Hulshout", + "gemeente_niscode": "13016" }, { - "deelgemeente_id": "13016B", - "deelgemeente_naam": "Westmeerbeek", - "gemeente_id": "13016", - "provincie_id": "10000" + "id": "13016B", + "naam": "Westmeerbeek", + "gemeente_niscode": "13016" }, { - "deelgemeente_id": "13016C", - "deelgemeente_naam": "Houtvenne", - "gemeente_id": "13016", - "provincie_id": "10000" + "id": "13016C", + "naam": "Houtvenne", + "gemeente_niscode": "13016" }, { - "deelgemeente_id": "13017A", - "deelgemeente_naam": "Kasterlee", - "gemeente_id": "13017", - "provincie_id": "10000" + "id": "13017A", + "naam": "Kasterlee", + "gemeente_niscode": "13017" }, { - "deelgemeente_id": "13017B", - "deelgemeente_naam": "Lichtaart", - "gemeente_id": "13017", - "provincie_id": "10000" + "id": "13017B", + "naam": "Lichtaart", + "gemeente_niscode": "13017" }, { - "deelgemeente_id": "13017C", - "deelgemeente_naam": "Tielen", - "gemeente_id": "13017", - "provincie_id": "10000" + "id": "13017C", + "naam": "Tielen", + "gemeente_niscode": "13017" }, { - "deelgemeente_id": "13019A", - "deelgemeente_naam": "Lille", - "gemeente_id": "13019", - "provincie_id": "10000" + "id": "13019A", + "naam": "Lille", + "gemeente_niscode": "13019" }, { - "deelgemeente_id": "13019B", - "deelgemeente_naam": "Wechelderzande", - "gemeente_id": "13019", - "provincie_id": "10000" + "id": "13019B", + "naam": "Wechelderzande", + "gemeente_niscode": "13019" }, { - "deelgemeente_id": "13019C", - "deelgemeente_naam": "Gierle", - "gemeente_id": "13019", - "provincie_id": "10000" + "id": "13019C", + "naam": "Gierle", + "gemeente_niscode": "13019" }, { - "deelgemeente_id": "13019D", - "deelgemeente_naam": "Poederlee", - "gemeente_id": "13019", - "provincie_id": "10000" + "id": "13019D", + "naam": "Poederlee", + "gemeente_niscode": "13019" }, { - "deelgemeente_id": "13021A", - "deelgemeente_naam": "Meerhout", - "gemeente_id": "13021", - "provincie_id": "10000" + "id": "13021A", + "naam": "Meerhout", + "gemeente_niscode": "13021" }, { - "deelgemeente_id": "13023A", - "deelgemeente_naam": "Merksplas", - "gemeente_id": "13023", - "provincie_id": "10000" + "id": "13023A", + "naam": "Merksplas", + "gemeente_niscode": "13023" }, { - "deelgemeente_id": "13025A", - "deelgemeente_naam": "Mol", - "gemeente_id": "13025", - "provincie_id": "10000" + "id": "13025A", + "naam": "Mol", + "gemeente_niscode": "13025" }, { - "deelgemeente_id": "13029A", - "deelgemeente_naam": "Olen", - "gemeente_id": "13029", - "provincie_id": "10000" + "id": "13029A", + "naam": "Olen", + "gemeente_niscode": "13029" }, { - "deelgemeente_id": "13031A", - "deelgemeente_naam": "Oud-Turnhout", - "gemeente_id": "13031", - "provincie_id": "10000" + "id": "13031A", + "naam": "Oud-Turnhout", + "gemeente_niscode": "13031" }, { - "deelgemeente_id": "13035A", - "deelgemeente_naam": "Ravels", - "gemeente_id": "13035", - "provincie_id": "10000" + "id": "13035A", + "naam": "Ravels", + "gemeente_niscode": "13035" }, { - "deelgemeente_id": "13035B", - "deelgemeente_naam": "Weelde", - "gemeente_id": "13035", - "provincie_id": "10000" + "id": "13035B", + "naam": "Weelde", + "gemeente_niscode": "13035" }, { - "deelgemeente_id": "13035C", - "deelgemeente_naam": "Poppel", - "gemeente_id": "13035", - "provincie_id": "10000" + "id": "13035C", + "naam": "Poppel", + "gemeente_niscode": "13035" }, { - "deelgemeente_id": "13036A", - "deelgemeente_naam": "Retie", - "gemeente_id": "13036", - "provincie_id": "10000" + "id": "13036A", + "naam": "Retie", + "gemeente_niscode": "13036" }, { - "deelgemeente_id": "13037A", - "deelgemeente_naam": "Rijkevorsel", - "gemeente_id": "13037", - "provincie_id": "10000" + "id": "13037A", + "naam": "Rijkevorsel", + "gemeente_niscode": "13037" }, { - "deelgemeente_id": "13040A", - "deelgemeente_naam": "Turnhout", - "gemeente_id": "13040", - "provincie_id": "10000" + "id": "13040A", + "naam": "Turnhout", + "gemeente_niscode": "13040" }, { - "deelgemeente_id": "13044A", - "deelgemeente_naam": "Vorselaar", - "gemeente_id": "13044", - "provincie_id": "10000" + "id": "13044A", + "naam": "Vorselaar", + "gemeente_niscode": "13044" }, { - "deelgemeente_id": "13046A", - "deelgemeente_naam": "Vosselaar", - "gemeente_id": "13046", - "provincie_id": "10000" + "id": "13046A", + "naam": "Vosselaar", + "gemeente_niscode": "13046" }, { - "deelgemeente_id": "13049A", - "deelgemeente_naam": "Westerlo", - "gemeente_id": "13049", - "provincie_id": "10000" + "id": "13049A", + "naam": "Westerlo", + "gemeente_niscode": "13049" }, { - "deelgemeente_id": "13049B", - "deelgemeente_naam": "Tongerlo", - "gemeente_id": "13049", - "provincie_id": "10000" + "id": "13049B", + "naam": "Tongerlo", + "gemeente_niscode": "13049" }, { - "deelgemeente_id": "13049C", - "deelgemeente_naam": "Zoerle-Parwijs", - "gemeente_id": "13049", - "provincie_id": "10000" + "id": "13049C", + "naam": "Zoerle-Parwijs", + "gemeente_niscode": "13049" }, { - "deelgemeente_id": "13049D", - "deelgemeente_naam": "Oevel", - "gemeente_id": "13049", - "provincie_id": "10000" + "id": "13049D", + "naam": "Oevel", + "gemeente_niscode": "13049" }, { - "deelgemeente_id": "13053A", - "deelgemeente_naam": "Veerle", - "gemeente_id": "13053", - "provincie_id": "10000" + "id": "13053A", + "naam": "Veerle", + "gemeente_niscode": "13053" }, { - "deelgemeente_id": "13053B", - "deelgemeente_naam": "Varendonk", - "gemeente_id": "13053", - "provincie_id": "10000" + "id": "13053B", + "naam": "Varendonk", + "gemeente_niscode": "13053" }, { - "deelgemeente_id": "13053C", - "deelgemeente_naam": "Eindhout", - "gemeente_id": "13053", - "provincie_id": "10000" + "id": "13053C", + "naam": "Eindhout", + "gemeente_niscode": "13053" }, { - "deelgemeente_id": "13053D", - "deelgemeente_naam": "Vorst", - "gemeente_id": "13053", - "provincie_id": "10000" + "id": "13053D", + "naam": "Vorst", + "gemeente_niscode": "13053" }, { - "deelgemeente_id": "23002A", - "deelgemeente_naam": "Asse", - "gemeente_id": "23002", - "provincie_id": "20001" + "id": "23002A", + "naam": "Asse", + "gemeente_niscode": "23002" }, { - "deelgemeente_id": "23002B", - "deelgemeente_naam": "Mollem", - "gemeente_id": "23002", - "provincie_id": "20001" + "id": "23002B", + "naam": "Mollem", + "gemeente_niscode": "23002" }, { - "deelgemeente_id": "23002C", - "deelgemeente_naam": "Kobbegem", - "gemeente_id": "23002", - "provincie_id": "20001" + "id": "23002C", + "naam": "Kobbegem", + "gemeente_niscode": "23002" }, { - "deelgemeente_id": "23002D", - "deelgemeente_naam": "Relegem", - "gemeente_id": "23002", - "provincie_id": "20001" + "id": "23002D", + "naam": "Relegem", + "gemeente_niscode": "23002" }, { - "deelgemeente_id": "23002E", - "deelgemeente_naam": "Zellik", - "gemeente_id": "23002", - "provincie_id": "20001" + "id": "23002E", + "naam": "Zellik", + "gemeente_niscode": "23002" }, { - "deelgemeente_id": "23002F", - "deelgemeente_naam": "Bekkerzeel", - "gemeente_id": "23002", - "provincie_id": "20001" + "id": "23002F", + "naam": "Bekkerzeel", + "gemeente_niscode": "23002" }, { - "deelgemeente_id": "23003A", - "deelgemeente_naam": "Beersel", - "gemeente_id": "23003", - "provincie_id": "20001" + "id": "23003A", + "naam": "Beersel", + "gemeente_niscode": "23003" }, { - "deelgemeente_id": "23003B", - "deelgemeente_naam": "Alsemberg", - "gemeente_id": "23003", - "provincie_id": "20001" + "id": "23003B", + "naam": "Alsemberg", + "gemeente_niscode": "23003" }, { - "deelgemeente_id": "23003C", - "deelgemeente_naam": "Dworp", - "gemeente_id": "23003", - "provincie_id": "20001" + "id": "23003C", + "naam": "Dworp", + "gemeente_niscode": "23003" }, { - "deelgemeente_id": "23003D", - "deelgemeente_naam": "Huizingen", - "gemeente_id": "23003", - "provincie_id": "20001" + "id": "23003D", + "naam": "Huizingen", + "gemeente_niscode": "23003" }, { - "deelgemeente_id": "23003E", - "deelgemeente_naam": "Lot", - "gemeente_id": "23003", - "provincie_id": "20001" + "id": "23003E", + "naam": "Lot", + "gemeente_niscode": "23003" }, { - "deelgemeente_id": "23009A", - "deelgemeente_naam": "Bever", - "gemeente_id": "23009", - "provincie_id": "20001" + "id": "23009A", + "naam": "Bever", + "gemeente_niscode": "23009" }, { - "deelgemeente_id": "23016A", - "deelgemeente_naam": "Dilbeek", - "gemeente_id": "23016", - "provincie_id": "20001" + "id": "23016A", + "naam": "Dilbeek", + "gemeente_niscode": "23016" }, { - "deelgemeente_id": "23016B", - "deelgemeente_naam": "Sint-Ulriks-Kapelle", - "gemeente_id": "23016", - "provincie_id": "20001" + "id": "23016B", + "naam": "Sint-Ulriks-Kapelle", + "gemeente_niscode": "23016" }, { - "deelgemeente_id": "23016C", - "deelgemeente_naam": "Groot-Bijgaarden", - "gemeente_id": "23016", - "provincie_id": "20001" + "id": "23016C", + "naam": "Groot-Bijgaarden", + "gemeente_niscode": "23016" }, { - "deelgemeente_id": "23016D", - "deelgemeente_naam": "Itterbeek", - "gemeente_id": "23016", - "provincie_id": "20001" + "id": "23016D", + "naam": "Itterbeek", + "gemeente_niscode": "23016" }, { - "deelgemeente_id": "23016E", - "deelgemeente_naam": "Schepdaal", - "gemeente_id": "23016", - "provincie_id": "20001" + "id": "23016E", + "naam": "Schepdaal", + "gemeente_niscode": "23016" }, { - "deelgemeente_id": "23016F", - "deelgemeente_naam": "Sint-Martens-Bodegem", - "gemeente_id": "23016", - "provincie_id": "20001" + "id": "23016F", + "naam": "Sint-Martens-Bodegem", + "gemeente_niscode": "23016" }, { - "deelgemeente_id": "23023A", - "deelgemeente_naam": "Galmaarden", - "gemeente_id": "23023", - "provincie_id": "20001" + "id": "23023A", + "naam": "Galmaarden", + "gemeente_niscode": "23023" }, { - "deelgemeente_id": "23023B", - "deelgemeente_naam": "Vollezele", - "gemeente_id": "23023", - "provincie_id": "20001" + "id": "23023B", + "naam": "Vollezele", + "gemeente_niscode": "23023" }, { - "deelgemeente_id": "23023C", - "deelgemeente_naam": "Tollembeek", - "gemeente_id": "23023", - "provincie_id": "20001" + "id": "23023C", + "naam": "Tollembeek", + "gemeente_niscode": "23023" }, { - "deelgemeente_id": "23024A", - "deelgemeente_naam": "Gooik", - "gemeente_id": "23024", - "provincie_id": "20001" + "id": "23024A", + "naam": "Gooik", + "gemeente_niscode": "23024" }, { - "deelgemeente_id": "23024B", - "deelgemeente_naam": "Leerbeek", - "gemeente_id": "23024", - "provincie_id": "20001" + "id": "23024B", + "naam": "Leerbeek", + "gemeente_niscode": "23024" }, { - "deelgemeente_id": "23024C", - "deelgemeente_naam": "Oetingen", - "gemeente_id": "23024", - "provincie_id": "20001" + "id": "23024C", + "naam": "Oetingen", + "gemeente_niscode": "23024" }, { - "deelgemeente_id": "23024D", - "deelgemeente_naam": "Kester", - "gemeente_id": "23024", - "provincie_id": "20001" + "id": "23024D", + "naam": "Kester", + "gemeente_niscode": "23024" }, { - "deelgemeente_id": "23025A", - "deelgemeente_naam": "Grimbergen", - "gemeente_id": "23025", - "provincie_id": "20001" + "id": "23025A", + "naam": "Grimbergen", + "gemeente_niscode": "23025" }, { - "deelgemeente_id": "23025B", - "deelgemeente_naam": "Strombeek - Bever", - "gemeente_id": "23025", - "provincie_id": "20001" + "id": "23025B", + "naam": "Strombeek - Bever", + "gemeente_niscode": "23025" }, { - "deelgemeente_id": "23025C", - "deelgemeente_naam": "Beigem", - "gemeente_id": "23025", - "provincie_id": "20001" + "id": "23025C", + "naam": "Beigem", + "gemeente_niscode": "23025" }, { - "deelgemeente_id": "23025D", - "deelgemeente_naam": "Humbeek", - "gemeente_id": "23025", - "provincie_id": "20001" + "id": "23025D", + "naam": "Humbeek", + "gemeente_niscode": "23025" }, { - "deelgemeente_id": "23027A", - "deelgemeente_naam": "Halle", - "gemeente_id": "23027", - "provincie_id": "20001" + "id": "23027A", + "naam": "Halle", + "gemeente_niscode": "23027" }, { - "deelgemeente_id": "23027B", - "deelgemeente_naam": "Buizingen", - "gemeente_id": "23027", - "provincie_id": "20001" + "id": "23027B", + "naam": "Buizingen", + "gemeente_niscode": "23027" }, { - "deelgemeente_id": "23027C", - "deelgemeente_naam": "Lembeek", - "gemeente_id": "23027", - "provincie_id": "20001" + "id": "23027C", + "naam": "Lembeek", + "gemeente_niscode": "23027" }, { - "deelgemeente_id": "23032A", - "deelgemeente_naam": "Herne", - "gemeente_id": "23032", - "provincie_id": "20001" + "id": "23032A", + "naam": "Herne", + "gemeente_niscode": "23032" }, { - "deelgemeente_id": "23032B", - "deelgemeente_naam": "Herfelingen", - "gemeente_id": "23032", - "provincie_id": "20001" + "id": "23032B", + "naam": "Herfelingen", + "gemeente_niscode": "23032" }, { - "deelgemeente_id": "23032C", - "deelgemeente_naam": "Sint-Pieters-Kapelle", - "gemeente_id": "23032", - "provincie_id": "20001" + "id": "23032C", + "naam": "Sint-Pieters-Kapelle", + "gemeente_niscode": "23032" }, { - "deelgemeente_id": "23033A", - "deelgemeente_naam": "Hoeilaart", - "gemeente_id": "23033", - "provincie_id": "20001" + "id": "23033A", + "naam": "Hoeilaart", + "gemeente_niscode": "23033" }, { - "deelgemeente_id": "23038A", - "deelgemeente_naam": "Kampenhout", - "gemeente_id": "23038", - "provincie_id": "20001" + "id": "23038A", + "naam": "Kampenhout", + "gemeente_niscode": "23038" }, { - "deelgemeente_id": "23038B", - "deelgemeente_naam": "Buken", - "gemeente_id": "23038", - "provincie_id": "20001" + "id": "23038B", + "naam": "Buken", + "gemeente_niscode": "23038" }, { - "deelgemeente_id": "23038C", - "deelgemeente_naam": "Nederokkerzeel", - "gemeente_id": "23038", - "provincie_id": "20001" + "id": "23038C", + "naam": "Nederokkerzeel", + "gemeente_niscode": "23038" }, { - "deelgemeente_id": "23038D", - "deelgemeente_naam": "Berg", - "gemeente_id": "23038", - "provincie_id": "20001" + "id": "23038D", + "naam": "Berg", + "gemeente_niscode": "23038" }, { - "deelgemeente_id": "23039A", - "deelgemeente_naam": "Kapelle-op-den-Bos", - "gemeente_id": "23039", - "provincie_id": "20001" + "id": "23039A", + "naam": "Kapelle-op-den-Bos", + "gemeente_niscode": "23039" }, { - "deelgemeente_id": "23039B", - "deelgemeente_naam": "Nieuwenrode", - "gemeente_id": "23039", - "provincie_id": "20001" + "id": "23039B", + "naam": "Nieuwenrode", + "gemeente_niscode": "23039" }, { - "deelgemeente_id": "23039C", - "deelgemeente_naam": "Ramsdonk", - "gemeente_id": "23039", - "provincie_id": "20001" + "id": "23039C", + "naam": "Ramsdonk", + "gemeente_niscode": "23039" }, { - "deelgemeente_id": "23044A", - "deelgemeente_naam": "Liedekerke", - "gemeente_id": "23044", - "provincie_id": "20001" + "id": "23044A", + "naam": "Liedekerke", + "gemeente_niscode": "23044" }, { - "deelgemeente_id": "23045A", - "deelgemeente_naam": "Londerzeel", - "gemeente_id": "23045", - "provincie_id": "20001" + "id": "23045A", + "naam": "Londerzeel", + "gemeente_niscode": "23045" }, { - "deelgemeente_id": "23045B", - "deelgemeente_naam": "Malderen", - "gemeente_id": "23045", - "provincie_id": "20001" + "id": "23045B", + "naam": "Malderen", + "gemeente_niscode": "23045" }, { - "deelgemeente_id": "23045C", - "deelgemeente_naam": "Steenhuffel", - "gemeente_id": "23045", - "provincie_id": "20001" + "id": "23045C", + "naam": "Steenhuffel", + "gemeente_niscode": "23045" }, { - "deelgemeente_id": "23047A", - "deelgemeente_naam": "Machelen", - "gemeente_id": "23047", - "provincie_id": "20001" + "id": "23047A", + "naam": "Machelen", + "gemeente_niscode": "23047" }, { - "deelgemeente_id": "23047B", - "deelgemeente_naam": "Diegem", - "gemeente_id": "23047", - "provincie_id": "20001" + "id": "23047B", + "naam": "Diegem", + "gemeente_niscode": "23047" }, { - "deelgemeente_id": "23050A", - "deelgemeente_naam": "Meise", - "gemeente_id": "23050", - "provincie_id": "20001" + "id": "23050A", + "naam": "Meise", + "gemeente_niscode": "23050" }, { - "deelgemeente_id": "23050B", - "deelgemeente_naam": "Wolvertem", - "gemeente_id": "23050", - "provincie_id": "20001" + "id": "23050B", + "naam": "Wolvertem", + "gemeente_niscode": "23050" }, { - "deelgemeente_id": "23052A", - "deelgemeente_naam": "Merchtem", - "gemeente_id": "23052", - "provincie_id": "20001" + "id": "23052A", + "naam": "Merchtem", + "gemeente_niscode": "23052" }, { - "deelgemeente_id": "23052B", - "deelgemeente_naam": "Brussegem", - "gemeente_id": "23052", - "provincie_id": "20001" + "id": "23052B", + "naam": "Brussegem", + "gemeente_niscode": "23052" }, { - "deelgemeente_id": "23052C", - "deelgemeente_naam": "Hamme", - "gemeente_id": "23052", - "provincie_id": "20001" + "id": "23052C", + "naam": "Hamme", + "gemeente_niscode": "23052" }, { - "deelgemeente_id": "23060A", - "deelgemeente_naam": "Opwijk", - "gemeente_id": "23060", - "provincie_id": "20001" + "id": "23060A", + "naam": "Opwijk", + "gemeente_niscode": "23060" }, { - "deelgemeente_id": "23060B", - "deelgemeente_naam": "Mazenzele", - "gemeente_id": "23060", - "provincie_id": "20001" + "id": "23060B", + "naam": "Mazenzele", + "gemeente_niscode": "23060" }, { - "deelgemeente_id": "23062A", - "deelgemeente_naam": "Overijse", - "gemeente_id": "23062", - "provincie_id": "20001" + "id": "23062A", + "naam": "Overijse", + "gemeente_niscode": "23062" }, { - "deelgemeente_id": "23064A", - "deelgemeente_naam": "Pepingen", - "gemeente_id": "23064", - "provincie_id": "20001" + "id": "23064A", + "naam": "Pepingen", + "gemeente_niscode": "23064" }, { - "deelgemeente_id": "23064B", - "deelgemeente_naam": "Elingen", - "gemeente_id": "23064", - "provincie_id": "20001" + "id": "23064B", + "naam": "Elingen", + "gemeente_niscode": "23064" }, { - "deelgemeente_id": "23064C", - "deelgemeente_naam": "Beert", - "gemeente_id": "23064", - "provincie_id": "20001" + "id": "23064C", + "naam": "Beert", + "gemeente_niscode": "23064" }, { - "deelgemeente_id": "23064D", - "deelgemeente_naam": "Bellingen", - "gemeente_id": "23064", - "provincie_id": "20001" + "id": "23064D", + "naam": "Bellingen", + "gemeente_niscode": "23064" }, { - "deelgemeente_id": "23064E", - "deelgemeente_naam": "Bogaarden", - "gemeente_id": "23064", - "provincie_id": "20001" + "id": "23064E", + "naam": "Bogaarden", + "gemeente_niscode": "23064" }, { - "deelgemeente_id": "23064F", - "deelgemeente_naam": "Heikruis", - "gemeente_id": "23064", - "provincie_id": "20001" + "id": "23064F", + "naam": "Heikruis", + "gemeente_niscode": "23064" }, { - "deelgemeente_id": "23077A", - "deelgemeente_naam": "Sint-Pieters-Leeuw", - "gemeente_id": "23077", - "provincie_id": "20001" + "id": "23077A", + "naam": "Sint-Pieters-Leeuw", + "gemeente_niscode": "23077" }, { - "deelgemeente_id": "23077B", - "deelgemeente_naam": "Oudenaken", - "gemeente_id": "23077", - "provincie_id": "20001" + "id": "23077B", + "naam": "Oudenaken", + "gemeente_niscode": "23077" }, { - "deelgemeente_id": "23077C", - "deelgemeente_naam": "Sint-Laureins-Berchem", - "gemeente_id": "23077", - "provincie_id": "20001" + "id": "23077C", + "naam": "Sint-Laureins-Berchem", + "gemeente_niscode": "23077" }, { - "deelgemeente_id": "23077D", - "deelgemeente_naam": "Vlezenbeek", - "gemeente_id": "23077", - "provincie_id": "20001" + "id": "23077D", + "naam": "Vlezenbeek", + "gemeente_niscode": "23077" }, { - "deelgemeente_id": "23077E", - "deelgemeente_naam": "Ruisbroek", - "gemeente_id": "23077", - "provincie_id": "20001" + "id": "23077E", + "naam": "Ruisbroek", + "gemeente_niscode": "23077" }, { - "deelgemeente_id": "23081A", - "deelgemeente_naam": "Steenokkerzeel", - "gemeente_id": "23081", - "provincie_id": "20001" + "id": "23081A", + "naam": "Steenokkerzeel", + "gemeente_niscode": "23081" }, { - "deelgemeente_id": "23081B", - "deelgemeente_naam": "Melsbroek", - "gemeente_id": "23081", - "provincie_id": "20001" + "id": "23081B", + "naam": "Melsbroek", + "gemeente_niscode": "23081" }, { - "deelgemeente_id": "23081C", - "deelgemeente_naam": "Perk", - "gemeente_id": "23081", - "provincie_id": "20001" + "id": "23081C", + "naam": "Perk", + "gemeente_niscode": "23081" }, { - "deelgemeente_id": "23086A", - "deelgemeente_naam": "Ternat", - "gemeente_id": "23086", - "provincie_id": "20001" + "id": "23086A", + "naam": "Ternat", + "gemeente_niscode": "23086" }, { - "deelgemeente_id": "23086B", - "deelgemeente_naam": "Wambeek", - "gemeente_id": "23086", - "provincie_id": "20001" + "id": "23086B", + "naam": "Wambeek", + "gemeente_niscode": "23086" }, { - "deelgemeente_id": "23086C", - "deelgemeente_naam": "Sint-Katherina-Lombeek", - "gemeente_id": "23086", - "provincie_id": "20001" + "id": "23086C", + "naam": "Sint-Katherina-Lombeek", + "gemeente_niscode": "23086" }, { - "deelgemeente_id": "23088A", - "deelgemeente_naam": "Vilvoorde", - "gemeente_id": "23088", - "provincie_id": "20001" + "id": "23088A", + "naam": "Vilvoorde", + "gemeente_niscode": "23088" }, { - "deelgemeente_id": "23088B", - "deelgemeente_naam": "Peutie", - "gemeente_id": "23088", - "provincie_id": "20001" + "id": "23088B", + "naam": "Peutie", + "gemeente_niscode": "23088" }, { - "deelgemeente_id": "23094A", - "deelgemeente_naam": "Zaventem", - "gemeente_id": "23094", - "provincie_id": "20001" + "id": "23094A", + "naam": "Zaventem", + "gemeente_niscode": "23094" }, { - "deelgemeente_id": "23094B", - "deelgemeente_naam": "Nossegem", - "gemeente_id": "23094", - "provincie_id": "20001" + "id": "23094B", + "naam": "Nossegem", + "gemeente_niscode": "23094" }, { - "deelgemeente_id": "23094C", - "deelgemeente_naam": "Sterrebeek", - "gemeente_id": "23094", - "provincie_id": "20001" + "id": "23094C", + "naam": "Sterrebeek", + "gemeente_niscode": "23094" }, { - "deelgemeente_id": "23094D", - "deelgemeente_naam": "Sint-Stevens-Woluwe", - "gemeente_id": "23094", - "provincie_id": "20001" + "id": "23094D", + "naam": "Sint-Stevens-Woluwe", + "gemeente_niscode": "23094" }, { - "deelgemeente_id": "23096A", - "deelgemeente_naam": "Zemst", - "gemeente_id": "23096", - "provincie_id": "20001" + "id": "23096A", + "naam": "Zemst", + "gemeente_niscode": "23096" }, { - "deelgemeente_id": "23096B", - "deelgemeente_naam": "Hofstade", - "gemeente_id": "23096", - "provincie_id": "20001" + "id": "23096B", + "naam": "Hofstade", + "gemeente_niscode": "23096" }, { - "deelgemeente_id": "23096C", - "deelgemeente_naam": "Weerde", - "gemeente_id": "23096", - "provincie_id": "20001" + "id": "23096C", + "naam": "Weerde", + "gemeente_niscode": "23096" }, { - "deelgemeente_id": "23096D", - "deelgemeente_naam": "Elewijt", - "gemeente_id": "23096", - "provincie_id": "20001" + "id": "23096D", + "naam": "Elewijt", + "gemeente_niscode": "23096" }, { - "deelgemeente_id": "23096E", - "deelgemeente_naam": "Eppegem", - "gemeente_id": "23096", - "provincie_id": "20001" + "id": "23096E", + "naam": "Eppegem", + "gemeente_niscode": "23096" }, { - "deelgemeente_id": "23097B", - "deelgemeente_naam": "Borchtlombeek", - "gemeente_id": "23097", - "provincie_id": "20001" + "id": "23097B", + "naam": "Borchtlombeek", + "gemeente_niscode": "23097" }, { - "deelgemeente_id": "23097C", - "deelgemeente_naam": "Onze-Lieve-Vrouw-Lombeek", - "gemeente_id": "23097", - "provincie_id": "20001" + "id": "23097C", + "naam": "Onze-Lieve-Vrouw-Lombeek", + "gemeente_niscode": "23097" }, { - "deelgemeente_id": "23097D", - "deelgemeente_naam": "Pamel", - "gemeente_id": "23097", - "provincie_id": "20001" + "id": "23097D", + "naam": "Pamel", + "gemeente_niscode": "23097" }, { - "deelgemeente_id": "23097E", - "deelgemeente_naam": "Strijtem", - "gemeente_id": "23097", - "provincie_id": "20001" + "id": "23097E", + "naam": "Strijtem", + "gemeente_niscode": "23097" }, { - "deelgemeente_id": "23098A", - "deelgemeente_naam": "Drogenbos", - "gemeente_id": "23098", - "provincie_id": "20001" + "id": "23098A", + "naam": "Drogenbos", + "gemeente_niscode": "23098" }, { - "deelgemeente_id": "23099A", - "deelgemeente_naam": "Kraainem", - "gemeente_id": "23099", - "provincie_id": "20001" + "id": "23099A", + "naam": "Kraainem", + "gemeente_niscode": "23099" }, { - "deelgemeente_id": "23100A", - "deelgemeente_naam": "Linkebeek", - "gemeente_id": "23100", - "provincie_id": "20001" + "id": "23100A", + "naam": "Linkebeek", + "gemeente_niscode": "23100" }, { - "deelgemeente_id": "23101A", - "deelgemeente_naam": "Sint-Genesius-Rode", - "gemeente_id": "23101", - "provincie_id": "20001" + "id": "23101A", + "naam": "Sint-Genesius-Rode", + "gemeente_niscode": "23101" }, { - "deelgemeente_id": "23102A", - "deelgemeente_naam": "Wemmel", - "gemeente_id": "23102", - "provincie_id": "20001" + "id": "23102A", + "naam": "Wemmel", + "gemeente_niscode": "23102" }, { - "deelgemeente_id": "23103A", - "deelgemeente_naam": "Wezembeek-Oppem", - "gemeente_id": "23103", - "provincie_id": "20001" + "id": "23103A", + "naam": "Wezembeek-Oppem", + "gemeente_niscode": "23103" }, { - "deelgemeente_id": "23104A", - "deelgemeente_naam": "Sint-Kwintens-Lennik", - "gemeente_id": "23104", - "provincie_id": "20001" + "id": "23104A", + "naam": "Sint-Kwintens-Lennik", + "gemeente_niscode": "23104" }, { - "deelgemeente_id": "23104B", - "deelgemeente_naam": "Sint-Martens-Lennik", - "gemeente_id": "23104", - "provincie_id": "20001" + "id": "23104B", + "naam": "Sint-Martens-Lennik", + "gemeente_niscode": "23104" }, { - "deelgemeente_id": "23104C", - "deelgemeente_naam": "Gaasbeek", - "gemeente_id": "23104", - "provincie_id": "20001" + "id": "23104C", + "naam": "Gaasbeek", + "gemeente_niscode": "23104" }, { - "deelgemeente_id": "23105A", - "deelgemeente_naam": "Hekelgem", - "gemeente_id": "23105", - "provincie_id": "20001" + "id": "23105A", + "naam": "Hekelgem", + "gemeente_niscode": "23105" }, { - "deelgemeente_id": "23105B", - "deelgemeente_naam": "Essene", - "gemeente_id": "23105", - "provincie_id": "20001" + "id": "23105B", + "naam": "Essene", + "gemeente_niscode": "23105" }, { - "deelgemeente_id": "23105C", - "deelgemeente_naam": "Teralfene", - "gemeente_id": "23105", - "provincie_id": "20001" + "id": "23105C", + "naam": "Teralfene", + "gemeente_niscode": "23105" }, { - "deelgemeente_id": "24001A", - "deelgemeente_naam": "Aarschot", - "gemeente_id": "24001", - "provincie_id": "20001" + "id": "24001A", + "naam": "Aarschot", + "gemeente_niscode": "24001" }, { - "deelgemeente_id": "24001B", - "deelgemeente_naam": "Langdorp", - "gemeente_id": "24001", - "provincie_id": "20001" + "id": "24001B", + "naam": "Langdorp", + "gemeente_niscode": "24001" }, { - "deelgemeente_id": "24001C", - "deelgemeente_naam": "Rillaar", - "gemeente_id": "24001", - "provincie_id": "20001" + "id": "24001C", + "naam": "Rillaar", + "gemeente_niscode": "24001" }, { - "deelgemeente_id": "24001D", - "deelgemeente_naam": "Gelrode", - "gemeente_id": "24001", - "provincie_id": "20001" + "id": "24001D", + "naam": "Gelrode", + "gemeente_niscode": "24001" }, { - "deelgemeente_id": "24007A", - "deelgemeente_naam": "Begijnendijk", - "gemeente_id": "24007", - "provincie_id": "20001" + "id": "24007A", + "naam": "Begijnendijk", + "gemeente_niscode": "24007" }, { - "deelgemeente_id": "24007B", - "deelgemeente_naam": "Betekom", - "gemeente_id": "24007", - "provincie_id": "20001" + "id": "24007B", + "naam": "Betekom", + "gemeente_niscode": "24007" }, { - "deelgemeente_id": "24008A", - "deelgemeente_naam": "Bekkevoort", - "gemeente_id": "24008", - "provincie_id": "20001" + "id": "24008A", + "naam": "Bekkevoort", + "gemeente_niscode": "24008" }, { - "deelgemeente_id": "24008B", - "deelgemeente_naam": "Assent", - "gemeente_id": "24008", - "provincie_id": "20001" + "id": "24008B", + "naam": "Assent", + "gemeente_niscode": "24008" }, { - "deelgemeente_id": "24008C", - "deelgemeente_naam": "Molenbeek - Wersbeek", - "gemeente_id": "24008", - "provincie_id": "20001" + "id": "24008C", + "naam": "Molenbeek - Wersbeek", + "gemeente_niscode": "24008" }, { - "deelgemeente_id": "24009A", - "deelgemeente_naam": "Bertem", - "gemeente_id": "24009", - "provincie_id": "20001" + "id": "24009A", + "naam": "Bertem", + "gemeente_niscode": "24009" }, { - "deelgemeente_id": "24009B", - "deelgemeente_naam": "Korbeek-dijle", - "gemeente_id": "24009", - "provincie_id": "20001" + "id": "24009B", + "naam": "Korbeek-dijle", + "gemeente_niscode": "24009" }, { - "deelgemeente_id": "24009C", - "deelgemeente_naam": "Leefdaal", - "gemeente_id": "24009", - "provincie_id": "20001" + "id": "24009C", + "naam": "Leefdaal", + "gemeente_niscode": "24009" }, { - "deelgemeente_id": "24011A", - "deelgemeente_naam": "Bierbeek", - "gemeente_id": "24011", - "provincie_id": "20001" + "id": "24011A", + "naam": "Bierbeek", + "gemeente_niscode": "24011" }, { - "deelgemeente_id": "24011B", - "deelgemeente_naam": "Korbeek-Lo", - "gemeente_id": "24011", - "provincie_id": "20001" + "id": "24011B", + "naam": "Korbeek-Lo", + "gemeente_niscode": "24011" }, { - "deelgemeente_id": "24011C", - "deelgemeente_naam": "Lovenjoel", - "gemeente_id": "24011", - "provincie_id": "20001" + "id": "24011C", + "naam": "Lovenjoel", + "gemeente_niscode": "24011" }, { - "deelgemeente_id": "24011D", - "deelgemeente_naam": "Opvelp", - "gemeente_id": "24011", - "provincie_id": "20001" + "id": "24011D", + "naam": "Opvelp", + "gemeente_niscode": "24011" }, { - "deelgemeente_id": "24014A", - "deelgemeente_naam": "Boortmeerbeek", - "gemeente_id": "24014", - "provincie_id": "20001" + "id": "24014A", + "naam": "Boortmeerbeek", + "gemeente_niscode": "24014" }, { - "deelgemeente_id": "24014B", - "deelgemeente_naam": "Hever", - "gemeente_id": "24014", - "provincie_id": "20001" + "id": "24014B", + "naam": "Hever", + "gemeente_niscode": "24014" }, { - "deelgemeente_id": "24016A", - "deelgemeente_naam": "Boutersem", - "gemeente_id": "24016", - "provincie_id": "20001" + "id": "24016A", + "naam": "Boutersem", + "gemeente_niscode": "24016" }, { - "deelgemeente_id": "24016B", - "deelgemeente_naam": "Kerkom", - "gemeente_id": "24016", - "provincie_id": "20001" + "id": "24016B", + "naam": "Kerkom", + "gemeente_niscode": "24016" }, { - "deelgemeente_id": "24016C", - "deelgemeente_naam": "Roosbeek", - "gemeente_id": "24016", - "provincie_id": "20001" + "id": "24016C", + "naam": "Roosbeek", + "gemeente_niscode": "24016" }, { - "deelgemeente_id": "24016D", - "deelgemeente_naam": "Neervelp", - "gemeente_id": "24016", - "provincie_id": "20001" + "id": "24016D", + "naam": "Neervelp", + "gemeente_niscode": "24016" }, { - "deelgemeente_id": "24016E", - "deelgemeente_naam": "Vertrijk", - "gemeente_id": "24016", - "provincie_id": "20001" + "id": "24016E", + "naam": "Vertrijk", + "gemeente_niscode": "24016" }, { - "deelgemeente_id": "24016G", - "deelgemeente_naam": "Willebringen", - "gemeente_id": "24016", - "provincie_id": "20001" + "id": "24016G", + "naam": "Willebringen", + "gemeente_niscode": "24016" }, { - "deelgemeente_id": "24020A", - "deelgemeente_naam": "Diest", - "gemeente_id": "24020", - "provincie_id": "20001" + "id": "24020A", + "naam": "Diest", + "gemeente_niscode": "24020" }, { - "deelgemeente_id": "24020B", - "deelgemeente_naam": "Webbekom", - "gemeente_id": "24020", - "provincie_id": "20001" + "id": "24020B", + "naam": "Webbekom", + "gemeente_niscode": "24020" }, { - "deelgemeente_id": "24020C", - "deelgemeente_naam": "Kaggevinne", - "gemeente_id": "24020", - "provincie_id": "20001" + "id": "24020C", + "naam": "Kaggevinne", + "gemeente_niscode": "24020" }, { - "deelgemeente_id": "24020D", - "deelgemeente_naam": "Molenstede", - "gemeente_id": "24020", - "provincie_id": "20001" + "id": "24020D", + "naam": "Molenstede", + "gemeente_niscode": "24020" }, { - "deelgemeente_id": "24020E", - "deelgemeente_naam": "Schaffen", - "gemeente_id": "24020", - "provincie_id": "20001" + "id": "24020E", + "naam": "Schaffen", + "gemeente_niscode": "24020" }, { - "deelgemeente_id": "24020F", - "deelgemeente_naam": "Deurne", - "gemeente_id": "24020", - "provincie_id": "20001" + "id": "24020F", + "naam": "Deurne", + "gemeente_niscode": "24020" }, { - "deelgemeente_id": "24028A", - "deelgemeente_naam": "Geetbets", - "gemeente_id": "24028", - "provincie_id": "20001" + "id": "24028A", + "naam": "Geetbets", + "gemeente_niscode": "24028" }, { - "deelgemeente_id": "24028B", - "deelgemeente_naam": "Rummen", - "gemeente_id": "24028", - "provincie_id": "20001" + "id": "24028B", + "naam": "Rummen", + "gemeente_niscode": "24028" }, { - "deelgemeente_id": "24028C", - "deelgemeente_naam": "Grazen", - "gemeente_id": "24028", - "provincie_id": "20001" + "id": "24028C", + "naam": "Grazen", + "gemeente_niscode": "24028" }, { - "deelgemeente_id": "24033A", - "deelgemeente_naam": "Haacht", - "gemeente_id": "24033", - "provincie_id": "20001" + "id": "24033A", + "naam": "Haacht", + "gemeente_niscode": "24033" }, { - "deelgemeente_id": "24033B", - "deelgemeente_naam": "Tildonk", - "gemeente_id": "24033", - "provincie_id": "20001" + "id": "24033B", + "naam": "Tildonk", + "gemeente_niscode": "24033" }, { - "deelgemeente_id": "24033C", - "deelgemeente_naam": "Wespelaar", - "gemeente_id": "24033", - "provincie_id": "20001" + "id": "24033C", + "naam": "Wespelaar", + "gemeente_niscode": "24033" }, { - "deelgemeente_id": "24038A", - "deelgemeente_naam": "Herent", - "gemeente_id": "24038", - "provincie_id": "20001" + "id": "24038A", + "naam": "Herent", + "gemeente_niscode": "24038" }, { - "deelgemeente_id": "24038B", - "deelgemeente_naam": "Winksele", - "gemeente_id": "24038", - "provincie_id": "20001" + "id": "24038B", + "naam": "Winksele", + "gemeente_niscode": "24038" }, { - "deelgemeente_id": "24038C", - "deelgemeente_naam": "Veltem-Beisem", - "gemeente_id": "24038", - "provincie_id": "20001" + "id": "24038C", + "naam": "Veltem-Beisem", + "gemeente_niscode": "24038" }, { - "deelgemeente_id": "24041A", - "deelgemeente_naam": "Hoegaarden", - "gemeente_id": "24041", - "provincie_id": "20001" + "id": "24041A", + "naam": "Hoegaarden", + "gemeente_niscode": "24041" }, { - "deelgemeente_id": "24041B", - "deelgemeente_naam": "Meldert", - "gemeente_id": "24041", - "provincie_id": "20001" + "id": "24041B", + "naam": "Meldert", + "gemeente_niscode": "24041" }, { - "deelgemeente_id": "24041C", - "deelgemeente_naam": "Outgaarden", - "gemeente_id": "24041", - "provincie_id": "20001" + "id": "24041C", + "naam": "Outgaarden", + "gemeente_niscode": "24041" }, { - "deelgemeente_id": "24043A", - "deelgemeente_naam": "Holsbeek", - "gemeente_id": "24043", - "provincie_id": "20001" + "id": "24043A", + "naam": "Holsbeek", + "gemeente_niscode": "24043" }, { - "deelgemeente_id": "24043B", - "deelgemeente_naam": "Kortrijk-Dutsel", - "gemeente_id": "24043", - "provincie_id": "20001" + "id": "24043B", + "naam": "Kortrijk-Dutsel", + "gemeente_niscode": "24043" }, { - "deelgemeente_id": "24043C", - "deelgemeente_naam": "Nieuwrode", - "gemeente_id": "24043", - "provincie_id": "20001" + "id": "24043C", + "naam": "Nieuwrode", + "gemeente_niscode": "24043" }, { - "deelgemeente_id": "24043D", - "deelgemeente_naam": "Sint-Pieters-Rode", - "gemeente_id": "24043", - "provincie_id": "20001" + "id": "24043D", + "naam": "Sint-Pieters-Rode", + "gemeente_niscode": "24043" }, { - "deelgemeente_id": "24045A", - "deelgemeente_naam": "Huldenberg", - "gemeente_id": "24045", - "provincie_id": "20001" + "id": "24045A", + "naam": "Huldenberg", + "gemeente_niscode": "24045" }, { - "deelgemeente_id": "24045B", - "deelgemeente_naam": "Loonbeek", - "gemeente_id": "24045", - "provincie_id": "20001" + "id": "24045B", + "naam": "Loonbeek", + "gemeente_niscode": "24045" }, { - "deelgemeente_id": "24045C", - "deelgemeente_naam": "Neerijse", - "gemeente_id": "24045", - "provincie_id": "20001" + "id": "24045C", + "naam": "Neerijse", + "gemeente_niscode": "24045" }, { - "deelgemeente_id": "24045D", - "deelgemeente_naam": "Sint-Agatha-Rode", - "gemeente_id": "24045", - "provincie_id": "20001" + "id": "24045D", + "naam": "Sint-Agatha-Rode", + "gemeente_niscode": "24045" }, { - "deelgemeente_id": "24045E", - "deelgemeente_naam": "Ottenburg", - "gemeente_id": "24045", - "provincie_id": "20001" + "id": "24045E", + "naam": "Ottenburg", + "gemeente_niscode": "24045" }, { - "deelgemeente_id": "24048A", - "deelgemeente_naam": "Keerbergen", - "gemeente_id": "24048", - "provincie_id": "20001" + "id": "24048A", + "naam": "Keerbergen", + "gemeente_niscode": "24048" }, { - "deelgemeente_id": "24054A", - "deelgemeente_naam": "Kortenaken", - "gemeente_id": "24054", - "provincie_id": "20001" + "id": "24054A", + "naam": "Kortenaken", + "gemeente_niscode": "24054" }, { - "deelgemeente_id": "24054B", - "deelgemeente_naam": "Ransberg", - "gemeente_id": "24054", - "provincie_id": "20001" + "id": "24054B", + "naam": "Ransberg", + "gemeente_niscode": "24054" }, { - "deelgemeente_id": "24054C", - "deelgemeente_naam": "Hoeleden", - "gemeente_id": "24054", - "provincie_id": "20001" + "id": "24054C", + "naam": "Hoeleden", + "gemeente_niscode": "24054" }, { - "deelgemeente_id": "24054D", - "deelgemeente_naam": "Kersbeek-Miskom", - "gemeente_id": "24054", - "provincie_id": "20001" + "id": "24054D", + "naam": "Kersbeek-Miskom", + "gemeente_niscode": "24054" }, { - "deelgemeente_id": "24054E", - "deelgemeente_naam": "Waanrode", - "gemeente_id": "24054", - "provincie_id": "20001" + "id": "24054E", + "naam": "Waanrode", + "gemeente_niscode": "24054" }, { - "deelgemeente_id": "24055A", - "deelgemeente_naam": "Kortenberg", - "gemeente_id": "24055", - "provincie_id": "20001" + "id": "24055A", + "naam": "Kortenberg", + "gemeente_niscode": "24055" }, { - "deelgemeente_id": "24055B", - "deelgemeente_naam": "Erps-Kwerps", - "gemeente_id": "24055", - "provincie_id": "20001" + "id": "24055B", + "naam": "Erps-Kwerps", + "gemeente_niscode": "24055" }, { - "deelgemeente_id": "24055C", - "deelgemeente_naam": "Meerbeek", - "gemeente_id": "24055", - "provincie_id": "20001" + "id": "24055C", + "naam": "Meerbeek", + "gemeente_niscode": "24055" }, { - "deelgemeente_id": "24055D", - "deelgemeente_naam": "Everberg", - "gemeente_id": "24055", - "provincie_id": "20001" + "id": "24055D", + "naam": "Everberg", + "gemeente_niscode": "24055" }, { - "deelgemeente_id": "24059A", - "deelgemeente_naam": "Landen", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059A", + "naam": "Landen", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059B", - "deelgemeente_naam": "Rumsdorp", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059B", + "naam": "Rumsdorp", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059C", - "deelgemeente_naam": "Walshoutem", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059C", + "naam": "Walshoutem", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059D", - "deelgemeente_naam": "Neerwinden", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059D", + "naam": "Neerwinden", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059E", - "deelgemeente_naam": "Wange", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059E", + "naam": "Wange", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059F", - "deelgemeente_naam": "Eliksem", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059F", + "naam": "Eliksem", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059G", - "deelgemeente_naam": "Ezemaal", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059G", + "naam": "Ezemaal", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059H", - "deelgemeente_naam": "Laar", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059H", + "naam": "Laar", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059J", - "deelgemeente_naam": "Overwinden", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059J", + "naam": "Overwinden", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059K", - "deelgemeente_naam": "Attenhoven", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059K", + "naam": "Attenhoven", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059L", - "deelgemeente_naam": "Neerlanden", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059L", + "naam": "Neerlanden", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059M", - "deelgemeente_naam": "Walsbets", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059M", + "naam": "Walsbets", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059N", - "deelgemeente_naam": "Wezeren", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059N", + "naam": "Wezeren", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24059P", - "deelgemeente_naam": "Waasmont", - "gemeente_id": "24059", - "provincie_id": "20001" + "id": "24059P", + "naam": "Waasmont", + "gemeente_niscode": "24059" }, { - "deelgemeente_id": "24062A", - "deelgemeente_naam": "Leuven", - "gemeente_id": "24062", - "provincie_id": "20001" + "id": "24062A", + "naam": "Leuven", + "gemeente_niscode": "24062" }, { - "deelgemeente_id": "24062B", - "deelgemeente_naam": "Wilsele", - "gemeente_id": "24062", - "provincie_id": "20001" + "id": "24062B", + "naam": "Wilsele", + "gemeente_niscode": "24062" }, { - "deelgemeente_id": "24062C", - "deelgemeente_naam": "Kessel-Lo", - "gemeente_id": "24062", - "provincie_id": "20001" + "id": "24062C", + "naam": "Kessel-Lo", + "gemeente_niscode": "24062" }, { - "deelgemeente_id": "24062D", - "deelgemeente_naam": "Heverlee", - "gemeente_id": "24062", - "provincie_id": "20001" + "id": "24062D", + "naam": "Heverlee", + "gemeente_niscode": "24062" }, { - "deelgemeente_id": "24066A", - "deelgemeente_naam": "Lubbeek", - "gemeente_id": "24066", - "provincie_id": "20001" + "id": "24066A", + "naam": "Lubbeek", + "gemeente_niscode": "24066" }, { - "deelgemeente_id": "24066B", - "deelgemeente_naam": "Binkom", - "gemeente_id": "24066", - "provincie_id": "20001" + "id": "24066B", + "naam": "Binkom", + "gemeente_niscode": "24066" }, { - "deelgemeente_id": "24066C", - "deelgemeente_naam": "Pellenberg", - "gemeente_id": "24066", - "provincie_id": "20001" + "id": "24066C", + "naam": "Pellenberg", + "gemeente_niscode": "24066" }, { - "deelgemeente_id": "24066D", - "deelgemeente_naam": "Linden", - "gemeente_id": "24066", - "provincie_id": "20001" + "id": "24066D", + "naam": "Linden", + "gemeente_niscode": "24066" }, { - "deelgemeente_id": "24086A", - "deelgemeente_naam": "Oud-Heverlee", - "gemeente_id": "24086", - "provincie_id": "20001" + "id": "24086A", + "naam": "Oud-Heverlee", + "gemeente_niscode": "24086" }, { - "deelgemeente_id": "24086B", - "deelgemeente_naam": "Vaalbeek", - "gemeente_id": "24086", - "provincie_id": "20001" + "id": "24086B", + "naam": "Vaalbeek", + "gemeente_niscode": "24086" }, { - "deelgemeente_id": "24086C", - "deelgemeente_naam": "Blanden", - "gemeente_id": "24086", - "provincie_id": "20001" + "id": "24086C", + "naam": "Blanden", + "gemeente_niscode": "24086" }, { - "deelgemeente_id": "24086D", - "deelgemeente_naam": "Haasrode", - "gemeente_id": "24086", - "provincie_id": "20001" + "id": "24086D", + "naam": "Haasrode", + "gemeente_niscode": "24086" }, { - "deelgemeente_id": "24086E", - "deelgemeente_naam": "Sint-Joris-Weert", - "gemeente_id": "24086", - "provincie_id": "20001" + "id": "24086E", + "naam": "Sint-Joris-Weert", + "gemeente_niscode": "24086" }, { - "deelgemeente_id": "24094A", - "deelgemeente_naam": "Rotselaar", - "gemeente_id": "24094", - "provincie_id": "20001" + "id": "24094A", + "naam": "Rotselaar", + "gemeente_niscode": "24094" }, { - "deelgemeente_id": "24094B", - "deelgemeente_naam": "Werchter", - "gemeente_id": "24094", - "provincie_id": "20001" + "id": "24094B", + "naam": "Werchter", + "gemeente_niscode": "24094" }, { - "deelgemeente_id": "24094C", - "deelgemeente_naam": "Wezemaal", - "gemeente_id": "24094", - "provincie_id": "20001" + "id": "24094C", + "naam": "Wezemaal", + "gemeente_niscode": "24094" }, { - "deelgemeente_id": "24104A", - "deelgemeente_naam": "Tervuren", - "gemeente_id": "24104", - "provincie_id": "20001" + "id": "24104A", + "naam": "Tervuren", + "gemeente_niscode": "24104" }, { - "deelgemeente_id": "24104B", - "deelgemeente_naam": "Vossem", - "gemeente_id": "24104", - "provincie_id": "20001" + "id": "24104B", + "naam": "Vossem", + "gemeente_niscode": "24104" }, { - "deelgemeente_id": "24104C", - "deelgemeente_naam": "Duisburg", - "gemeente_id": "24104", - "provincie_id": "20001" + "id": "24104C", + "naam": "Duisburg", + "gemeente_niscode": "24104" }, { - "deelgemeente_id": "24107A", - "deelgemeente_naam": "Tienen", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107A", + "naam": "Tienen", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107B", - "deelgemeente_naam": "Oorbeek", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107B", + "naam": "Oorbeek", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107C", - "deelgemeente_naam": "Bost", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107C", + "naam": "Bost", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107D", - "deelgemeente_naam": "Kumtich", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107D", + "naam": "Kumtich", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107E", - "deelgemeente_naam": "Vissenaken", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107E", + "naam": "Vissenaken", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107F", - "deelgemeente_naam": "Sint-Margriete-Houtem", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107F", + "naam": "Sint-Margriete-Houtem", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107G", - "deelgemeente_naam": "Oplinter", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107G", + "naam": "Oplinter", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107H", - "deelgemeente_naam": "Hakendover", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107H", + "naam": "Hakendover", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24107J", - "deelgemeente_naam": "Goetsenhoven", - "gemeente_id": "24107", - "provincie_id": "20001" + "id": "24107J", + "naam": "Goetsenhoven", + "gemeente_niscode": "24107" }, { - "deelgemeente_id": "24109A", - "deelgemeente_naam": "Tremelo", - "gemeente_id": "24109", - "provincie_id": "20001" + "id": "24109A", + "naam": "Tremelo", + "gemeente_niscode": "24109" }, { - "deelgemeente_id": "24109B", - "deelgemeente_naam": "Baal", - "gemeente_id": "24109", - "provincie_id": "20001" + "id": "24109B", + "naam": "Baal", + "gemeente_niscode": "24109" }, { - "deelgemeente_id": "24130A", - "deelgemeente_naam": "Zoutleeuw", - "gemeente_id": "24130", - "provincie_id": "20001" + "id": "24130A", + "naam": "Zoutleeuw", + "gemeente_niscode": "24130" }, { - "deelgemeente_id": "24130B", - "deelgemeente_naam": "Helen-Bos", - "gemeente_id": "24130", - "provincie_id": "20001" + "id": "24130B", + "naam": "Helen-Bos", + "gemeente_niscode": "24130" }, { - "deelgemeente_id": "24130C", - "deelgemeente_naam": "Halle-Booienhoven", - "gemeente_id": "24130", - "provincie_id": "20001" + "id": "24130C", + "naam": "Halle-Booienhoven", + "gemeente_niscode": "24130" }, { - "deelgemeente_id": "24130D", - "deelgemeente_naam": "Dormaal", - "gemeente_id": "24130", - "provincie_id": "20001" + "id": "24130D", + "naam": "Dormaal", + "gemeente_niscode": "24130" }, { - "deelgemeente_id": "24130E", - "deelgemeente_naam": "Budingen", - "gemeente_id": "24130", - "provincie_id": "20001" + "id": "24130E", + "naam": "Budingen", + "gemeente_niscode": "24130" }, { - "deelgemeente_id": "24133A", - "deelgemeente_naam": "Drieslinter", - "gemeente_id": "24133", - "provincie_id": "20001" + "id": "24133A", + "naam": "Drieslinter", + "gemeente_niscode": "24133" }, { - "deelgemeente_id": "24133B", - "deelgemeente_naam": "Neerlinter", - "gemeente_id": "24133", - "provincie_id": "20001" + "id": "24133B", + "naam": "Neerlinter", + "gemeente_niscode": "24133" }, { - "deelgemeente_id": "24133C", - "deelgemeente_naam": "Orsmaal-Gussenhoven", - "gemeente_id": "24133", - "provincie_id": "20001" + "id": "24133C", + "naam": "Orsmaal-Gussenhoven", + "gemeente_niscode": "24133" }, { - "deelgemeente_id": "24133D", - "deelgemeente_naam": "Melkwezer", - "gemeente_id": "24133", - "provincie_id": "20001" + "id": "24133D", + "naam": "Melkwezer", + "gemeente_niscode": "24133" }, { - "deelgemeente_id": "24133E", - "deelgemeente_naam": "Neerhespen", - "gemeente_id": "24133", - "provincie_id": "20001" + "id": "24133E", + "naam": "Neerhespen", + "gemeente_niscode": "24133" }, { - "deelgemeente_id": "24133F", - "deelgemeente_naam": "Overhespen", - "gemeente_id": "24133", - "provincie_id": "20001" + "id": "24133F", + "naam": "Overhespen", + "gemeente_niscode": "24133" }, { - "deelgemeente_id": "24133G", - "deelgemeente_naam": "Wommersom", - "gemeente_id": "24133", - "provincie_id": "20001" + "id": "24133G", + "naam": "Wommersom", + "gemeente_niscode": "24133" }, { - "deelgemeente_id": "24134A", - "deelgemeente_naam": "Scherpenheuvel", - "gemeente_id": "24134", - "provincie_id": "20001" + "id": "24134A", + "naam": "Scherpenheuvel", + "gemeente_niscode": "24134" }, { - "deelgemeente_id": "24134B", - "deelgemeente_naam": "Zichem", - "gemeente_id": "24134", - "provincie_id": "20001" + "id": "24134B", + "naam": "Zichem", + "gemeente_niscode": "24134" }, { - "deelgemeente_id": "24134C", - "deelgemeente_naam": "Messelbroek", - "gemeente_id": "24134", - "provincie_id": "20001" + "id": "24134C", + "naam": "Messelbroek", + "gemeente_niscode": "24134" }, { - "deelgemeente_id": "24134D", - "deelgemeente_naam": "Testelt", - "gemeente_id": "24134", - "provincie_id": "20001" + "id": "24134D", + "naam": "Testelt", + "gemeente_niscode": "24134" }, { - "deelgemeente_id": "24134E", - "deelgemeente_naam": "Averbode", - "gemeente_id": "24134", - "provincie_id": "20001" + "id": "24134E", + "naam": "Averbode", + "gemeente_niscode": "24134" }, { - "deelgemeente_id": "24135A", - "deelgemeente_naam": "Tielt", - "gemeente_id": "24135", - "provincie_id": "20001" + "id": "24135A", + "naam": "Tielt", + "gemeente_niscode": "24135" }, { - "deelgemeente_id": "24135B", - "deelgemeente_naam": "Meensel-Kiezegem", - "gemeente_id": "24135", - "provincie_id": "20001" + "id": "24135B", + "naam": "Meensel-Kiezegem", + "gemeente_niscode": "24135" }, { - "deelgemeente_id": "24135C", - "deelgemeente_naam": "Sint-Joris-Winge", - "gemeente_id": "24135", - "provincie_id": "20001" + "id": "24135C", + "naam": "Sint-Joris-Winge", + "gemeente_niscode": "24135" }, { - "deelgemeente_id": "24135D", - "deelgemeente_naam": "Houwaart", - "gemeente_id": "24135", - "provincie_id": "20001" + "id": "24135D", + "naam": "Houwaart", + "gemeente_niscode": "24135" }, { - "deelgemeente_id": "24137A", - "deelgemeente_naam": "Glabbeek-Zuurbemde", - "gemeente_id": "24137", - "provincie_id": "20001" + "id": "24137A", + "naam": "Glabbeek-Zuurbemde", + "gemeente_niscode": "24137" }, { - "deelgemeente_id": "24137B", - "deelgemeente_naam": "Attenrode", - "gemeente_id": "24137", - "provincie_id": "20001" + "id": "24137B", + "naam": "Attenrode", + "gemeente_niscode": "24137" }, { - "deelgemeente_id": "24137C", - "deelgemeente_naam": "Bunsbeek", - "gemeente_id": "24137", - "provincie_id": "20001" + "id": "24137C", + "naam": "Bunsbeek", + "gemeente_niscode": "24137" }, { - "deelgemeente_id": "24137D", - "deelgemeente_naam": "Kapellen", - "gemeente_id": "24137", - "provincie_id": "20001" + "id": "24137D", + "naam": "Kapellen", + "gemeente_niscode": "24137" }, { - "deelgemeente_id": "31003A", - "deelgemeente_naam": "Beernem", - "gemeente_id": "31003", - "provincie_id": "30000" + "id": "31003A", + "naam": "Beernem", + "gemeente_niscode": "31003" }, { - "deelgemeente_id": "31003B", - "deelgemeente_naam": "Oedelem", - "gemeente_id": "31003", - "provincie_id": "30000" + "id": "31003B", + "naam": "Oedelem", + "gemeente_niscode": "31003" }, { - "deelgemeente_id": "31003C", - "deelgemeente_naam": "Sint-Joris", - "gemeente_id": "31003", - "provincie_id": "30000" + "id": "31003C", + "naam": "Sint-Joris", + "gemeente_niscode": "31003" }, { - "deelgemeente_id": "31004A", - "deelgemeente_naam": "Blankenberge", - "gemeente_id": "31004", - "provincie_id": "30000" + "id": "31004A", + "naam": "Blankenberge", + "gemeente_niscode": "31004" }, { - "deelgemeente_id": "31004B", - "deelgemeente_naam": "Uitkerke", - "gemeente_id": "31004", - "provincie_id": "30000" + "id": "31004B", + "naam": "Uitkerke", + "gemeente_niscode": "31004" }, { - "deelgemeente_id": "31005A", - "deelgemeente_naam": "Brugge", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005A", + "naam": "Brugge", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005B", - "deelgemeente_naam": "Zeebrugge", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005B", + "naam": "Zeebrugge", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005C", - "deelgemeente_naam": "Dudzele", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005C", + "naam": "Dudzele", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005D", - "deelgemeente_naam": "Koolkerke", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005D", + "naam": "Koolkerke", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005E", - "deelgemeente_naam": "Sint-Kruis", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005E", + "naam": "Sint-Kruis", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005F", - "deelgemeente_naam": "Assebroek", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005F", + "naam": "Assebroek", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005G", - "deelgemeente_naam": "Sint-Michiels", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005G", + "naam": "Sint-Michiels", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005H", - "deelgemeente_naam": "Sint-Andries", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005H", + "naam": "Sint-Andries", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31005I", - "deelgemeente_naam": "Lissewege", - "gemeente_id": "31005", - "provincie_id": "30000" + "id": "31005I", + "naam": "Lissewege", + "gemeente_niscode": "31005" }, { - "deelgemeente_id": "31006A", - "deelgemeente_naam": "Damme", - "gemeente_id": "31006", - "provincie_id": "30000" + "id": "31006A", + "naam": "Damme", + "gemeente_niscode": "31006" }, { - "deelgemeente_id": "31006B", - "deelgemeente_naam": "Hoeke", - "gemeente_id": "31006", - "provincie_id": "30000" + "id": "31006B", + "naam": "Hoeke", + "gemeente_niscode": "31006" }, { - "deelgemeente_id": "31006C", - "deelgemeente_naam": "Oostkerke", - "gemeente_id": "31006", - "provincie_id": "30000" + "id": "31006C", + "naam": "Oostkerke", + "gemeente_niscode": "31006" }, { - "deelgemeente_id": "31006D", - "deelgemeente_naam": "Lapscheure", - "gemeente_id": "31006", - "provincie_id": "30000" + "id": "31006D", + "naam": "Lapscheure", + "gemeente_niscode": "31006" }, { - "deelgemeente_id": "31006E", - "deelgemeente_naam": "Moerkerke", - "gemeente_id": "31006", - "provincie_id": "30000" + "id": "31006E", + "naam": "Moerkerke", + "gemeente_niscode": "31006" }, { - "deelgemeente_id": "31006F", - "deelgemeente_naam": "Sijsele", - "gemeente_id": "31006", - "provincie_id": "30000" + "id": "31006F", + "naam": "Sijsele", + "gemeente_niscode": "31006" }, { - "deelgemeente_id": "31012A", - "deelgemeente_naam": "Jabbeke", - "gemeente_id": "31012", - "provincie_id": "30000" + "id": "31012A", + "naam": "Jabbeke", + "gemeente_niscode": "31012" }, { - "deelgemeente_id": "31012B", - "deelgemeente_naam": "Zerkegem", - "gemeente_id": "31012", - "provincie_id": "30000" + "id": "31012B", + "naam": "Zerkegem", + "gemeente_niscode": "31012" }, { - "deelgemeente_id": "31012C", - "deelgemeente_naam": "Stalhille", - "gemeente_id": "31012", - "provincie_id": "30000" + "id": "31012C", + "naam": "Stalhille", + "gemeente_niscode": "31012" }, { - "deelgemeente_id": "31012D", - "deelgemeente_naam": "Varsenare", - "gemeente_id": "31012", - "provincie_id": "30000" + "id": "31012D", + "naam": "Varsenare", + "gemeente_niscode": "31012" }, { - "deelgemeente_id": "31012E", - "deelgemeente_naam": "Snellegem", - "gemeente_id": "31012", - "provincie_id": "30000" + "id": "31012E", + "naam": "Snellegem", + "gemeente_niscode": "31012" }, { - "deelgemeente_id": "31022A", - "deelgemeente_naam": "Oostkamp", - "gemeente_id": "31022", - "provincie_id": "30000" + "id": "31022A", + "naam": "Oostkamp", + "gemeente_niscode": "31022" }, { - "deelgemeente_id": "31022B", - "deelgemeente_naam": "Hertsberge", - "gemeente_id": "31022", - "provincie_id": "30000" + "id": "31022B", + "naam": "Hertsberge", + "gemeente_niscode": "31022" }, { - "deelgemeente_id": "31022C", - "deelgemeente_naam": "Ruddervoorde", - "gemeente_id": "31022", - "provincie_id": "30000" + "id": "31022C", + "naam": "Ruddervoorde", + "gemeente_niscode": "31022" }, { - "deelgemeente_id": "31022D", - "deelgemeente_naam": "Waardamme", - "gemeente_id": "31022", - "provincie_id": "30000" + "id": "31022D", + "naam": "Waardamme", + "gemeente_niscode": "31022" }, { - "deelgemeente_id": "31033A", - "deelgemeente_naam": "Torhout", - "gemeente_id": "31033", - "provincie_id": "30000" + "id": "31033A", + "naam": "Torhout", + "gemeente_niscode": "31033" }, { - "deelgemeente_id": "31040A", - "deelgemeente_naam": "Zedelgem", - "gemeente_id": "31040", - "provincie_id": "30000" + "id": "31040A", + "naam": "Zedelgem", + "gemeente_niscode": "31040" }, { - "deelgemeente_id": "31040B", - "deelgemeente_naam": "Loppem", - "gemeente_id": "31040", - "provincie_id": "30000" + "id": "31040B", + "naam": "Loppem", + "gemeente_niscode": "31040" }, { - "deelgemeente_id": "31040C", - "deelgemeente_naam": "Veldegem", - "gemeente_id": "31040", - "provincie_id": "30000" + "id": "31040C", + "naam": "Veldegem", + "gemeente_niscode": "31040" }, { - "deelgemeente_id": "31040D", - "deelgemeente_naam": "Aartrijke", - "gemeente_id": "31040", - "provincie_id": "30000" + "id": "31040D", + "naam": "Aartrijke", + "gemeente_niscode": "31040" }, { - "deelgemeente_id": "31042A", - "deelgemeente_naam": "Zuienkerke", - "gemeente_id": "31042", - "provincie_id": "30000" + "id": "31042A", + "naam": "Zuienkerke", + "gemeente_niscode": "31042" }, { - "deelgemeente_id": "31042B", - "deelgemeente_naam": "Meetkerke", - "gemeente_id": "31042", - "provincie_id": "30000" + "id": "31042B", + "naam": "Meetkerke", + "gemeente_niscode": "31042" }, { - "deelgemeente_id": "31042C", - "deelgemeente_naam": "Houtave", - "gemeente_id": "31042", - "provincie_id": "30000" + "id": "31042C", + "naam": "Houtave", + "gemeente_niscode": "31042" }, { - "deelgemeente_id": "31042D", - "deelgemeente_naam": "Nieuwmunster", - "gemeente_id": "31042", - "provincie_id": "30000" + "id": "31042D", + "naam": "Nieuwmunster", + "gemeente_niscode": "31042" }, { - "deelgemeente_id": "31043A", - "deelgemeente_naam": "Knokke", - "gemeente_id": "31043", - "provincie_id": "30000" + "id": "31043A", + "naam": "Knokke", + "gemeente_niscode": "31043" }, { - "deelgemeente_id": "31043B", - "deelgemeente_naam": "Heist", - "gemeente_id": "31043", - "provincie_id": "30000" + "id": "31043B", + "naam": "Heist", + "gemeente_niscode": "31043" }, { - "deelgemeente_id": "31043C", - "deelgemeente_naam": "Ramskapelle", - "gemeente_id": "31043", - "provincie_id": "30000" + "id": "31043C", + "naam": "Ramskapelle", + "gemeente_niscode": "31043" }, { - "deelgemeente_id": "31043D", - "deelgemeente_naam": "Westkapelle", - "gemeente_id": "31043", - "provincie_id": "30000" + "id": "31043D", + "naam": "Westkapelle", + "gemeente_niscode": "31043" }, { - "deelgemeente_id": "32003A", - "deelgemeente_naam": "Diksmuide", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003A", + "naam": "Diksmuide", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003B", - "deelgemeente_naam": "Beerst", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003B", + "naam": "Beerst", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003C", - "deelgemeente_naam": "Keiem", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003C", + "naam": "Keiem", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003D", - "deelgemeente_naam": "Leke", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003D", + "naam": "Leke", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003E", - "deelgemeente_naam": "Vladslo", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003E", + "naam": "Vladslo", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003F", - "deelgemeente_naam": "Woumen", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003F", + "naam": "Woumen", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003G", - "deelgemeente_naam": "Nieuwkapelle", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003G", + "naam": "Nieuwkapelle", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003H", - "deelgemeente_naam": "Oudekapelle", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003H", + "naam": "Oudekapelle", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003J", - "deelgemeente_naam": "Sint-Jacobs-Kapelle", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003J", + "naam": "Sint-Jacobs-Kapelle", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003K", - "deelgemeente_naam": "Oostkerke", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003K", + "naam": "Oostkerke", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003L", - "deelgemeente_naam": "Lampernisse", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003L", + "naam": "Lampernisse", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003M", - "deelgemeente_naam": "Pervijze", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003M", + "naam": "Pervijze", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003N", - "deelgemeente_naam": "Stuivekenskerke", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003N", + "naam": "Stuivekenskerke", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003O", - "deelgemeente_naam": "Esen", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003O", + "naam": "Esen", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32003P", - "deelgemeente_naam": "Kaaskerke", - "gemeente_id": "32003", - "provincie_id": "30000" + "id": "32003P", + "naam": "Kaaskerke", + "gemeente_niscode": "32003" }, { - "deelgemeente_id": "32006A", - "deelgemeente_naam": "Houthulst", - "gemeente_id": "32006", - "provincie_id": "30000" + "id": "32006A", + "naam": "Houthulst", + "gemeente_niscode": "32006" }, { - "deelgemeente_id": "32006B", - "deelgemeente_naam": "Merkem", - "gemeente_id": "32006", - "provincie_id": "30000" + "id": "32006B", + "naam": "Merkem", + "gemeente_niscode": "32006" }, { - "deelgemeente_id": "32006D", - "deelgemeente_naam": "Klerken", - "gemeente_id": "32006", - "provincie_id": "30000" + "id": "32006D", + "naam": "Klerken", + "gemeente_niscode": "32006" }, { - "deelgemeente_id": "32010A", - "deelgemeente_naam": "Koekelare", - "gemeente_id": "32010", - "provincie_id": "30000" + "id": "32010A", + "naam": "Koekelare", + "gemeente_niscode": "32010" }, { - "deelgemeente_id": "32010B", - "deelgemeente_naam": "Bovekerke", - "gemeente_id": "32010", - "provincie_id": "30000" + "id": "32010B", + "naam": "Bovekerke", + "gemeente_niscode": "32010" }, { - "deelgemeente_id": "32010C", - "deelgemeente_naam": "Zande", - "gemeente_id": "32010", - "provincie_id": "30000" + "id": "32010C", + "naam": "Zande", + "gemeente_niscode": "32010" }, { - "deelgemeente_id": "32011A", - "deelgemeente_naam": "Kortemark", - "gemeente_id": "32011", - "provincie_id": "30000" + "id": "32011A", + "naam": "Kortemark", + "gemeente_niscode": "32011" }, { - "deelgemeente_id": "32011B", - "deelgemeente_naam": "Handzame", - "gemeente_id": "32011", - "provincie_id": "30000" + "id": "32011B", + "naam": "Handzame", + "gemeente_niscode": "32011" }, { - "deelgemeente_id": "32011C", - "deelgemeente_naam": "Werken", - "gemeente_id": "32011", - "provincie_id": "30000" + "id": "32011C", + "naam": "Werken", + "gemeente_niscode": "32011" }, { - "deelgemeente_id": "32011D", - "deelgemeente_naam": "Zarren", - "gemeente_id": "32011", - "provincie_id": "30000" + "id": "32011D", + "naam": "Zarren", + "gemeente_niscode": "32011" }, { - "deelgemeente_id": "32030A", - "deelgemeente_naam": "Lo", - "gemeente_id": "32030", - "provincie_id": "30000" + "id": "32030A", + "naam": "Lo", + "gemeente_niscode": "32030" }, { - "deelgemeente_id": "32030B", - "deelgemeente_naam": "Pollinkhove", - "gemeente_id": "32030", - "provincie_id": "30000" + "id": "32030B", + "naam": "Pollinkhove", + "gemeente_niscode": "32030" }, { - "deelgemeente_id": "32030C", - "deelgemeente_naam": "Reninge", - "gemeente_id": "32030", - "provincie_id": "30000" + "id": "32030C", + "naam": "Reninge", + "gemeente_niscode": "32030" }, { - "deelgemeente_id": "32030D", - "deelgemeente_naam": "Noordschote", - "gemeente_id": "32030", - "provincie_id": "30000" + "id": "32030D", + "naam": "Noordschote", + "gemeente_niscode": "32030" }, { - "deelgemeente_id": "33011A", - "deelgemeente_naam": "Ieper", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011A", + "naam": "Ieper", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011B", - "deelgemeente_naam": "Brielen", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011B", + "naam": "Brielen", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011C", - "deelgemeente_naam": "Sint-Jan", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011C", + "naam": "Sint-Jan", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011D", - "deelgemeente_naam": "Boezinge", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011D", + "naam": "Boezinge", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011E", - "deelgemeente_naam": "Zuidschote", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011E", + "naam": "Zuidschote", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011F", - "deelgemeente_naam": "Elverdinge", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011F", + "naam": "Elverdinge", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011G", - "deelgemeente_naam": "Vlamertinge", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011G", + "naam": "Vlamertinge", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011H", - "deelgemeente_naam": "Dikkebus", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011H", + "naam": "Dikkebus", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011J", - "deelgemeente_naam": "Voormezele", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011J", + "naam": "Voormezele", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011K", - "deelgemeente_naam": "Hollebeke", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011K", + "naam": "Hollebeke", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33011L", - "deelgemeente_naam": "Zillebeke", - "gemeente_id": "33011", - "provincie_id": "30000" + "id": "33011L", + "naam": "Zillebeke", + "gemeente_niscode": "33011" }, { - "deelgemeente_id": "33016A", - "deelgemeente_naam": "Mesen", - "gemeente_id": "33016", - "provincie_id": "30000" + "id": "33016A", + "naam": "Mesen", + "gemeente_niscode": "33016" }, { - "deelgemeente_id": "33021A", - "deelgemeente_naam": "Poperinge", - "gemeente_id": "33021", - "provincie_id": "30000" + "id": "33021A", + "naam": "Poperinge", + "gemeente_niscode": "33021" }, { - "deelgemeente_id": "33021B", - "deelgemeente_naam": "Reningelst", - "gemeente_id": "33021", - "provincie_id": "30000" + "id": "33021B", + "naam": "Reningelst", + "gemeente_niscode": "33021" }, { - "deelgemeente_id": "33021C", - "deelgemeente_naam": "Krombeke", - "gemeente_id": "33021", - "provincie_id": "30000" + "id": "33021C", + "naam": "Krombeke", + "gemeente_niscode": "33021" }, { - "deelgemeente_id": "33021D", - "deelgemeente_naam": "Proven", - "gemeente_id": "33021", - "provincie_id": "30000" + "id": "33021D", + "naam": "Proven", + "gemeente_niscode": "33021" }, { - "deelgemeente_id": "33021E", - "deelgemeente_naam": "Roesbrugge-Haringe", - "gemeente_id": "33021", - "provincie_id": "30000" + "id": "33021E", + "naam": "Roesbrugge-Haringe", + "gemeente_niscode": "33021" }, { - "deelgemeente_id": "33021F", - "deelgemeente_naam": "Watou", - "gemeente_id": "33021", - "provincie_id": "30000" + "id": "33021F", + "naam": "Watou", + "gemeente_niscode": "33021" }, { - "deelgemeente_id": "33029A", - "deelgemeente_naam": "Wervik", - "gemeente_id": "33029", - "provincie_id": "30000" + "id": "33029A", + "naam": "Wervik", + "gemeente_niscode": "33029" }, { - "deelgemeente_id": "33029B", - "deelgemeente_naam": "Geluwe", - "gemeente_id": "33029", - "provincie_id": "30000" + "id": "33029B", + "naam": "Geluwe", + "gemeente_niscode": "33029" }, { - "deelgemeente_id": "33037A", - "deelgemeente_naam": "Zonnebeke", - "gemeente_id": "33037", - "provincie_id": "30000" + "id": "33037A", + "naam": "Zonnebeke", + "gemeente_niscode": "33037" }, { - "deelgemeente_id": "33037B", - "deelgemeente_naam": "Passendale", - "gemeente_id": "33037", - "provincie_id": "30000" + "id": "33037B", + "naam": "Passendale", + "gemeente_niscode": "33037" }, { - "deelgemeente_id": "33037C", - "deelgemeente_naam": "Beselare", - "gemeente_id": "33037", - "provincie_id": "30000" + "id": "33037C", + "naam": "Beselare", + "gemeente_niscode": "33037" }, { - "deelgemeente_id": "33037D", - "deelgemeente_naam": "Geluveld", - "gemeente_id": "33037", - "provincie_id": "30000" + "id": "33037D", + "naam": "Geluveld", + "gemeente_niscode": "33037" }, { - "deelgemeente_id": "33037E", - "deelgemeente_naam": "Zandvoorde", - "gemeente_id": "33037", - "provincie_id": "30000" + "id": "33037E", + "naam": "Zandvoorde", + "gemeente_niscode": "33037" }, { - "deelgemeente_id": "33039A", - "deelgemeente_naam": "Kemmel", - "gemeente_id": "33039", - "provincie_id": "30000" + "id": "33039A", + "naam": "Kemmel", + "gemeente_niscode": "33039" }, { - "deelgemeente_id": "33039B", - "deelgemeente_naam": "Wijtschate", - "gemeente_id": "33039", - "provincie_id": "30000" + "id": "33039B", + "naam": "Wijtschate", + "gemeente_niscode": "33039" }, { - "deelgemeente_id": "33039C", - "deelgemeente_naam": "Wulvergem", - "gemeente_id": "33039", - "provincie_id": "30000" + "id": "33039C", + "naam": "Wulvergem", + "gemeente_niscode": "33039" }, { - "deelgemeente_id": "33039D", - "deelgemeente_naam": "Nieuwkerke", - "gemeente_id": "33039", - "provincie_id": "30000" + "id": "33039D", + "naam": "Nieuwkerke", + "gemeente_niscode": "33039" }, { - "deelgemeente_id": "33039E", - "deelgemeente_naam": "Dranouter", - "gemeente_id": "33039", - "provincie_id": "30000" + "id": "33039E", + "naam": "Dranouter", + "gemeente_niscode": "33039" }, { - "deelgemeente_id": "33039F", - "deelgemeente_naam": "Loker", - "gemeente_id": "33039", - "provincie_id": "30000" + "id": "33039F", + "naam": "Loker", + "gemeente_niscode": "33039" }, { - "deelgemeente_id": "33039G", - "deelgemeente_naam": "Westouter", - "gemeente_id": "33039", - "provincie_id": "30000" + "id": "33039G", + "naam": "Westouter", + "gemeente_niscode": "33039" }, { - "deelgemeente_id": "33040A", - "deelgemeente_naam": "Langemark", - "gemeente_id": "33040", - "provincie_id": "30000" + "id": "33040A", + "naam": "Langemark", + "gemeente_niscode": "33040" }, { - "deelgemeente_id": "33040B", - "deelgemeente_naam": "Bikschote", - "gemeente_id": "33040", - "provincie_id": "30000" + "id": "33040B", + "naam": "Bikschote", + "gemeente_niscode": "33040" }, { - "deelgemeente_id": "33040C", - "deelgemeente_naam": "Poelkapelle", - "gemeente_id": "33040", - "provincie_id": "30000" + "id": "33040C", + "naam": "Poelkapelle", + "gemeente_niscode": "33040" }, { - "deelgemeente_id": "33041A", - "deelgemeente_naam": "Oostvleteren", - "gemeente_id": "33041", - "provincie_id": "30000" + "id": "33041A", + "naam": "Oostvleteren", + "gemeente_niscode": "33041" }, { - "deelgemeente_id": "33041B", - "deelgemeente_naam": "Westvleteren", - "gemeente_id": "33041", - "provincie_id": "30000" + "id": "33041B", + "naam": "Westvleteren", + "gemeente_niscode": "33041" }, { - "deelgemeente_id": "33041C", - "deelgemeente_naam": "Woesten", - "gemeente_id": "33041", - "provincie_id": "30000" + "id": "33041C", + "naam": "Woesten", + "gemeente_niscode": "33041" }, { - "deelgemeente_id": "34002A", - "deelgemeente_naam": "Anzegem", - "gemeente_id": "34002", - "provincie_id": "30000" + "id": "34002A", + "naam": "Anzegem", + "gemeente_niscode": "34002" }, { - "deelgemeente_id": "34002B", - "deelgemeente_naam": "Gijzelbrechtegem", - "gemeente_id": "34002", - "provincie_id": "30000" + "id": "34002B", + "naam": "Gijzelbrechtegem", + "gemeente_niscode": "34002" }, { - "deelgemeente_id": "34002C", - "deelgemeente_naam": "Kaster", - "gemeente_id": "34002", - "provincie_id": "30000" + "id": "34002C", + "naam": "Kaster", + "gemeente_niscode": "34002" }, { - "deelgemeente_id": "34002D", - "deelgemeente_naam": "Tiegem", - "gemeente_id": "34002", - "provincie_id": "30000" + "id": "34002D", + "naam": "Tiegem", + "gemeente_niscode": "34002" }, { - "deelgemeente_id": "34002E", - "deelgemeente_naam": "Ingooigem", - "gemeente_id": "34002", - "provincie_id": "30000" + "id": "34002E", + "naam": "Ingooigem", + "gemeente_niscode": "34002" }, { - "deelgemeente_id": "34002F", - "deelgemeente_naam": "Vichte", - "gemeente_id": "34002", - "provincie_id": "30000" + "id": "34002F", + "naam": "Vichte", + "gemeente_niscode": "34002" }, { - "deelgemeente_id": "34003A", - "deelgemeente_naam": "Avelgem", - "gemeente_id": "34003", - "provincie_id": "30000" + "id": "34003A", + "naam": "Avelgem", + "gemeente_niscode": "34003" }, { - "deelgemeente_id": "34003B", - "deelgemeente_naam": "Waarmaarde", - "gemeente_id": "34003", - "provincie_id": "30000" + "id": "34003B", + "naam": "Waarmaarde", + "gemeente_niscode": "34003" }, { - "deelgemeente_id": "34003C", - "deelgemeente_naam": "Kerkhove", - "gemeente_id": "34003", - "provincie_id": "30000" + "id": "34003C", + "naam": "Kerkhove", + "gemeente_niscode": "34003" }, { - "deelgemeente_id": "34003D", - "deelgemeente_naam": "Outrijve", - "gemeente_id": "34003", - "provincie_id": "30000" + "id": "34003D", + "naam": "Outrijve", + "gemeente_niscode": "34003" }, { - "deelgemeente_id": "34003E", - "deelgemeente_naam": "Bossuit", - "gemeente_id": "34003", - "provincie_id": "30000" + "id": "34003E", + "naam": "Bossuit", + "gemeente_niscode": "34003" }, { - "deelgemeente_id": "34009A", - "deelgemeente_naam": "Deerlijk", - "gemeente_id": "34009", - "provincie_id": "30000" + "id": "34009A", + "naam": "Deerlijk", + "gemeente_niscode": "34009" }, { - "deelgemeente_id": "34013A", - "deelgemeente_naam": "Harelbeke", - "gemeente_id": "34013", - "provincie_id": "30000" + "id": "34013A", + "naam": "Harelbeke", + "gemeente_niscode": "34013" }, { - "deelgemeente_id": "34013B", - "deelgemeente_naam": "Bavikhove", - "gemeente_id": "34013", - "provincie_id": "30000" + "id": "34013B", + "naam": "Bavikhove", + "gemeente_niscode": "34013" }, { - "deelgemeente_id": "34013C", - "deelgemeente_naam": "Hulste", - "gemeente_id": "34013", - "provincie_id": "30000" + "id": "34013C", + "naam": "Hulste", + "gemeente_niscode": "34013" }, { - "deelgemeente_id": "34022A", - "deelgemeente_naam": "Kortrijk", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022A", + "naam": "Kortrijk", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34022B", - "deelgemeente_naam": "Heule", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022B", + "naam": "Heule", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34022C", - "deelgemeente_naam": "Bissegem", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022C", + "naam": "Bissegem", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34022D", - "deelgemeente_naam": "Marke", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022D", + "naam": "Marke", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34022E", - "deelgemeente_naam": "Aalbeke", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022E", + "naam": "Aalbeke", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34022F", - "deelgemeente_naam": "Rollegem", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022F", + "naam": "Rollegem", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34022G", - "deelgemeente_naam": "Bellegem", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022G", + "naam": "Bellegem", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34022H", - "deelgemeente_naam": "Kooigem", - "gemeente_id": "34022", - "provincie_id": "30000" + "id": "34022H", + "naam": "Kooigem", + "gemeente_niscode": "34022" }, { - "deelgemeente_id": "34023A", - "deelgemeente_naam": "Kuurne", - "gemeente_id": "34023", - "provincie_id": "30000" + "id": "34023A", + "naam": "Kuurne", + "gemeente_niscode": "34023" }, { - "deelgemeente_id": "34025A", - "deelgemeente_naam": "Lendelede", - "gemeente_id": "34025", - "provincie_id": "30000" + "id": "34025A", + "naam": "Lendelede", + "gemeente_niscode": "34025" }, { - "deelgemeente_id": "34027A", - "deelgemeente_naam": "Menen", - "gemeente_id": "34027", - "provincie_id": "30000" + "id": "34027A", + "naam": "Menen", + "gemeente_niscode": "34027" }, { - "deelgemeente_id": "34027B", - "deelgemeente_naam": "Lauwe", - "gemeente_id": "34027", - "provincie_id": "30000" + "id": "34027B", + "naam": "Lauwe", + "gemeente_niscode": "34027" }, { - "deelgemeente_id": "34027C", - "deelgemeente_naam": "Rekkem", - "gemeente_id": "34027", - "provincie_id": "30000" + "id": "34027C", + "naam": "Rekkem", + "gemeente_niscode": "34027" }, { - "deelgemeente_id": "34040A", - "deelgemeente_naam": "Waregem", - "gemeente_id": "34040", - "provincie_id": "30000" + "id": "34040A", + "naam": "Waregem", + "gemeente_niscode": "34040" }, { - "deelgemeente_id": "34040B", - "deelgemeente_naam": "Beveren", - "gemeente_id": "34040", - "provincie_id": "30000" + "id": "34040B", + "naam": "Beveren", + "gemeente_niscode": "34040" }, { - "deelgemeente_id": "34040C", - "deelgemeente_naam": "Desselgem", - "gemeente_id": "34040", - "provincie_id": "30000" + "id": "34040C", + "naam": "Desselgem", + "gemeente_niscode": "34040" }, { - "deelgemeente_id": "34040D", - "deelgemeente_naam": "Sint-Eloois-Vijve", - "gemeente_id": "34040", - "provincie_id": "30000" + "id": "34040D", + "naam": "Sint-Eloois-Vijve", + "gemeente_niscode": "34040" }, { - "deelgemeente_id": "34041A", - "deelgemeente_naam": "Wevelgem", - "gemeente_id": "34041", - "provincie_id": "30000" + "id": "34041A", + "naam": "Wevelgem", + "gemeente_niscode": "34041" }, { - "deelgemeente_id": "34041B", - "deelgemeente_naam": "Gullegem", - "gemeente_id": "34041", - "provincie_id": "30000" + "id": "34041B", + "naam": "Gullegem", + "gemeente_niscode": "34041" }, { - "deelgemeente_id": "34041C", - "deelgemeente_naam": "Moorsele", - "gemeente_id": "34041", - "provincie_id": "30000" + "id": "34041C", + "naam": "Moorsele", + "gemeente_niscode": "34041" }, { - "deelgemeente_id": "34042A", - "deelgemeente_naam": "Zwevegem", - "gemeente_id": "34042", - "provincie_id": "30000" + "id": "34042A", + "naam": "Zwevegem", + "gemeente_niscode": "34042" }, { - "deelgemeente_id": "34042B", - "deelgemeente_naam": "Otegem", - "gemeente_id": "34042", - "provincie_id": "30000" + "id": "34042B", + "naam": "Otegem", + "gemeente_niscode": "34042" }, { - "deelgemeente_id": "34042C", - "deelgemeente_naam": "Heestert", - "gemeente_id": "34042", - "provincie_id": "30000" + "id": "34042C", + "naam": "Heestert", + "gemeente_niscode": "34042" }, { - "deelgemeente_id": "34042D", - "deelgemeente_naam": "Moen", - "gemeente_id": "34042", - "provincie_id": "30000" + "id": "34042D", + "naam": "Moen", + "gemeente_niscode": "34042" }, { - "deelgemeente_id": "34042E", - "deelgemeente_naam": "Sint-Denijs", - "gemeente_id": "34042", - "provincie_id": "30000" + "id": "34042E", + "naam": "Sint-Denijs", + "gemeente_niscode": "34042" }, { - "deelgemeente_id": "34043A", - "deelgemeente_naam": "Spiere", - "gemeente_id": "34043", - "provincie_id": "30000" + "id": "34043A", + "naam": "Spiere", + "gemeente_niscode": "34043" }, { - "deelgemeente_id": "34043B", - "deelgemeente_naam": "Helkijn", - "gemeente_id": "34043", - "provincie_id": "30000" + "id": "34043B", + "naam": "Helkijn", + "gemeente_niscode": "34043" }, { - "deelgemeente_id": "35002A", - "deelgemeente_naam": "Bredene", - "gemeente_id": "35002", - "provincie_id": "30000" + "id": "35002A", + "naam": "Bredene", + "gemeente_niscode": "35002" }, { - "deelgemeente_id": "35005A", - "deelgemeente_naam": "Gistel", - "gemeente_id": "35005", - "provincie_id": "30000" + "id": "35005A", + "naam": "Gistel", + "gemeente_niscode": "35005" }, { - "deelgemeente_id": "35005B", - "deelgemeente_naam": "Moere", - "gemeente_id": "35005", - "provincie_id": "30000" + "id": "35005B", + "naam": "Moere", + "gemeente_niscode": "35005" }, { - "deelgemeente_id": "35005C", - "deelgemeente_naam": "Zevekote", - "gemeente_id": "35005", - "provincie_id": "30000" + "id": "35005C", + "naam": "Zevekote", + "gemeente_niscode": "35005" }, { - "deelgemeente_id": "35005D", - "deelgemeente_naam": "Snaaskerke", - "gemeente_id": "35005", - "provincie_id": "30000" + "id": "35005D", + "naam": "Snaaskerke", + "gemeente_niscode": "35005" }, { - "deelgemeente_id": "35006A", - "deelgemeente_naam": "Ichtegem", - "gemeente_id": "35006", - "provincie_id": "30000" + "id": "35006A", + "naam": "Ichtegem", + "gemeente_niscode": "35006" }, { - "deelgemeente_id": "35006B", - "deelgemeente_naam": "Eernegem", - "gemeente_id": "35006", - "provincie_id": "30000" + "id": "35006B", + "naam": "Eernegem", + "gemeente_niscode": "35006" }, { - "deelgemeente_id": "35006C", - "deelgemeente_naam": "Bekegem", - "gemeente_id": "35006", - "provincie_id": "30000" + "id": "35006C", + "naam": "Bekegem", + "gemeente_niscode": "35006" }, { - "deelgemeente_id": "35011A", - "deelgemeente_naam": "Middelkerke", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011A", + "naam": "Middelkerke", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011B", - "deelgemeente_naam": "Wilskerke", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011B", + "naam": "Wilskerke", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011C", - "deelgemeente_naam": "Leffinge", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011C", + "naam": "Leffinge", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011D", - "deelgemeente_naam": "Sint-Pieters-Kapelle", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011D", + "naam": "Sint-Pieters-Kapelle", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011E", - "deelgemeente_naam": "Schore", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011E", + "naam": "Schore", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011F", - "deelgemeente_naam": "Mannekensvere", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011F", + "naam": "Mannekensvere", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011G", - "deelgemeente_naam": "Slijpe", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011G", + "naam": "Slijpe", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011H", - "deelgemeente_naam": "Westende", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011H", + "naam": "Westende", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35011J", - "deelgemeente_naam": "Lombardsijde", - "gemeente_id": "35011", - "provincie_id": "30000" + "id": "35011J", + "naam": "Lombardsijde", + "gemeente_niscode": "35011" }, { - "deelgemeente_id": "35013A", - "deelgemeente_naam": "Oostende", - "gemeente_id": "35013", - "provincie_id": "30000" + "id": "35013A", + "naam": "Oostende", + "gemeente_niscode": "35013" }, { - "deelgemeente_id": "35013C", - "deelgemeente_naam": "Zandvoorde", - "gemeente_id": "35013", - "provincie_id": "30000" + "id": "35013C", + "naam": "Zandvoorde", + "gemeente_niscode": "35013" }, { - "deelgemeente_id": "35013D", - "deelgemeente_naam": "Stene", - "gemeente_id": "35013", - "provincie_id": "30000" + "id": "35013D", + "naam": "Stene", + "gemeente_niscode": "35013" }, { - "deelgemeente_id": "35014A", - "deelgemeente_naam": "Oudenburg", - "gemeente_id": "35014", - "provincie_id": "30000" + "id": "35014A", + "naam": "Oudenburg", + "gemeente_niscode": "35014" }, { - "deelgemeente_id": "35014B", - "deelgemeente_naam": "Ettelgem", - "gemeente_id": "35014", - "provincie_id": "30000" + "id": "35014B", + "naam": "Ettelgem", + "gemeente_niscode": "35014" }, { - "deelgemeente_id": "35014C", - "deelgemeente_naam": "Roksem", - "gemeente_id": "35014", - "provincie_id": "30000" + "id": "35014C", + "naam": "Roksem", + "gemeente_niscode": "35014" }, { - "deelgemeente_id": "35014D", - "deelgemeente_naam": "Westkerke", - "gemeente_id": "35014", - "provincie_id": "30000" + "id": "35014D", + "naam": "Westkerke", + "gemeente_niscode": "35014" }, { - "deelgemeente_id": "35029A", - "deelgemeente_naam": "Klemskerke", - "gemeente_id": "35029", - "provincie_id": "30000" + "id": "35029A", + "naam": "Klemskerke", + "gemeente_niscode": "35029" }, { - "deelgemeente_id": "35029B", - "deelgemeente_naam": "Vlissegem", - "gemeente_id": "35029", - "provincie_id": "30000" + "id": "35029B", + "naam": "Vlissegem", + "gemeente_niscode": "35029" }, { - "deelgemeente_id": "35029C", - "deelgemeente_naam": "Wenduine", - "gemeente_id": "35029", - "provincie_id": "30000" + "id": "35029C", + "naam": "Wenduine", + "gemeente_niscode": "35029" }, { - "deelgemeente_id": "36006A", - "deelgemeente_naam": "Hooglede", - "gemeente_id": "36006", - "provincie_id": "30000" + "id": "36006A", + "naam": "Hooglede", + "gemeente_niscode": "36006" }, { - "deelgemeente_id": "36006B", - "deelgemeente_naam": "Gits", - "gemeente_id": "36006", - "provincie_id": "30000" + "id": "36006B", + "naam": "Gits", + "gemeente_niscode": "36006" }, { - "deelgemeente_id": "36007A", - "deelgemeente_naam": "Ingelmunster", - "gemeente_id": "36007", - "provincie_id": "30000" + "id": "36007A", + "naam": "Ingelmunster", + "gemeente_niscode": "36007" }, { - "deelgemeente_id": "36008A", - "deelgemeente_naam": "Izegem", - "gemeente_id": "36008", - "provincie_id": "30000" + "id": "36008A", + "naam": "Izegem", + "gemeente_niscode": "36008" }, { - "deelgemeente_id": "36008B", - "deelgemeente_naam": "Kachtem", - "gemeente_id": "36008", - "provincie_id": "30000" + "id": "36008B", + "naam": "Kachtem", + "gemeente_niscode": "36008" }, { - "deelgemeente_id": "36008C", - "deelgemeente_naam": "Emelgem", - "gemeente_id": "36008", - "provincie_id": "30000" + "id": "36008C", + "naam": "Emelgem", + "gemeente_niscode": "36008" }, { - "deelgemeente_id": "36010A", - "deelgemeente_naam": "Ledegem", - "gemeente_id": "36010", - "provincie_id": "30000" + "id": "36010A", + "naam": "Ledegem", + "gemeente_niscode": "36010" }, { - "deelgemeente_id": "36010B", - "deelgemeente_naam": "Rollegem-Kapelle", - "gemeente_id": "36010", - "provincie_id": "30000" + "id": "36010B", + "naam": "Rollegem-Kapelle", + "gemeente_niscode": "36010" }, { - "deelgemeente_id": "36010C", - "deelgemeente_naam": "Sint-Eloois-Winkel", - "gemeente_id": "36010", - "provincie_id": "30000" + "id": "36010C", + "naam": "Sint-Eloois-Winkel", + "gemeente_niscode": "36010" }, { - "deelgemeente_id": "36011A", - "deelgemeente_naam": "Lichtervelde", - "gemeente_id": "36011", - "provincie_id": "30000" + "id": "36011A", + "naam": "Lichtervelde", + "gemeente_niscode": "36011" }, { - "deelgemeente_id": "36012A", - "deelgemeente_naam": "Moorslede", - "gemeente_id": "36012", - "provincie_id": "30000" + "id": "36012A", + "naam": "Moorslede", + "gemeente_niscode": "36012" }, { - "deelgemeente_id": "36012B", - "deelgemeente_naam": "Dadizele", - "gemeente_id": "36012", - "provincie_id": "30000" + "id": "36012B", + "naam": "Dadizele", + "gemeente_niscode": "36012" }, { - "deelgemeente_id": "36015A", - "deelgemeente_naam": "Roeselare", - "gemeente_id": "36015", - "provincie_id": "30000" + "id": "36015A", + "naam": "Roeselare", + "gemeente_niscode": "36015" }, { - "deelgemeente_id": "36015B", - "deelgemeente_naam": "Oekene", - "gemeente_id": "36015", - "provincie_id": "30000" + "id": "36015B", + "naam": "Oekene", + "gemeente_niscode": "36015" }, { - "deelgemeente_id": "36015C", - "deelgemeente_naam": "Rumbeke", - "gemeente_id": "36015", - "provincie_id": "30000" + "id": "36015C", + "naam": "Rumbeke", + "gemeente_niscode": "36015" }, { - "deelgemeente_id": "36015D", - "deelgemeente_naam": "Beveren", - "gemeente_id": "36015", - "provincie_id": "30000" + "id": "36015D", + "naam": "Beveren", + "gemeente_niscode": "36015" }, { - "deelgemeente_id": "36019A", - "deelgemeente_naam": "Staden", - "gemeente_id": "36019", - "provincie_id": "30000" + "id": "36019A", + "naam": "Staden", + "gemeente_niscode": "36019" }, { - "deelgemeente_id": "36019B", - "deelgemeente_naam": "Oostnieuwkerke", - "gemeente_id": "36019", - "provincie_id": "30000" + "id": "36019B", + "naam": "Oostnieuwkerke", + "gemeente_niscode": "36019" }, { - "deelgemeente_id": "36019C", - "deelgemeente_naam": "Westrozebeke", - "gemeente_id": "36019", - "provincie_id": "30000" + "id": "36019C", + "naam": "Westrozebeke", + "gemeente_niscode": "36019" }, { - "deelgemeente_id": "37002A", - "deelgemeente_naam": "Dentergem", - "gemeente_id": "37002", - "provincie_id": "30000" + "id": "37002A", + "naam": "Dentergem", + "gemeente_niscode": "37002" }, { - "deelgemeente_id": "37002B", - "deelgemeente_naam": "Markegem", - "gemeente_id": "37002", - "provincie_id": "30000" + "id": "37002B", + "naam": "Markegem", + "gemeente_niscode": "37002" }, { - "deelgemeente_id": "37002C", - "deelgemeente_naam": "Oeselgem", - "gemeente_id": "37002", - "provincie_id": "30000" + "id": "37002C", + "naam": "Oeselgem", + "gemeente_niscode": "37002" }, { - "deelgemeente_id": "37002D", - "deelgemeente_naam": "Wakken", - "gemeente_id": "37002", - "provincie_id": "30000" + "id": "37002D", + "naam": "Wakken", + "gemeente_niscode": "37002" }, { - "deelgemeente_id": "37007A", - "deelgemeente_naam": "Meulebeke", - "gemeente_id": "37007", - "provincie_id": "30000" + "id": "37007A", + "naam": "Meulebeke", + "gemeente_niscode": "37007" }, { - "deelgemeente_id": "37010A", - "deelgemeente_naam": "Oostrozebeke", - "gemeente_id": "37010", - "provincie_id": "30000" + "id": "37010A", + "naam": "Oostrozebeke", + "gemeente_niscode": "37010" }, { - "deelgemeente_id": "37011A", - "deelgemeente_naam": "Pittem", - "gemeente_id": "37011", - "provincie_id": "30000" + "id": "37011A", + "naam": "Pittem", + "gemeente_niscode": "37011" }, { - "deelgemeente_id": "37011B", - "deelgemeente_naam": "Egem", - "gemeente_id": "37011", - "provincie_id": "30000" + "id": "37011B", + "naam": "Egem", + "gemeente_niscode": "37011" }, { - "deelgemeente_id": "37012A", - "deelgemeente_naam": "Ruiselede", - "gemeente_id": "37012", - "provincie_id": "30000" + "id": "37012A", + "naam": "Ruiselede", + "gemeente_niscode": "37012" }, { - "deelgemeente_id": "37015A", - "deelgemeente_naam": "Tielt", - "gemeente_id": "37015", - "provincie_id": "30000" + "id": "37015A", + "naam": "Tielt", + "gemeente_niscode": "37015" }, { - "deelgemeente_id": "37015B", - "deelgemeente_naam": "Schuiferskapelle", - "gemeente_id": "37015", - "provincie_id": "30000" + "id": "37015B", + "naam": "Schuiferskapelle", + "gemeente_niscode": "37015" }, { - "deelgemeente_id": "37015C", - "deelgemeente_naam": "Kanegem", - "gemeente_id": "37015", - "provincie_id": "30000" + "id": "37015C", + "naam": "Kanegem", + "gemeente_niscode": "37015" }, { - "deelgemeente_id": "37015D", - "deelgemeente_naam": "Aarsele", - "gemeente_id": "37015", - "provincie_id": "30000" + "id": "37015D", + "naam": "Aarsele", + "gemeente_niscode": "37015" }, { - "deelgemeente_id": "37017A", - "deelgemeente_naam": "Wielsbeke", - "gemeente_id": "37017", - "provincie_id": "30000" + "id": "37017A", + "naam": "Wielsbeke", + "gemeente_niscode": "37017" }, { - "deelgemeente_id": "37017B", - "deelgemeente_naam": "Ooigem", - "gemeente_id": "37017", - "provincie_id": "30000" + "id": "37017B", + "naam": "Ooigem", + "gemeente_niscode": "37017" }, { - "deelgemeente_id": "37017C", - "deelgemeente_naam": "Sint-Baafs-Vijve", - "gemeente_id": "37017", - "provincie_id": "30000" + "id": "37017C", + "naam": "Sint-Baafs-Vijve", + "gemeente_niscode": "37017" }, { - "deelgemeente_id": "37018A", - "deelgemeente_naam": "Wingene", - "gemeente_id": "37018", - "provincie_id": "30000" + "id": "37018A", + "naam": "Wingene", + "gemeente_niscode": "37018" }, { - "deelgemeente_id": "37018B", - "deelgemeente_naam": "Zwevezele", - "gemeente_id": "37018", - "provincie_id": "30000" + "id": "37018B", + "naam": "Zwevezele", + "gemeente_niscode": "37018" }, { - "deelgemeente_id": "37020A", - "deelgemeente_naam": "Ardooie", - "gemeente_id": "37020", - "provincie_id": "30000" + "id": "37020A", + "naam": "Ardooie", + "gemeente_niscode": "37020" }, { - "deelgemeente_id": "37020B", - "deelgemeente_naam": "Koolskamp", - "gemeente_id": "37020", - "provincie_id": "30000" + "id": "37020B", + "naam": "Koolskamp", + "gemeente_niscode": "37020" }, { - "deelgemeente_id": "38002A", - "deelgemeente_naam": "Alveringem", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002A", + "naam": "Alveringem", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002B", - "deelgemeente_naam": "Hoogstade", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002B", + "naam": "Hoogstade", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002C", - "deelgemeente_naam": "Leisele", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002C", + "naam": "Leisele", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002D", - "deelgemeente_naam": "Izenberge", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002D", + "naam": "Izenberge", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002E", - "deelgemeente_naam": "Gijverinkhove", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002E", + "naam": "Gijverinkhove", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002F", - "deelgemeente_naam": "Stavele", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002F", + "naam": "Stavele", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002G", - "deelgemeente_naam": "Beveren", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002G", + "naam": "Beveren", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002H", - "deelgemeente_naam": "Oeren", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002H", + "naam": "Oeren", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38002J", - "deelgemeente_naam": "Sint-Rijkers", - "gemeente_id": "38002", - "provincie_id": "30000" + "id": "38002J", + "naam": "Sint-Rijkers", + "gemeente_niscode": "38002" }, { - "deelgemeente_id": "38008A", - "deelgemeente_naam": "De Panne", - "gemeente_id": "38008", - "provincie_id": "30000" + "id": "38008A", + "naam": "De Panne", + "gemeente_niscode": "38008" }, { - "deelgemeente_id": "38008B", - "deelgemeente_naam": "Adinkerke", - "gemeente_id": "38008", - "provincie_id": "30000" + "id": "38008B", + "naam": "Adinkerke", + "gemeente_niscode": "38008" }, { - "deelgemeente_id": "38014A", - "deelgemeente_naam": "Koksijde", - "gemeente_id": "38014", - "provincie_id": "30000" + "id": "38014A", + "naam": "Koksijde", + "gemeente_niscode": "38014" }, { - "deelgemeente_id": "38014B", - "deelgemeente_naam": "Oostduinkerke", - "gemeente_id": "38014", - "provincie_id": "30000" + "id": "38014B", + "naam": "Oostduinkerke", + "gemeente_niscode": "38014" }, { - "deelgemeente_id": "38014C", - "deelgemeente_naam": "Wulpen", - "gemeente_id": "38014", - "provincie_id": "30000" + "id": "38014C", + "naam": "Wulpen", + "gemeente_niscode": "38014" }, { - "deelgemeente_id": "38016A", - "deelgemeente_naam": "Nieuwpoort", - "gemeente_id": "38016", - "provincie_id": "30000" + "id": "38016A", + "naam": "Nieuwpoort", + "gemeente_niscode": "38016" }, { - "deelgemeente_id": "38016B", - "deelgemeente_naam": "Sint-Joris", - "gemeente_id": "38016", - "provincie_id": "30000" + "id": "38016B", + "naam": "Sint-Joris", + "gemeente_niscode": "38016" }, { - "deelgemeente_id": "38016C", - "deelgemeente_naam": "Ramskapelle", - "gemeente_id": "38016", - "provincie_id": "30000" + "id": "38016C", + "naam": "Ramskapelle", + "gemeente_niscode": "38016" }, { - "deelgemeente_id": "38025A", - "deelgemeente_naam": "Veurne", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025A", + "naam": "Veurne", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025B", - "deelgemeente_naam": "Booitshoeke", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025B", + "naam": "Booitshoeke", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025C", - "deelgemeente_naam": "Avekapelle", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025C", + "naam": "Avekapelle", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025D", - "deelgemeente_naam": "Eggewaartskapelle", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025D", + "naam": "Eggewaartskapelle", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025E", - "deelgemeente_naam": "Zoutenaaie", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025E", + "naam": "Zoutenaaie", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025F", - "deelgemeente_naam": "Steenkerke", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025F", + "naam": "Steenkerke", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025G", - "deelgemeente_naam": "Bulskamp", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025G", + "naam": "Bulskamp", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025J", - "deelgemeente_naam": "Houtem", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025J", + "naam": "Houtem", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025K", - "deelgemeente_naam": "De Moeren", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025K", + "naam": "De Moeren", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025L", - "deelgemeente_naam": "Vinkem", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025L", + "naam": "Vinkem", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "38025M", - "deelgemeente_naam": "Wulveringem", - "gemeente_id": "38025", - "provincie_id": "30000" + "id": "38025M", + "naam": "Wulveringem", + "gemeente_niscode": "38025" }, { - "deelgemeente_id": "41002A", - "deelgemeente_naam": "Aalst", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002A", + "naam": "Aalst", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002B", - "deelgemeente_naam": "Hofstade", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002B", + "naam": "Hofstade", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002C", - "deelgemeente_naam": "Gijzegem", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002C", + "naam": "Gijzegem", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002D", - "deelgemeente_naam": "Herdersem", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002D", + "naam": "Herdersem", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002E", - "deelgemeente_naam": "Moorsel", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002E", + "naam": "Moorsel", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002F", - "deelgemeente_naam": "Baardegem", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002F", + "naam": "Baardegem", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002G", - "deelgemeente_naam": "Meldert", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002G", + "naam": "Meldert", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002H", - "deelgemeente_naam": "Erembodegem", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002H", + "naam": "Erembodegem", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41002J", - "deelgemeente_naam": "Nieuwerkerken", - "gemeente_id": "41002", - "provincie_id": "40000" + "id": "41002J", + "naam": "Nieuwerkerken", + "gemeente_niscode": "41002" }, { - "deelgemeente_id": "41011A", - "deelgemeente_naam": "Denderleeuw", - "gemeente_id": "41011", - "provincie_id": "40000" + "id": "41011A", + "naam": "Denderleeuw", + "gemeente_niscode": "41011" }, { - "deelgemeente_id": "41011B", - "deelgemeente_naam": "Iddergem", - "gemeente_id": "41011", - "provincie_id": "40000" + "id": "41011B", + "naam": "Iddergem", + "gemeente_niscode": "41011" }, { - "deelgemeente_id": "41011C", - "deelgemeente_naam": "Welle", - "gemeente_id": "41011", - "provincie_id": "40000" + "id": "41011C", + "naam": "Welle", + "gemeente_niscode": "41011" }, { - "deelgemeente_id": "41018A", - "deelgemeente_naam": "Geraardsbergen", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018A", + "naam": "Geraardsbergen", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018B", - "deelgemeente_naam": "Nederboelare", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018B", + "naam": "Nederboelare", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018C", - "deelgemeente_naam": "Onkerzele", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018C", + "naam": "Onkerzele", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018D", - "deelgemeente_naam": "Overboelare", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018D", + "naam": "Overboelare", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018E", - "deelgemeente_naam": "Goeferdinge", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018E", + "naam": "Goeferdinge", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018F", - "deelgemeente_naam": "Zarlardinge", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018F", + "naam": "Zarlardinge", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018G", - "deelgemeente_naam": "Schendelbeke", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018G", + "naam": "Schendelbeke", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018H", - "deelgemeente_naam": "Ophasselt", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018H", + "naam": "Ophasselt", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018J", - "deelgemeente_naam": "Smeerebbe-Vloerzegem", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018J", + "naam": "Smeerebbe-Vloerzegem", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018K", - "deelgemeente_naam": "Idegem", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018K", + "naam": "Idegem", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018L", - "deelgemeente_naam": "Grimminge", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018L", + "naam": "Grimminge", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018M", - "deelgemeente_naam": "Zandbergen", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018M", + "naam": "Zandbergen", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018N", - "deelgemeente_naam": "Nieuwenhove", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018N", + "naam": "Nieuwenhove", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018P", - "deelgemeente_naam": "Waarbeke", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018P", + "naam": "Waarbeke", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018R", - "deelgemeente_naam": "Moerbeke", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018R", + "naam": "Moerbeke", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41018S", - "deelgemeente_naam": "Viane", - "gemeente_id": "41018", - "provincie_id": "40000" + "id": "41018S", + "naam": "Viane", + "gemeente_niscode": "41018" }, { - "deelgemeente_id": "41024A", - "deelgemeente_naam": "Haaltert", - "gemeente_id": "41024", - "provincie_id": "40000" + "id": "41024A", + "naam": "Haaltert", + "gemeente_niscode": "41024" }, { - "deelgemeente_id": "41024B", - "deelgemeente_naam": "Denderhoutem", - "gemeente_id": "41024", - "provincie_id": "40000" + "id": "41024B", + "naam": "Denderhoutem", + "gemeente_niscode": "41024" }, { - "deelgemeente_id": "41024C", - "deelgemeente_naam": "Kerksken", - "gemeente_id": "41024", - "provincie_id": "40000" + "id": "41024C", + "naam": "Kerksken", + "gemeente_niscode": "41024" }, { - "deelgemeente_id": "41024D", - "deelgemeente_naam": "Heldergem", - "gemeente_id": "41024", - "provincie_id": "40000" + "id": "41024D", + "naam": "Heldergem", + "gemeente_niscode": "41024" }, { - "deelgemeente_id": "41027A", - "deelgemeente_naam": "Herzele", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027A", + "naam": "Herzele", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41027B", - "deelgemeente_naam": "Hillegem", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027B", + "naam": "Hillegem", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41027C", - "deelgemeente_naam": "Borsbeke", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027C", + "naam": "Borsbeke", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41027D", - "deelgemeente_naam": "Ressegem", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027D", + "naam": "Ressegem", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41027E", - "deelgemeente_naam": "Woubrechtegem", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027E", + "naam": "Woubrechtegem", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41027F", - "deelgemeente_naam": "Sint-Antelinks", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027F", + "naam": "Sint-Antelinks", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41027G", - "deelgemeente_naam": "Steenhuize-Wijnhuize", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027G", + "naam": "Steenhuize-Wijnhuize", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41027H", - "deelgemeente_naam": "Sint-Lievens-Esse", - "gemeente_id": "41027", - "provincie_id": "40000" + "id": "41027H", + "naam": "Sint-Lievens-Esse", + "gemeente_niscode": "41027" }, { - "deelgemeente_id": "41034A", - "deelgemeente_naam": "Lede", - "gemeente_id": "41034", - "provincie_id": "40000" + "id": "41034A", + "naam": "Lede", + "gemeente_niscode": "41034" }, { - "deelgemeente_id": "41034B", - "deelgemeente_naam": "Wanzele", - "gemeente_id": "41034", - "provincie_id": "40000" + "id": "41034B", + "naam": "Wanzele", + "gemeente_niscode": "41034" }, { - "deelgemeente_id": "41034C", - "deelgemeente_naam": "Impe", - "gemeente_id": "41034", - "provincie_id": "40000" + "id": "41034C", + "naam": "Impe", + "gemeente_niscode": "41034" }, { - "deelgemeente_id": "41034D", - "deelgemeente_naam": "Smetlede", - "gemeente_id": "41034", - "provincie_id": "40000" + "id": "41034D", + "naam": "Smetlede", + "gemeente_niscode": "41034" }, { - "deelgemeente_id": "41034E", - "deelgemeente_naam": "Oordegem", - "gemeente_id": "41034", - "provincie_id": "40000" + "id": "41034E", + "naam": "Oordegem", + "gemeente_niscode": "41034" }, { - "deelgemeente_id": "41048A", - "deelgemeente_naam": "Ninove", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048A", + "naam": "Ninove", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048B", - "deelgemeente_naam": "Okegem", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048B", + "naam": "Okegem", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048C", - "deelgemeente_naam": "Meerbeke", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048C", + "naam": "Meerbeke", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048D", - "deelgemeente_naam": "Neigem", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048D", + "naam": "Neigem", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048E", - "deelgemeente_naam": "Lieferinge", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048E", + "naam": "Lieferinge", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048F", - "deelgemeente_naam": "Denderwindeke", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048F", + "naam": "Denderwindeke", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048G", - "deelgemeente_naam": "Pollare", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048G", + "naam": "Pollare", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048H", - "deelgemeente_naam": "Appelterre-Eichem", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048H", + "naam": "Appelterre-Eichem", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048J", - "deelgemeente_naam": "Voorde", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048J", + "naam": "Voorde", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048K", - "deelgemeente_naam": "Aspelare", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048K", + "naam": "Aspelare", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048L", - "deelgemeente_naam": "Nederhasselt", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048L", + "naam": "Nederhasselt", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41048M", - "deelgemeente_naam": "Outer", - "gemeente_id": "41048", - "provincie_id": "40000" + "id": "41048M", + "naam": "Outer", + "gemeente_niscode": "41048" }, { - "deelgemeente_id": "41063A", - "deelgemeente_naam": "Sint-Lievens-Houtem", - "gemeente_id": "41063", - "provincie_id": "40000" + "id": "41063A", + "naam": "Sint-Lievens-Houtem", + "gemeente_niscode": "41063" }, { - "deelgemeente_id": "41063B", - "deelgemeente_naam": "Bavegem", - "gemeente_id": "41063", - "provincie_id": "40000" + "id": "41063B", + "naam": "Bavegem", + "gemeente_niscode": "41063" }, { - "deelgemeente_id": "41063C", - "deelgemeente_naam": "Letterhoutem", - "gemeente_id": "41063", - "provincie_id": "40000" + "id": "41063C", + "naam": "Letterhoutem", + "gemeente_niscode": "41063" }, { - "deelgemeente_id": "41063D", - "deelgemeente_naam": "Vlierzele", - "gemeente_id": "41063", - "provincie_id": "40000" + "id": "41063D", + "naam": "Vlierzele", + "gemeente_niscode": "41063" }, { - "deelgemeente_id": "41063E", - "deelgemeente_naam": "Zonnegem", - "gemeente_id": "41063", - "provincie_id": "40000" + "id": "41063E", + "naam": "Zonnegem", + "gemeente_niscode": "41063" }, { - "deelgemeente_id": "41081A", - "deelgemeente_naam": "Zottegem", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081A", + "naam": "Zottegem", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081B", - "deelgemeente_naam": "Elene", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081B", + "naam": "Elene", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081C", - "deelgemeente_naam": "Leeuwergem", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081C", + "naam": "Leeuwergem", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081D", - "deelgemeente_naam": "Grotenberge", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081D", + "naam": "Grotenberge", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081E", - "deelgemeente_naam": "Godveerdegem", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081E", + "naam": "Godveerdegem", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081F", - "deelgemeente_naam": "Erwetegem", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081F", + "naam": "Erwetegem", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081G", - "deelgemeente_naam": "Sint-Goriks-Oudenhove", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081G", + "naam": "Sint-Goriks-Oudenhove", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081H", - "deelgemeente_naam": "Strijpen", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081H", + "naam": "Strijpen", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081J", - "deelgemeente_naam": "Velzeke-Ruddershove", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081J", + "naam": "Velzeke-Ruddershove", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081K", - "deelgemeente_naam": "Sint-Maria-Oudenhove", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081K", + "naam": "Sint-Maria-Oudenhove", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41081L", - "deelgemeente_naam": "Oombergen", - "gemeente_id": "41081", - "provincie_id": "40000" + "id": "41081L", + "naam": "Oombergen", + "gemeente_niscode": "41081" }, { - "deelgemeente_id": "41082A", - "deelgemeente_naam": "Mere", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082A", + "naam": "Mere", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "41082B", - "deelgemeente_naam": "Erpe", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082B", + "naam": "Erpe", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "41082C", - "deelgemeente_naam": "Aaigem", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082C", + "naam": "Aaigem", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "41082D", - "deelgemeente_naam": "Burst", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082D", + "naam": "Burst", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "41082E", - "deelgemeente_naam": "Bambrugge", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082E", + "naam": "Bambrugge", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "41082F", - "deelgemeente_naam": "Ottergem", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082F", + "naam": "Ottergem", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "41082G", - "deelgemeente_naam": "Vlekkem", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082G", + "naam": "Vlekkem", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "41082H", - "deelgemeente_naam": "Erondegem", - "gemeente_id": "41082", - "provincie_id": "40000" + "id": "41082H", + "naam": "Erondegem", + "gemeente_niscode": "41082" }, { - "deelgemeente_id": "42003A", - "deelgemeente_naam": "Berlare", - "gemeente_id": "42003", - "provincie_id": "40000" + "id": "42003A", + "naam": "Berlare", + "gemeente_niscode": "42003" }, { - "deelgemeente_id": "42003B", - "deelgemeente_naam": "Uitbergen", - "gemeente_id": "42003", - "provincie_id": "40000" + "id": "42003B", + "naam": "Uitbergen", + "gemeente_niscode": "42003" }, { - "deelgemeente_id": "42003C", - "deelgemeente_naam": "Overmere", - "gemeente_id": "42003", - "provincie_id": "40000" + "id": "42003C", + "naam": "Overmere", + "gemeente_niscode": "42003" }, { - "deelgemeente_id": "42004A", - "deelgemeente_naam": "Buggenhout", - "gemeente_id": "42004", - "provincie_id": "40000" + "id": "42004A", + "naam": "Buggenhout", + "gemeente_niscode": "42004" }, { - "deelgemeente_id": "42004B", - "deelgemeente_naam": "Opdorp", - "gemeente_id": "42004", - "provincie_id": "40000" + "id": "42004B", + "naam": "Opdorp", + "gemeente_niscode": "42004" }, { - "deelgemeente_id": "42006A", - "deelgemeente_naam": "Dendermonde", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006A", + "naam": "Dendermonde", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42006B", - "deelgemeente_naam": "Appels", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006B", + "naam": "Appels", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42006C", - "deelgemeente_naam": "Sint-Gillis-bij-Dendermonde", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006C", + "naam": "Sint-Gillis-bij-Dendermonde", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42006D", - "deelgemeente_naam": "Grembergen", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006D", + "naam": "Grembergen", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42006E", - "deelgemeente_naam": "Baasrode", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006E", + "naam": "Baasrode", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42006F", - "deelgemeente_naam": "Oudegem", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006F", + "naam": "Oudegem", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42006G", - "deelgemeente_naam": "Mespelare", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006G", + "naam": "Mespelare", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42006H", - "deelgemeente_naam": "Schoonaarde", - "gemeente_id": "42006", - "provincie_id": "40000" + "id": "42006H", + "naam": "Schoonaarde", + "gemeente_niscode": "42006" }, { - "deelgemeente_id": "42008A", - "deelgemeente_naam": "Hamme", - "gemeente_id": "42008", - "provincie_id": "40000" + "id": "42008A", + "naam": "Hamme", + "gemeente_niscode": "42008" }, { - "deelgemeente_id": "42008B", - "deelgemeente_naam": "Moerzeke", - "gemeente_id": "42008", - "provincie_id": "40000" + "id": "42008B", + "naam": "Moerzeke", + "gemeente_niscode": "42008" }, { - "deelgemeente_id": "42010A", - "deelgemeente_naam": "Laarne", - "gemeente_id": "42010", - "provincie_id": "40000" + "id": "42010A", + "naam": "Laarne", + "gemeente_niscode": "42010" }, { - "deelgemeente_id": "42010B", - "deelgemeente_naam": "Kalken", - "gemeente_id": "42010", - "provincie_id": "40000" + "id": "42010B", + "naam": "Kalken", + "gemeente_niscode": "42010" }, { - "deelgemeente_id": "42011A", - "deelgemeente_naam": "Lebbeke", - "gemeente_id": "42011", - "provincie_id": "40000" + "id": "42011A", + "naam": "Lebbeke", + "gemeente_niscode": "42011" }, { - "deelgemeente_id": "42011B", - "deelgemeente_naam": "Wieze", - "gemeente_id": "42011", - "provincie_id": "40000" + "id": "42011B", + "naam": "Wieze", + "gemeente_niscode": "42011" }, { - "deelgemeente_id": "42011C", - "deelgemeente_naam": "Denderbelle", - "gemeente_id": "42011", - "provincie_id": "40000" + "id": "42011C", + "naam": "Denderbelle", + "gemeente_niscode": "42011" }, { - "deelgemeente_id": "42023A", - "deelgemeente_naam": "Waasmunster", - "gemeente_id": "42023", - "provincie_id": "40000" + "id": "42023A", + "naam": "Waasmunster", + "gemeente_niscode": "42023" }, { - "deelgemeente_id": "42025A", - "deelgemeente_naam": "Wetteren", - "gemeente_id": "42025", - "provincie_id": "40000" + "id": "42025A", + "naam": "Wetteren", + "gemeente_niscode": "42025" }, { - "deelgemeente_id": "42025B", - "deelgemeente_naam": "Massemen", - "gemeente_id": "42025", - "provincie_id": "40000" + "id": "42025B", + "naam": "Massemen", + "gemeente_niscode": "42025" }, { - "deelgemeente_id": "42025C", - "deelgemeente_naam": "Westrem", - "gemeente_id": "42025", - "provincie_id": "40000" + "id": "42025C", + "naam": "Westrem", + "gemeente_niscode": "42025" }, { - "deelgemeente_id": "42026A", - "deelgemeente_naam": "Wichelen", - "gemeente_id": "42026", - "provincie_id": "40000" + "id": "42026A", + "naam": "Wichelen", + "gemeente_niscode": "42026" }, { - "deelgemeente_id": "42026B", - "deelgemeente_naam": "Serskamp", - "gemeente_id": "42026", - "provincie_id": "40000" + "id": "42026B", + "naam": "Serskamp", + "gemeente_niscode": "42026" }, { - "deelgemeente_id": "42026C", - "deelgemeente_naam": "Schellebelle", - "gemeente_id": "42026", - "provincie_id": "40000" + "id": "42026C", + "naam": "Schellebelle", + "gemeente_niscode": "42026" }, { - "deelgemeente_id": "42028A", - "deelgemeente_naam": "Zele", - "gemeente_id": "42028", - "provincie_id": "40000" + "id": "42028A", + "naam": "Zele", + "gemeente_niscode": "42028" }, { - "deelgemeente_id": "43002A", - "deelgemeente_naam": "Assenede", - "gemeente_id": "43002", - "provincie_id": "40000" + "id": "43002A", + "naam": "Assenede", + "gemeente_niscode": "43002" }, { - "deelgemeente_id": "43002B", - "deelgemeente_naam": "Oosteeklo", - "gemeente_id": "43002", - "provincie_id": "40000" + "id": "43002B", + "naam": "Oosteeklo", + "gemeente_niscode": "43002" }, { - "deelgemeente_id": "43002C", - "deelgemeente_naam": "Bassevelde", - "gemeente_id": "43002", - "provincie_id": "40000" + "id": "43002C", + "naam": "Bassevelde", + "gemeente_niscode": "43002" }, { - "deelgemeente_id": "43002D", - "deelgemeente_naam": "Boekhoute", - "gemeente_id": "43002", - "provincie_id": "40000" + "id": "43002D", + "naam": "Boekhoute", + "gemeente_niscode": "43002" }, { - "deelgemeente_id": "43005A", - "deelgemeente_naam": "Eeklo", - "gemeente_id": "43005", - "provincie_id": "40000" + "id": "43005A", + "naam": "Eeklo", + "gemeente_niscode": "43005" }, { - "deelgemeente_id": "43007A", - "deelgemeente_naam": "Kaprijke", - "gemeente_id": "43007", - "provincie_id": "40000" + "id": "43007A", + "naam": "Kaprijke", + "gemeente_niscode": "43007" }, { - "deelgemeente_id": "43007B", - "deelgemeente_naam": "Lembeke", - "gemeente_id": "43007", - "provincie_id": "40000" + "id": "43007B", + "naam": "Lembeke", + "gemeente_niscode": "43007" }, { - "deelgemeente_id": "43010A", - "deelgemeente_naam": "Maldegem", - "gemeente_id": "43010", - "provincie_id": "40000" + "id": "43010A", + "naam": "Maldegem", + "gemeente_niscode": "43010" }, { - "deelgemeente_id": "43010B", - "deelgemeente_naam": "Middelburg", - "gemeente_id": "43010", - "provincie_id": "40000" + "id": "43010B", + "naam": "Middelburg", + "gemeente_niscode": "43010" }, { - "deelgemeente_id": "43010C", - "deelgemeente_naam": "Adegem", - "gemeente_id": "43010", - "provincie_id": "40000" + "id": "43010C", + "naam": "Adegem", + "gemeente_niscode": "43010" }, { - "deelgemeente_id": "43014A", - "deelgemeente_naam": "Sint-Laureins", - "gemeente_id": "43014", - "provincie_id": "40000" + "id": "43014A", + "naam": "Sint-Laureins", + "gemeente_niscode": "43014" }, { - "deelgemeente_id": "43014B", - "deelgemeente_naam": "Sint-Margriete", - "gemeente_id": "43014", - "provincie_id": "40000" + "id": "43014B", + "naam": "Sint-Margriete", + "gemeente_niscode": "43014" }, { - "deelgemeente_id": "43014C", - "deelgemeente_naam": "Sint-Jan-in-Eremo", - "gemeente_id": "43014", - "provincie_id": "40000" + "id": "43014C", + "naam": "Sint-Jan-in-Eremo", + "gemeente_niscode": "43014" }, { - "deelgemeente_id": "43014D", - "deelgemeente_naam": "Waterland-Oudeman", - "gemeente_id": "43014", - "provincie_id": "40000" + "id": "43014D", + "naam": "Waterland-Oudeman", + "gemeente_niscode": "43014" }, { - "deelgemeente_id": "43014E", - "deelgemeente_naam": "Watervliet", - "gemeente_id": "43014", - "provincie_id": "40000" + "id": "43014E", + "naam": "Watervliet", + "gemeente_niscode": "43014" }, { - "deelgemeente_id": "43018A", - "deelgemeente_naam": "Zelzate", - "gemeente_id": "43018", - "provincie_id": "40000" + "id": "43018A", + "naam": "Zelzate", + "gemeente_niscode": "43018" }, { - "deelgemeente_id": "44084A", - "deelgemeente_naam": "Aalter", - "gemeente_id": "44084", - "provincie_id": "40000" + "id": "44084A", + "naam": "Aalter", + "gemeente_niscode": "44084" }, { - "deelgemeente_id": "44084B", - "deelgemeente_naam": "Bellem", - "gemeente_id": "44084", - "provincie_id": "40000" + "id": "44084B", + "naam": "Bellem", + "gemeente_niscode": "44084" }, { - "deelgemeente_id": "44084C", - "deelgemeente_naam": "Lotenhulle", - "gemeente_id": "44084", - "provincie_id": "40000" + "id": "44084C", + "naam": "Lotenhulle", + "gemeente_niscode": "44084" }, { - "deelgemeente_id": "44084D", - "deelgemeente_naam": "Poeke", - "gemeente_id": "44084", - "provincie_id": "40000" + "id": "44084D", + "naam": "Poeke", + "gemeente_niscode": "44084" }, { - "deelgemeente_id": "44084E", - "deelgemeente_naam": "Knesselare", - "gemeente_id": "44084", - "provincie_id": "40000" + "id": "44084E", + "naam": "Knesselare", + "gemeente_niscode": "44084" }, { - "deelgemeente_id": "44084F", - "deelgemeente_naam": "Ursel", - "gemeente_id": "44084", - "provincie_id": "40000" + "id": "44084F", + "naam": "Ursel", + "gemeente_niscode": "44084" }, { - "deelgemeente_id": "44083A", - "deelgemeente_naam": "Deinze", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083A", + "naam": "Deinze", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083B", - "deelgemeente_naam": "Astene", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083B", + "naam": "Astene", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083C", - "deelgemeente_naam": "Petegem-aan-de-Leie", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083C", + "naam": "Petegem-aan-de-Leie", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083D", - "deelgemeente_naam": "Zeveren", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083D", + "naam": "Zeveren", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083E", - "deelgemeente_naam": "Grammene", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083E", + "naam": "Grammene", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083F", - "deelgemeente_naam": "Gottem", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083F", + "naam": "Gottem", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083G", - "deelgemeente_naam": "Wontergem", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083G", + "naam": "Wontergem", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083H", - "deelgemeente_naam": "Vinkt", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083H", + "naam": "Vinkt", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083I", - "deelgemeente_naam": "Meigem", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083I", + "naam": "Meigem", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083J", - "deelgemeente_naam": "Bachte-Maria-Leerne", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083J", + "naam": "Bachte-Maria-Leerne", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083K", - "deelgemeente_naam": "Sint-Martens-Leerne", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083K", + "naam": "Sint-Martens-Leerne", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083L", - "deelgemeente_naam": "Nevele", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083L", + "naam": "Nevele", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083M", - "deelgemeente_naam": "Poesele", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083M", + "naam": "Poesele", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083N", - "deelgemeente_naam": "Hansbeke", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083N", + "naam": "Hansbeke", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083O", - "deelgemeente_naam": "Merendree", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083O", + "naam": "Merendree", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083P", - "deelgemeente_naam": "Landegem", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083P", + "naam": "Landegem", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44083Q", - "deelgemeente_naam": "Vosselare", - "gemeente_id": "44083", - "provincie_id": "40000" + "id": "44083Q", + "naam": "Vosselare", + "gemeente_niscode": "44083" }, { - "deelgemeente_id": "44012A", - "deelgemeente_naam": "De Pinte", - "gemeente_id": "44012", - "provincie_id": "40000" + "id": "44012A", + "naam": "De Pinte", + "gemeente_niscode": "44012" }, { - "deelgemeente_id": "44012B", - "deelgemeente_naam": "Zevergem", - "gemeente_id": "44012", - "provincie_id": "40000" + "id": "44012B", + "naam": "Zevergem", + "gemeente_niscode": "44012" }, { - "deelgemeente_id": "44013A", - "deelgemeente_naam": "Destelbergen", - "gemeente_id": "44013", - "provincie_id": "40000" + "id": "44013A", + "naam": "Destelbergen", + "gemeente_niscode": "44013" }, { - "deelgemeente_id": "44013B", - "deelgemeente_naam": "Heusden", - "gemeente_id": "44013", - "provincie_id": "40000" + "id": "44013B", + "naam": "Heusden", + "gemeente_niscode": "44013" }, { - "deelgemeente_id": "44019A", - "deelgemeente_naam": "Evergem", - "gemeente_id": "44019", - "provincie_id": "40000" + "id": "44019A", + "naam": "Evergem", + "gemeente_niscode": "44019" }, { - "deelgemeente_id": "44019B", - "deelgemeente_naam": "Sleidinge", - "gemeente_id": "44019", - "provincie_id": "40000" + "id": "44019B", + "naam": "Sleidinge", + "gemeente_niscode": "44019" }, { - "deelgemeente_id": "44019C", - "deelgemeente_naam": "Ertvelde", - "gemeente_id": "44019", - "provincie_id": "40000" + "id": "44019C", + "naam": "Ertvelde", + "gemeente_niscode": "44019" }, { - "deelgemeente_id": "44019D", - "deelgemeente_naam": "Kluizen", - "gemeente_id": "44019", - "provincie_id": "40000" + "id": "44019D", + "naam": "Kluizen", + "gemeente_niscode": "44019" }, { - "deelgemeente_id": "44020A", - "deelgemeente_naam": "Gavere", - "gemeente_id": "44020", - "provincie_id": "40000" + "id": "44020A", + "naam": "Gavere", + "gemeente_niscode": "44020" }, { - "deelgemeente_id": "44020B", - "deelgemeente_naam": "Semmerzake", - "gemeente_id": "44020", - "provincie_id": "40000" + "id": "44020B", + "naam": "Semmerzake", + "gemeente_niscode": "44020" }, { - "deelgemeente_id": "44020C", - "deelgemeente_naam": "Vurste", - "gemeente_id": "44020", - "provincie_id": "40000" + "id": "44020C", + "naam": "Vurste", + "gemeente_niscode": "44020" }, { - "deelgemeente_id": "44020D", - "deelgemeente_naam": "Baaigem", - "gemeente_id": "44020", - "provincie_id": "40000" + "id": "44020D", + "naam": "Baaigem", + "gemeente_niscode": "44020" }, { - "deelgemeente_id": "44020E", - "deelgemeente_naam": "Dikkelvenne", - "gemeente_id": "44020", - "provincie_id": "40000" + "id": "44020E", + "naam": "Dikkelvenne", + "gemeente_niscode": "44020" }, { - "deelgemeente_id": "44020F", - "deelgemeente_naam": "Asper", - "gemeente_id": "44020", - "provincie_id": "40000" + "id": "44020F", + "naam": "Asper", + "gemeente_niscode": "44020" }, { - "deelgemeente_id": "44021A", - "deelgemeente_naam": "Gent", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021A", + "naam": "Gent", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021C", - "deelgemeente_naam": "Sint-Denijs-Westrem", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021C", + "naam": "Sint-Denijs-Westrem", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021D", - "deelgemeente_naam": "Oostakker", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021D", + "naam": "Oostakker", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021E", - "deelgemeente_naam": "Sint-Amandsberg", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021E", + "naam": "Sint-Amandsberg", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021F", - "deelgemeente_naam": "Gentbrugge", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021F", + "naam": "Gentbrugge", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021G", - "deelgemeente_naam": "Ledeberg", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021G", + "naam": "Ledeberg", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021H", - "deelgemeente_naam": "Zwijnaarde", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021H", + "naam": "Zwijnaarde", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021J", - "deelgemeente_naam": "Afsnee", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021J", + "naam": "Afsnee", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021K", - "deelgemeente_naam": "Drongen", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021K", + "naam": "Drongen", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021L", - "deelgemeente_naam": "Mariakerke", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021L", + "naam": "Mariakerke", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021M", - "deelgemeente_naam": "Wondelgem", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021M", + "naam": "Wondelgem", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021N", - "deelgemeente_naam": "Desteldonk", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021N", + "naam": "Desteldonk", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021O", - "deelgemeente_naam": "Mendonk", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021O", + "naam": "Mendonk", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44021P", - "deelgemeente_naam": "Sint-Kruis-Winkel", - "gemeente_id": "44021", - "provincie_id": "40000" + "id": "44021P", + "naam": "Sint-Kruis-Winkel", + "gemeente_niscode": "44021" }, { - "deelgemeente_id": "44034A", - "deelgemeente_naam": "Lochristi", - "gemeente_id": "44034", - "provincie_id": "40000" + "id": "44034A", + "naam": "Lochristi", + "gemeente_niscode": "44034" }, { - "deelgemeente_id": "44034B", - "deelgemeente_naam": "Zaffelare", - "gemeente_id": "44034", - "provincie_id": "40000" + "id": "44034B", + "naam": "Zaffelare", + "gemeente_niscode": "44034" }, { - "deelgemeente_id": "44034C", - "deelgemeente_naam": "Zeveneken", - "gemeente_id": "44034", - "provincie_id": "40000" + "id": "44034C", + "naam": "Zeveneken", + "gemeente_niscode": "44034" }, { - "deelgemeente_id": "44034D", - "deelgemeente_naam": "Beervelde", - "gemeente_id": "44034", - "provincie_id": "40000" + "id": "44034D", + "naam": "Beervelde", + "gemeente_niscode": "44034" }, { - "deelgemeente_id": "44040A", - "deelgemeente_naam": "Melle", - "gemeente_id": "44040", - "provincie_id": "40000" + "id": "44040A", + "naam": "Melle", + "gemeente_niscode": "44040" }, { - "deelgemeente_id": "44040B", - "deelgemeente_naam": "Gontrode", - "gemeente_id": "44040", - "provincie_id": "40000" + "id": "44040B", + "naam": "Gontrode", + "gemeente_niscode": "44040" }, { - "deelgemeente_id": "44043A", - "deelgemeente_naam": "Merelbeke", - "gemeente_id": "44043", - "provincie_id": "40000" + "id": "44043A", + "naam": "Merelbeke", + "gemeente_niscode": "44043" }, { - "deelgemeente_id": "44043B", - "deelgemeente_naam": "Bottelare", - "gemeente_id": "44043", - "provincie_id": "40000" + "id": "44043B", + "naam": "Bottelare", + "gemeente_niscode": "44043" }, { - "deelgemeente_id": "44043C", - "deelgemeente_naam": "Munte", - "gemeente_id": "44043", - "provincie_id": "40000" + "id": "44043C", + "naam": "Munte", + "gemeente_niscode": "44043" }, { - "deelgemeente_id": "44043D", - "deelgemeente_naam": "Schelderode", - "gemeente_id": "44043", - "provincie_id": "40000" + "id": "44043D", + "naam": "Schelderode", + "gemeente_niscode": "44043" }, { - "deelgemeente_id": "44043E", - "deelgemeente_naam": "Melsen", - "gemeente_id": "44043", - "provincie_id": "40000" + "id": "44043E", + "naam": "Melsen", + "gemeente_niscode": "44043" }, { - "deelgemeente_id": "44043F", - "deelgemeente_naam": "Lemberge", - "gemeente_id": "44043", - "provincie_id": "40000" + "id": "44043F", + "naam": "Lemberge", + "gemeente_niscode": "44043" }, { - "deelgemeente_id": "44045A", - "deelgemeente_naam": "Moerbeke", - "gemeente_id": "44045", - "provincie_id": "40000" + "id": "44045A", + "naam": "Moerbeke", + "gemeente_niscode": "44045" }, { - "deelgemeente_id": "44048A", - "deelgemeente_naam": "Nazareth", - "gemeente_id": "44048", - "provincie_id": "40000" + "id": "44048A", + "naam": "Nazareth", + "gemeente_niscode": "44048" }, { - "deelgemeente_id": "44048B", - "deelgemeente_naam": "Eke", - "gemeente_id": "44048", - "provincie_id": "40000" + "id": "44048B", + "naam": "Eke", + "gemeente_niscode": "44048" }, { - "deelgemeente_id": "44052A", - "deelgemeente_naam": "Oosterzele", - "gemeente_id": "44052", - "provincie_id": "40000" + "id": "44052A", + "naam": "Oosterzele", + "gemeente_niscode": "44052" }, { - "deelgemeente_id": "44052B", - "deelgemeente_naam": "Balegem", - "gemeente_id": "44052", - "provincie_id": "40000" + "id": "44052B", + "naam": "Balegem", + "gemeente_niscode": "44052" }, { - "deelgemeente_id": "44052C", - "deelgemeente_naam": "Scheldewindeke", - "gemeente_id": "44052", - "provincie_id": "40000" + "id": "44052C", + "naam": "Scheldewindeke", + "gemeente_niscode": "44052" }, { - "deelgemeente_id": "44052D", - "deelgemeente_naam": "Moortsele", - "gemeente_id": "44052", - "provincie_id": "40000" + "id": "44052D", + "naam": "Moortsele", + "gemeente_niscode": "44052" }, { - "deelgemeente_id": "44052E", - "deelgemeente_naam": "Landskouter", - "gemeente_id": "44052", - "provincie_id": "40000" + "id": "44052E", + "naam": "Landskouter", + "gemeente_niscode": "44052" }, { - "deelgemeente_id": "44052F", - "deelgemeente_naam": "Gijzenzele", - "gemeente_id": "44052", - "provincie_id": "40000" + "id": "44052F", + "naam": "Gijzenzele", + "gemeente_niscode": "44052" }, { - "deelgemeente_id": "44064A", - "deelgemeente_naam": "Sint-Martens-Latem", - "gemeente_id": "44064", - "provincie_id": "40000" + "id": "44064A", + "naam": "Sint-Martens-Latem", + "gemeente_niscode": "44064" }, { - "deelgemeente_id": "44064B", - "deelgemeente_naam": "Deurle", - "gemeente_id": "44064", - "provincie_id": "40000" + "id": "44064B", + "naam": "Deurle", + "gemeente_niscode": "44064" }, { - "deelgemeente_id": "44073A", - "deelgemeente_naam": "Wachtebeke", - "gemeente_id": "44073", - "provincie_id": "40000" + "id": "44073A", + "naam": "Wachtebeke", + "gemeente_niscode": "44073" }, { - "deelgemeente_id": "44085A", - "deelgemeente_naam": "Waarschoot", - "gemeente_id": "44085", - "provincie_id": "40000" + "id": "44085A", + "naam": "Waarschoot", + "gemeente_niscode": "44085" }, { - "deelgemeente_id": "44085B", - "deelgemeente_naam": "Lovendegem", - "gemeente_id": "44085", - "provincie_id": "40000" + "id": "44085B", + "naam": "Lovendegem", + "gemeente_niscode": "44085" }, { - "deelgemeente_id": "44085C", - "deelgemeente_naam": "Vinderhoute", - "gemeente_id": "44085", - "provincie_id": "40000" + "id": "44085C", + "naam": "Vinderhoute", + "gemeente_niscode": "44085" }, { - "deelgemeente_id": "44085D", - "deelgemeente_naam": "Zomergem", - "gemeente_id": "44085", - "provincie_id": "40000" + "id": "44085D", + "naam": "Zomergem", + "gemeente_niscode": "44085" }, { - "deelgemeente_id": "44085E", - "deelgemeente_naam": "Ronsele", - "gemeente_id": "44085", - "provincie_id": "40000" + "id": "44085E", + "naam": "Ronsele", + "gemeente_niscode": "44085" }, { - "deelgemeente_id": "44085F", - "deelgemeente_naam": "Oostwinkel", - "gemeente_id": "44085", - "provincie_id": "40000" + "id": "44085F", + "naam": "Oostwinkel", + "gemeente_niscode": "44085" }, { - "deelgemeente_id": "44081A", - "deelgemeente_naam": "Zulte", - "gemeente_id": "44081", - "provincie_id": "40000" + "id": "44081A", + "naam": "Zulte", + "gemeente_niscode": "44081" }, { - "deelgemeente_id": "44081B", - "deelgemeente_naam": "Olsene", - "gemeente_id": "44081", - "provincie_id": "40000" + "id": "44081B", + "naam": "Olsene", + "gemeente_niscode": "44081" }, { - "deelgemeente_id": "44081C", - "deelgemeente_naam": "Machelen", - "gemeente_id": "44081", - "provincie_id": "40000" + "id": "44081C", + "naam": "Machelen", + "gemeente_niscode": "44081" }, { - "deelgemeente_id": "45068A", - "deelgemeente_naam": "Kruishoutem", - "gemeente_id": "45068", - "provincie_id": "40000" + "id": "45068A", + "naam": "Kruishoutem", + "gemeente_niscode": "45068" }, { - "deelgemeente_id": "45068B", - "deelgemeente_naam": "Wannegem-Lede", - "gemeente_id": "45068", - "provincie_id": "40000" + "id": "45068B", + "naam": "Wannegem-Lede", + "gemeente_niscode": "45068" }, { - "deelgemeente_id": "45068C", - "deelgemeente_naam": "Nokere", - "gemeente_id": "45068", - "provincie_id": "40000" + "id": "45068C", + "naam": "Nokere", + "gemeente_niscode": "45068" }, { - "deelgemeente_id": "45068D", - "deelgemeente_naam": "Zingem", - "gemeente_id": "45068", - "provincie_id": "40000" + "id": "45068D", + "naam": "Zingem", + "gemeente_niscode": "45068" }, { - "deelgemeente_id": "45068E", - "deelgemeente_naam": "Ouwegem", - "gemeente_id": "45068", - "provincie_id": "40000" + "id": "45068E", + "naam": "Ouwegem", + "gemeente_niscode": "45068" }, { - "deelgemeente_id": "45068F", - "deelgemeente_naam": "Huise", - "gemeente_id": "45068", - "provincie_id": "40000" + "id": "45068F", + "naam": "Huise", + "gemeente_niscode": "45068" }, { - "deelgemeente_id": "45035A", - "deelgemeente_naam": "Oudenaarde", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035A", + "naam": "Oudenaarde", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035B", - "deelgemeente_naam": "Heurne", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035B", + "naam": "Heurne", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035C", - "deelgemeente_naam": "Welden", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035C", + "naam": "Welden", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035D", - "deelgemeente_naam": "Mater", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035D", + "naam": "Mater", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035E", - "deelgemeente_naam": "Melden", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035E", + "naam": "Melden", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035F", - "deelgemeente_naam": "Mullem", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035F", + "naam": "Mullem", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035G", - "deelgemeente_naam": "Bevere", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035G", + "naam": "Bevere", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035H", - "deelgemeente_naam": "Edelare", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035H", + "naam": "Edelare", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035I", - "deelgemeente_naam": "Eine", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035I", + "naam": "Eine", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035J", - "deelgemeente_naam": "Ename", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035J", + "naam": "Ename", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035K", - "deelgemeente_naam": "Leupegem", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035K", + "naam": "Leupegem", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035L", - "deelgemeente_naam": "Nederename", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035L", + "naam": "Nederename", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45035M", - "deelgemeente_naam": "Volkegem", - "gemeente_id": "45035", - "provincie_id": "40000" + "id": "45035M", + "naam": "Volkegem", + "gemeente_niscode": "45035" }, { - "deelgemeente_id": "45041A", - "deelgemeente_naam": "Ronse", - "gemeente_id": "45041", - "provincie_id": "40000" + "id": "45041A", + "naam": "Ronse", + "gemeente_niscode": "45041" }, { - "deelgemeente_id": "45059A", - "deelgemeente_naam": "Nederbrakel", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059A", + "naam": "Nederbrakel", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45059B", - "deelgemeente_naam": "Opbrakel", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059B", + "naam": "Opbrakel", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45059C", - "deelgemeente_naam": "Zegelsem", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059C", + "naam": "Zegelsem", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45059D", - "deelgemeente_naam": "Elst", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059D", + "naam": "Elst", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45059E", - "deelgemeente_naam": "Michelbeke", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059E", + "naam": "Michelbeke", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45059F", - "deelgemeente_naam": "Parike", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059F", + "naam": "Parike", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45059G", - "deelgemeente_naam": "Everbeek", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059G", + "naam": "Everbeek", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45059H", - "deelgemeente_naam": "Sint-Maria-Oudenhove", - "gemeente_id": "45059", - "provincie_id": "40000" + "id": "45059H", + "naam": "Sint-Maria-Oudenhove", + "gemeente_niscode": "45059" }, { - "deelgemeente_id": "45060A", - "deelgemeente_naam": "Ruien", - "gemeente_id": "45060", - "provincie_id": "40000" + "id": "45060A", + "naam": "Ruien", + "gemeente_niscode": "45060" }, { - "deelgemeente_id": "45060B", - "deelgemeente_naam": "Berchem", - "gemeente_id": "45060", - "provincie_id": "40000" + "id": "45060B", + "naam": "Berchem", + "gemeente_niscode": "45060" }, { - "deelgemeente_id": "45060C", - "deelgemeente_naam": "Kwaremont", - "gemeente_id": "45060", - "provincie_id": "40000" + "id": "45060C", + "naam": "Kwaremont", + "gemeente_niscode": "45060" }, { - "deelgemeente_id": "45060D", - "deelgemeente_naam": "Zulzeke", - "gemeente_id": "45060", - "provincie_id": "40000" + "id": "45060D", + "naam": "Zulzeke", + "gemeente_niscode": "45060" }, { - "deelgemeente_id": "45061A", - "deelgemeente_naam": "Petegem-aan-de-Schelde", - "gemeente_id": "45061", - "provincie_id": "40000" + "id": "45061A", + "naam": "Petegem-aan-de-Schelde", + "gemeente_niscode": "45061" }, { - "deelgemeente_id": "45061B", - "deelgemeente_naam": "Wortegem", - "gemeente_id": "45061", - "provincie_id": "40000" + "id": "45061B", + "naam": "Wortegem", + "gemeente_niscode": "45061" }, { - "deelgemeente_id": "45061C", - "deelgemeente_naam": "Moregem", - "gemeente_id": "45061", - "provincie_id": "40000" + "id": "45061C", + "naam": "Moregem", + "gemeente_niscode": "45061" }, { - "deelgemeente_id": "45061D", - "deelgemeente_naam": "Elsegem", - "gemeente_id": "45061", - "provincie_id": "40000" + "id": "45061D", + "naam": "Elsegem", + "gemeente_niscode": "45061" }, { - "deelgemeente_id": "45061E", - "deelgemeente_naam": "Ooike", - "gemeente_id": "45061", - "provincie_id": "40000" + "id": "45061E", + "naam": "Ooike", + "gemeente_niscode": "45061" }, { - "deelgemeente_id": "45062A", - "deelgemeente_naam": "Sint-Maria-Horebeke", - "gemeente_id": "45062", - "provincie_id": "40000" + "id": "45062A", + "naam": "Sint-Maria-Horebeke", + "gemeente_niscode": "45062" }, { - "deelgemeente_id": "45062B", - "deelgemeente_naam": "Sint-Kornelis-Horebeke", - "gemeente_id": "45062", - "provincie_id": "40000" + "id": "45062B", + "naam": "Sint-Kornelis-Horebeke", + "gemeente_niscode": "45062" }, { - "deelgemeente_id": "45063A", - "deelgemeente_naam": "Sint-Maria-Lierde", - "gemeente_id": "45063", - "provincie_id": "40000" + "id": "45063A", + "naam": "Sint-Maria-Lierde", + "gemeente_niscode": "45063" }, { - "deelgemeente_id": "45063B", - "deelgemeente_naam": "Hemelveerdegem", - "gemeente_id": "45063", - "provincie_id": "40000" + "id": "45063B", + "naam": "Hemelveerdegem", + "gemeente_niscode": "45063" }, { - "deelgemeente_id": "45063C", - "deelgemeente_naam": "Deftinge", - "gemeente_id": "45063", - "provincie_id": "40000" + "id": "45063C", + "naam": "Deftinge", + "gemeente_niscode": "45063" }, { - "deelgemeente_id": "45063D", - "deelgemeente_naam": "Sint-Martens-Lierde", - "gemeente_id": "45063", - "provincie_id": "40000" + "id": "45063D", + "naam": "Sint-Martens-Lierde", + "gemeente_niscode": "45063" }, { - "deelgemeente_id": "45064A", - "deelgemeente_naam": "Etikhove", - "gemeente_id": "45064", - "provincie_id": "40000" + "id": "45064A", + "naam": "Etikhove", + "gemeente_niscode": "45064" }, { - "deelgemeente_id": "45064B", - "deelgemeente_naam": "Nukerke", - "gemeente_id": "45064", - "provincie_id": "40000" + "id": "45064B", + "naam": "Nukerke", + "gemeente_niscode": "45064" }, { - "deelgemeente_id": "45064C", - "deelgemeente_naam": "Maarke-Kerkem", - "gemeente_id": "45064", - "provincie_id": "40000" + "id": "45064C", + "naam": "Maarke-Kerkem", + "gemeente_niscode": "45064" }, { - "deelgemeente_id": "45064D", - "deelgemeente_naam": "Schorisse", - "gemeente_id": "45064", - "provincie_id": "40000" + "id": "45064D", + "naam": "Schorisse", + "gemeente_niscode": "45064" }, { - "deelgemeente_id": "45065A", - "deelgemeente_naam": "Munkzwalm", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065A", + "naam": "Munkzwalm", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065B", - "deelgemeente_naam": "Paulatem", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065B", + "naam": "Paulatem", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065C", - "deelgemeente_naam": "Sint-Maria-Latem", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065C", + "naam": "Sint-Maria-Latem", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065D", - "deelgemeente_naam": "Meilegem", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065D", + "naam": "Meilegem", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065E", - "deelgemeente_naam": "Beerlegem", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065E", + "naam": "Beerlegem", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065F", - "deelgemeente_naam": "Dikkele", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065F", + "naam": "Dikkele", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065G", - "deelgemeente_naam": "Hundelgem", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065G", + "naam": "Hundelgem", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065H", - "deelgemeente_naam": "Roborst", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065H", + "naam": "Roborst", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065J", - "deelgemeente_naam": "Rozebeke", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065J", + "naam": "Rozebeke", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065K", - "deelgemeente_naam": "Sint-Blasius-Boekel", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065K", + "naam": "Sint-Blasius-Boekel", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065L", - "deelgemeente_naam": "Sint-Denijs-Boekel", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065L", + "naam": "Sint-Denijs-Boekel", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "45065M", - "deelgemeente_naam": "Nederzwalm-Hermelgem", - "gemeente_id": "45065", - "provincie_id": "40000" + "id": "45065M", + "naam": "Nederzwalm-Hermelgem", + "gemeente_niscode": "45065" }, { - "deelgemeente_id": "46003A", - "deelgemeente_naam": "Beveren", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003A", + "naam": "Beveren", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46003B", - "deelgemeente_naam": "Vrasene", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003B", + "naam": "Vrasene", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46003C", - "deelgemeente_naam": "Verrebroek", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003C", + "naam": "Verrebroek", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46003D", - "deelgemeente_naam": "Kieldrecht", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003D", + "naam": "Kieldrecht", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46003E", - "deelgemeente_naam": "Doel", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003E", + "naam": "Doel", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46003F", - "deelgemeente_naam": "Kallo", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003F", + "naam": "Kallo", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46003G", - "deelgemeente_naam": "Melsele", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003G", + "naam": "Melsele", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46003H", - "deelgemeente_naam": "Haasdonk", - "gemeente_id": "46003", - "provincie_id": "40000" + "id": "46003H", + "naam": "Haasdonk", + "gemeente_niscode": "46003" }, { - "deelgemeente_id": "46013A", - "deelgemeente_naam": "Kruibeke", - "gemeente_id": "46013", - "provincie_id": "40000" + "id": "46013A", + "naam": "Kruibeke", + "gemeente_niscode": "46013" }, { - "deelgemeente_id": "46013B", - "deelgemeente_naam": "Bazel", - "gemeente_id": "46013", - "provincie_id": "40000" + "id": "46013B", + "naam": "Bazel", + "gemeente_niscode": "46013" }, { - "deelgemeente_id": "46013C", - "deelgemeente_naam": "Rupelmonde", - "gemeente_id": "46013", - "provincie_id": "40000" + "id": "46013C", + "naam": "Rupelmonde", + "gemeente_niscode": "46013" }, { - "deelgemeente_id": "46014A", - "deelgemeente_naam": "Lokeren", - "gemeente_id": "46014", - "provincie_id": "40000" + "id": "46014A", + "naam": "Lokeren", + "gemeente_niscode": "46014" }, { - "deelgemeente_id": "46014B", - "deelgemeente_naam": "Eksaarde", - "gemeente_id": "46014", - "provincie_id": "40000" + "id": "46014B", + "naam": "Eksaarde", + "gemeente_niscode": "46014" }, { - "deelgemeente_id": "46014C", - "deelgemeente_naam": "Daknam", - "gemeente_id": "46014", - "provincie_id": "40000" + "id": "46014C", + "naam": "Daknam", + "gemeente_niscode": "46014" }, { - "deelgemeente_id": "46020A", - "deelgemeente_naam": "Sint-Gillis-Waas", - "gemeente_id": "46020", - "provincie_id": "40000" + "id": "46020A", + "naam": "Sint-Gillis-Waas", + "gemeente_niscode": "46020" }, { - "deelgemeente_id": "46020B", - "deelgemeente_naam": "De Klinge", - "gemeente_id": "46020", - "provincie_id": "40000" + "id": "46020B", + "naam": "De Klinge", + "gemeente_niscode": "46020" }, { - "deelgemeente_id": "46020C", - "deelgemeente_naam": "Meerdonk", - "gemeente_id": "46020", - "provincie_id": "40000" + "id": "46020C", + "naam": "Meerdonk", + "gemeente_niscode": "46020" }, { - "deelgemeente_id": "46020D", - "deelgemeente_naam": "Sint-Pauwels", - "gemeente_id": "46020", - "provincie_id": "40000" + "id": "46020D", + "naam": "Sint-Pauwels", + "gemeente_niscode": "46020" }, { - "deelgemeente_id": "46021A", - "deelgemeente_naam": "Sint-Niklaas", - "gemeente_id": "46021", - "provincie_id": "40000" + "id": "46021A", + "naam": "Sint-Niklaas", + "gemeente_niscode": "46021" }, { - "deelgemeente_id": "46021B", - "deelgemeente_naam": "Nieuwkerken-Waas", - "gemeente_id": "46021", - "provincie_id": "40000" + "id": "46021B", + "naam": "Nieuwkerken-Waas", + "gemeente_niscode": "46021" }, { - "deelgemeente_id": "46021C", - "deelgemeente_naam": "Belsele", - "gemeente_id": "46021", - "provincie_id": "40000" + "id": "46021C", + "naam": "Belsele", + "gemeente_niscode": "46021" }, { - "deelgemeente_id": "46021D", - "deelgemeente_naam": "Sinaai", - "gemeente_id": "46021", - "provincie_id": "40000" + "id": "46021D", + "naam": "Sinaai", + "gemeente_niscode": "46021" }, { - "deelgemeente_id": "46024A", - "deelgemeente_naam": "Stekene", - "gemeente_id": "46024", - "provincie_id": "40000" + "id": "46024A", + "naam": "Stekene", + "gemeente_niscode": "46024" }, { - "deelgemeente_id": "46024B", - "deelgemeente_naam": "Kemzeke", - "gemeente_id": "46024", - "provincie_id": "40000" + "id": "46024B", + "naam": "Kemzeke", + "gemeente_niscode": "46024" }, { - "deelgemeente_id": "46025A", - "deelgemeente_naam": "Temse", - "gemeente_id": "46025", - "provincie_id": "40000" + "id": "46025A", + "naam": "Temse", + "gemeente_niscode": "46025" }, { - "deelgemeente_id": "46025B", - "deelgemeente_naam": "Steendorp", - "gemeente_id": "46025", - "provincie_id": "40000" + "id": "46025B", + "naam": "Steendorp", + "gemeente_niscode": "46025" }, { - "deelgemeente_id": "46025C", - "deelgemeente_naam": "Tielrode", - "gemeente_id": "46025", - "provincie_id": "40000" + "id": "46025C", + "naam": "Tielrode", + "gemeente_niscode": "46025" }, { - "deelgemeente_id": "46025D", - "deelgemeente_naam": "Elversele", - "gemeente_id": "46025", - "provincie_id": "40000" + "id": "46025D", + "naam": "Elversele", + "gemeente_niscode": "46025" }, { - "deelgemeente_id": "71002A", - "deelgemeente_naam": "As", - "gemeente_id": "71002", - "provincie_id": "70000" + "id": "71002A", + "naam": "As", + "gemeente_niscode": "71002" }, { - "deelgemeente_id": "71002B", - "deelgemeente_naam": "Niel-bij-As", - "gemeente_id": "71002", - "provincie_id": "70000" + "id": "71002B", + "naam": "Niel-bij-As", + "gemeente_niscode": "71002" }, { - "deelgemeente_id": "71004A", - "deelgemeente_naam": "Beringen", - "gemeente_id": "71004", - "provincie_id": "70000" + "id": "71004A", + "naam": "Beringen", + "gemeente_niscode": "71004" }, { - "deelgemeente_id": "71004B", - "deelgemeente_naam": "Paal", - "gemeente_id": "71004", - "provincie_id": "70000" + "id": "71004B", + "naam": "Paal", + "gemeente_niscode": "71004" }, { - "deelgemeente_id": "71004C", - "deelgemeente_naam": "Koersel", - "gemeente_id": "71004", - "provincie_id": "70000" + "id": "71004C", + "naam": "Koersel", + "gemeente_niscode": "71004" }, { - "deelgemeente_id": "71004D", - "deelgemeente_naam": "Beverlo", - "gemeente_id": "71004", - "provincie_id": "70000" + "id": "71004D", + "naam": "Beverlo", + "gemeente_niscode": "71004" }, { - "deelgemeente_id": "71011A", - "deelgemeente_naam": "Diepenbeek", - "gemeente_id": "71011", - "provincie_id": "70000" + "id": "71011A", + "naam": "Diepenbeek", + "gemeente_niscode": "71011" }, { - "deelgemeente_id": "71016A", - "deelgemeente_naam": "Genk", - "gemeente_id": "71016", - "provincie_id": "70000" + "id": "71016A", + "naam": "Genk", + "gemeente_niscode": "71016" }, { - "deelgemeente_id": "71017A", - "deelgemeente_naam": "Gingelom", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017A", + "naam": "Gingelom", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017B", - "deelgemeente_naam": "Niel-bij-Sint-Truiden", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017B", + "naam": "Niel-bij-Sint-Truiden", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017C", - "deelgemeente_naam": "Muizen", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017C", + "naam": "Muizen", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017D", - "deelgemeente_naam": "Buvingen", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017D", + "naam": "Buvingen", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017E", - "deelgemeente_naam": "Borlo", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017E", + "naam": "Borlo", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017F", - "deelgemeente_naam": "Mielen-boven-Aalst", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017F", + "naam": "Mielen-boven-Aalst", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017G", - "deelgemeente_naam": "Boekhout", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017G", + "naam": "Boekhout", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017H", - "deelgemeente_naam": "Jeuk", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017H", + "naam": "Jeuk", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017J", - "deelgemeente_naam": "Montenaken", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017J", + "naam": "Montenaken", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017K", - "deelgemeente_naam": "Kortijs", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017K", + "naam": "Kortijs", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71017L", - "deelgemeente_naam": "Vorsen", - "gemeente_id": "71017", - "provincie_id": "70000" + "id": "71017L", + "naam": "Vorsen", + "gemeente_niscode": "71017" }, { - "deelgemeente_id": "71020A", - "deelgemeente_naam": "Halen", - "gemeente_id": "71020", - "provincie_id": "70000" + "id": "71020A", + "naam": "Halen", + "gemeente_niscode": "71020" }, { - "deelgemeente_id": "71020B", - "deelgemeente_naam": "Zelem", - "gemeente_id": "71020", - "provincie_id": "70000" + "id": "71020B", + "naam": "Zelem", + "gemeente_niscode": "71020" }, { - "deelgemeente_id": "71020C", - "deelgemeente_naam": "Loksbergen", - "gemeente_id": "71020", - "provincie_id": "70000" + "id": "71020C", + "naam": "Loksbergen", + "gemeente_niscode": "71020" }, { - "deelgemeente_id": "71022A", - "deelgemeente_naam": "Hasselt", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022A", + "naam": "Hasselt", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71022B", - "deelgemeente_naam": "Wimmertingen", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022B", + "naam": "Wimmertingen", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71022C", - "deelgemeente_naam": "Sint-Lambrechts-Herk", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022C", + "naam": "Sint-Lambrechts-Herk", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71022D", - "deelgemeente_naam": "Kuringen", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022D", + "naam": "Kuringen", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71022E", - "deelgemeente_naam": "Stokrooie", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022E", + "naam": "Stokrooie", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71022F", - "deelgemeente_naam": "Kermt", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022F", + "naam": "Kermt", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71022G", - "deelgemeente_naam": "Spalbeek", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022G", + "naam": "Spalbeek", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71022H", - "deelgemeente_naam": "Stevoort", - "gemeente_id": "71022", - "provincie_id": "70000" + "id": "71022H", + "naam": "Stevoort", + "gemeente_niscode": "71022" }, { - "deelgemeente_id": "71024A", - "deelgemeente_naam": "Herk-de-Stad", - "gemeente_id": "71024", - "provincie_id": "70000" + "id": "71024A", + "naam": "Herk-de-Stad", + "gemeente_niscode": "71024" }, { - "deelgemeente_id": "71024B", - "deelgemeente_naam": "Donk", - "gemeente_id": "71024", - "provincie_id": "70000" + "id": "71024B", + "naam": "Donk", + "gemeente_niscode": "71024" }, { - "deelgemeente_id": "71024C", - "deelgemeente_naam": "Schulen", - "gemeente_id": "71024", - "provincie_id": "70000" + "id": "71024C", + "naam": "Schulen", + "gemeente_niscode": "71024" }, { - "deelgemeente_id": "71024D", - "deelgemeente_naam": "Berbroek", - "gemeente_id": "71024", - "provincie_id": "70000" + "id": "71024D", + "naam": "Berbroek", + "gemeente_niscode": "71024" }, { - "deelgemeente_id": "71034A", - "deelgemeente_naam": "Leopoldsburg", - "gemeente_id": "71034", - "provincie_id": "70000" + "id": "71034A", + "naam": "Leopoldsburg", + "gemeente_niscode": "71034" }, { - "deelgemeente_id": "71034B", - "deelgemeente_naam": "Heppen", - "gemeente_id": "71034", - "provincie_id": "70000" + "id": "71034B", + "naam": "Heppen", + "gemeente_niscode": "71034" }, { - "deelgemeente_id": "71037A", - "deelgemeente_naam": "Lummen", - "gemeente_id": "71037", - "provincie_id": "70000" + "id": "71037A", + "naam": "Lummen", + "gemeente_niscode": "71037" }, { - "deelgemeente_id": "71037B", - "deelgemeente_naam": "Linkhout", - "gemeente_id": "71037", - "provincie_id": "70000" + "id": "71037B", + "naam": "Linkhout", + "gemeente_niscode": "71037" }, { - "deelgemeente_id": "71037C", - "deelgemeente_naam": "Meldert", - "gemeente_id": "71037", - "provincie_id": "70000" + "id": "71037C", + "naam": "Meldert", + "gemeente_niscode": "71037" }, { - "deelgemeente_id": "71045A", - "deelgemeente_naam": "Nieuwerkerken", - "gemeente_id": "71045", - "provincie_id": "70000" + "id": "71045A", + "naam": "Nieuwerkerken", + "gemeente_niscode": "71045" }, { - "deelgemeente_id": "71045B", - "deelgemeente_naam": "Binderveld", - "gemeente_id": "71045", - "provincie_id": "70000" + "id": "71045B", + "naam": "Binderveld", + "gemeente_niscode": "71045" }, { - "deelgemeente_id": "71045C", - "deelgemeente_naam": "Wijer", - "gemeente_id": "71045", - "provincie_id": "70000" + "id": "71045C", + "naam": "Wijer", + "gemeente_niscode": "71045" }, { - "deelgemeente_id": "71045D", - "deelgemeente_naam": "Kozen", - "gemeente_id": "71045", - "provincie_id": "70000" + "id": "71045D", + "naam": "Kozen", + "gemeente_niscode": "71045" }, { - "deelgemeente_id": "71053A", - "deelgemeente_naam": "Sint-Truiden", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053A", + "naam": "Sint-Truiden", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053B", - "deelgemeente_naam": "Halmaal", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053B", + "naam": "Halmaal", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053C", - "deelgemeente_naam": "Wilderen", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053C", + "naam": "Wilderen", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053D", - "deelgemeente_naam": "Duras", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053D", + "naam": "Duras", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053E", - "deelgemeente_naam": "Gorsem", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053E", + "naam": "Gorsem", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053F", - "deelgemeente_naam": "Runkelen", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053F", + "naam": "Runkelen", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053G", - "deelgemeente_naam": "Zepperen", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053G", + "naam": "Zepperen", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053H", - "deelgemeente_naam": "Ordingen", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053H", + "naam": "Ordingen", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053J", - "deelgemeente_naam": "Brustem", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053J", + "naam": "Brustem", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053K", - "deelgemeente_naam": "Groot-Gelmen", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053K", + "naam": "Groot-Gelmen", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053L", - "deelgemeente_naam": "Engelmanshoven", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053L", + "naam": "Engelmanshoven", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053M", - "deelgemeente_naam": "Gelinden", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053M", + "naam": "Gelinden", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053N", - "deelgemeente_naam": "Aalst", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053N", + "naam": "Aalst", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053P", - "deelgemeente_naam": "Kerkom-bij-Sint-Truiden", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053P", + "naam": "Kerkom-bij-Sint-Truiden", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053R", - "deelgemeente_naam": "Velm", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053R", + "naam": "Velm", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71053S", - "deelgemeente_naam": "Gelmen", - "gemeente_id": "71053", - "provincie_id": "70000" + "id": "71053S", + "naam": "Gelmen", + "gemeente_niscode": "71053" }, { - "deelgemeente_id": "71057A", - "deelgemeente_naam": "Tessenderlo", - "gemeente_id": "71057", - "provincie_id": "70000" + "id": "71057A", + "naam": "Tessenderlo", + "gemeente_niscode": "71057" }, { - "deelgemeente_id": "71066A", - "deelgemeente_naam": "Zonhoven", - "gemeente_id": "71066", - "provincie_id": "70000" + "id": "71066A", + "naam": "Zonhoven", + "gemeente_niscode": "71066" }, { - "deelgemeente_id": "71067A", - "deelgemeente_naam": "Zutendaal", - "gemeente_id": "71067", - "provincie_id": "70000" + "id": "71067A", + "naam": "Zutendaal", + "gemeente_niscode": "71067" }, { - "deelgemeente_id": "71069A", - "deelgemeente_naam": "Oostham", - "gemeente_id": "71069", - "provincie_id": "70000" + "id": "71069A", + "naam": "Oostham", + "gemeente_niscode": "71069" }, { - "deelgemeente_id": "71069B", - "deelgemeente_naam": "Kwaadmechelen", - "gemeente_id": "71069", - "provincie_id": "70000" + "id": "71069B", + "naam": "Kwaadmechelen", + "gemeente_niscode": "71069" }, { - "deelgemeente_id": "71070A", - "deelgemeente_naam": "Heusden", - "gemeente_id": "71070", - "provincie_id": "70000" + "id": "71070A", + "naam": "Heusden", + "gemeente_niscode": "71070" }, { - "deelgemeente_id": "71070B", - "deelgemeente_naam": "Zolder", - "gemeente_id": "71070", - "provincie_id": "70000" + "id": "71070B", + "naam": "Zolder", + "gemeente_niscode": "71070" }, { - "deelgemeente_id": "72003A", - "deelgemeente_naam": "Bocholt", - "gemeente_id": "72003", - "provincie_id": "70000" + "id": "72003A", + "naam": "Bocholt", + "gemeente_niscode": "72003" }, { - "deelgemeente_id": "72003B", - "deelgemeente_naam": "Reppel", - "gemeente_id": "72003", - "provincie_id": "70000" + "id": "72003B", + "naam": "Reppel", + "gemeente_niscode": "72003" }, { - "deelgemeente_id": "72003C", - "deelgemeente_naam": "Kaulille", - "gemeente_id": "72003", - "provincie_id": "70000" + "id": "72003C", + "naam": "Kaulille", + "gemeente_niscode": "72003" }, { - "deelgemeente_id": "72004A", - "deelgemeente_naam": "Bree", - "gemeente_id": "72004", - "provincie_id": "70000" + "id": "72004A", + "naam": "Bree", + "gemeente_niscode": "72004" }, { - "deelgemeente_id": "72004B", - "deelgemeente_naam": "Tongerlo", - "gemeente_id": "72004", - "provincie_id": "70000" + "id": "72004B", + "naam": "Tongerlo", + "gemeente_niscode": "72004" }, { - "deelgemeente_id": "72004C", - "deelgemeente_naam": "Opitter", - "gemeente_id": "72004", - "provincie_id": "70000" + "id": "72004C", + "naam": "Opitter", + "gemeente_niscode": "72004" }, { - "deelgemeente_id": "72004D", - "deelgemeente_naam": "Beek", - "gemeente_id": "72004", - "provincie_id": "70000" + "id": "72004D", + "naam": "Beek", + "gemeente_niscode": "72004" }, { - "deelgemeente_id": "72004E", - "deelgemeente_naam": "Gerdingen", - "gemeente_id": "72004", - "provincie_id": "70000" + "id": "72004E", + "naam": "Gerdingen", + "gemeente_niscode": "72004" }, { - "deelgemeente_id": "72018A", - "deelgemeente_naam": "Kinrooi", - "gemeente_id": "72018", - "provincie_id": "70000" + "id": "72018A", + "naam": "Kinrooi", + "gemeente_niscode": "72018" }, { - "deelgemeente_id": "72018B", - "deelgemeente_naam": "Molenbeersel", - "gemeente_id": "72018", - "provincie_id": "70000" + "id": "72018B", + "naam": "Molenbeersel", + "gemeente_niscode": "72018" }, { - "deelgemeente_id": "72018C", - "deelgemeente_naam": "Kessenich", - "gemeente_id": "72018", - "provincie_id": "70000" + "id": "72018C", + "naam": "Kessenich", + "gemeente_niscode": "72018" }, { - "deelgemeente_id": "72018D", - "deelgemeente_naam": "Ophoven", - "gemeente_id": "72018", - "provincie_id": "70000" + "id": "72018D", + "naam": "Ophoven", + "gemeente_niscode": "72018" }, { - "deelgemeente_id": "72020A", - "deelgemeente_naam": "Lommel", - "gemeente_id": "72020", - "provincie_id": "70000" + "id": "72020A", + "naam": "Lommel", + "gemeente_niscode": "72020" }, { - "deelgemeente_id": "72021A", - "deelgemeente_naam": "Maaseik", - "gemeente_id": "72021", - "provincie_id": "70000" + "id": "72021A", + "naam": "Maaseik", + "gemeente_niscode": "72021" }, { - "deelgemeente_id": "72021B", - "deelgemeente_naam": "Neeroeteren", - "gemeente_id": "72021", - "provincie_id": "70000" + "id": "72021B", + "naam": "Neeroeteren", + "gemeente_niscode": "72021" }, { - "deelgemeente_id": "72021C", - "deelgemeente_naam": "Opoeteren", - "gemeente_id": "72021", - "provincie_id": "70000" + "id": "72021C", + "naam": "Opoeteren", + "gemeente_niscode": "72021" }, { - "deelgemeente_id": "72030A", - "deelgemeente_naam": "Peer", - "gemeente_id": "72030", - "provincie_id": "70000" + "id": "72030A", + "naam": "Peer", + "gemeente_niscode": "72030" }, { - "deelgemeente_id": "72030B", - "deelgemeente_naam": "Kleine Brogel", - "gemeente_id": "72030", - "provincie_id": "70000" + "id": "72030B", + "naam": "Kleine Brogel", + "gemeente_niscode": "72030" }, { - "deelgemeente_id": "72030C", - "deelgemeente_naam": "Grote Brogel", - "gemeente_id": "72030", - "provincie_id": "70000" + "id": "72030C", + "naam": "Grote Brogel", + "gemeente_niscode": "72030" }, { - "deelgemeente_id": "72030D", - "deelgemeente_naam": "Wijchmaal", - "gemeente_id": "72030", - "provincie_id": "70000" + "id": "72030D", + "naam": "Wijchmaal", + "gemeente_niscode": "72030" }, { - "deelgemeente_id": "72037A", - "deelgemeente_naam": "Hamont", - "gemeente_id": "72037", - "provincie_id": "70000" + "id": "72037A", + "naam": "Hamont", + "gemeente_niscode": "72037" }, { - "deelgemeente_id": "72037B", - "deelgemeente_naam": "Achel", - "gemeente_id": "72037", - "provincie_id": "70000" + "id": "72037B", + "naam": "Achel", + "gemeente_niscode": "72037" }, { - "deelgemeente_id": "72038A", - "deelgemeente_naam": "Hechtel", - "gemeente_id": "72038", - "provincie_id": "70000" + "id": "72038A", + "naam": "Hechtel", + "gemeente_niscode": "72038" }, { - "deelgemeente_id": "72038B", - "deelgemeente_naam": "Eksel", - "gemeente_id": "72038", - "provincie_id": "70000" + "id": "72038B", + "naam": "Eksel", + "gemeente_niscode": "72038" }, { - "deelgemeente_id": "72039A", - "deelgemeente_naam": "Houthalen", - "gemeente_id": "72039", - "provincie_id": "70000" + "id": "72039A", + "naam": "Houthalen", + "gemeente_niscode": "72039" }, { - "deelgemeente_id": "72039B", - "deelgemeente_naam": "Helchteren", - "gemeente_id": "72039", - "provincie_id": "70000" + "id": "72039B", + "naam": "Helchteren", + "gemeente_niscode": "72039" }, { - "deelgemeente_id": "72042A", - "deelgemeente_naam": "Meeuwen", - "gemeente_id": "72042", - "provincie_id": "70000" + "id": "72042A", + "naam": "Meeuwen", + "gemeente_niscode": "72042" }, { - "deelgemeente_id": "72042B", - "deelgemeente_naam": "Wijshagen", - "gemeente_id": "72042", - "provincie_id": "70000" + "id": "72042B", + "naam": "Wijshagen", + "gemeente_niscode": "72042" }, { - "deelgemeente_id": "72042C", - "deelgemeente_naam": "Ellikom", - "gemeente_id": "72042", - "provincie_id": "70000" + "id": "72042C", + "naam": "Ellikom", + "gemeente_niscode": "72042" }, { - "deelgemeente_id": "72042D", - "deelgemeente_naam": "Gruitrode", - "gemeente_id": "72042", - "provincie_id": "70000" + "id": "72042D", + "naam": "Gruitrode", + "gemeente_niscode": "72042" }, { - "deelgemeente_id": "72042E", - "deelgemeente_naam": "Neerglabbeek", - "gemeente_id": "72042", - "provincie_id": "70000" + "id": "72042E", + "naam": "Neerglabbeek", + "gemeente_niscode": "72042" }, { - "deelgemeente_id": "72042F", - "deelgemeente_naam": "Opglabbeek", - "gemeente_id": "72042", - "provincie_id": "70000" + "id": "72042F", + "naam": "Opglabbeek", + "gemeente_niscode": "72042" }, { - "deelgemeente_id": "72041A", - "deelgemeente_naam": "Dilsen", - "gemeente_id": "72041", - "provincie_id": "70000" + "id": "72041A", + "naam": "Dilsen", + "gemeente_niscode": "72041" }, { - "deelgemeente_id": "72041B", - "deelgemeente_naam": "Rotem", - "gemeente_id": "72041", - "provincie_id": "70000" + "id": "72041B", + "naam": "Rotem", + "gemeente_niscode": "72041" }, { - "deelgemeente_id": "72041C", - "deelgemeente_naam": "Elen", - "gemeente_id": "72041", - "provincie_id": "70000" + "id": "72041C", + "naam": "Elen", + "gemeente_niscode": "72041" }, { - "deelgemeente_id": "72041D", - "deelgemeente_naam": "Stokkem", - "gemeente_id": "72041", - "provincie_id": "70000" + "id": "72041D", + "naam": "Stokkem", + "gemeente_niscode": "72041" }, { - "deelgemeente_id": "72041E", - "deelgemeente_naam": "Lanklaar", - "gemeente_id": "72041", - "provincie_id": "70000" + "id": "72041E", + "naam": "Lanklaar", + "gemeente_niscode": "72041" }, { - "deelgemeente_id": "72043A", - "deelgemeente_naam": "Neerpelt", - "gemeente_id": "72043", - "provincie_id": "70000" + "id": "72043A", + "naam": "Neerpelt", + "gemeente_niscode": "72043" }, { - "deelgemeente_id": "72043B", - "deelgemeente_naam": "Overpelt", - "gemeente_id": "72043", - "provincie_id": "70000" + "id": "72043B", + "naam": "Overpelt", + "gemeente_niscode": "72043" }, { - "deelgemeente_id": "72043C", - "deelgemeente_naam": "Sint-Huibrechts-Lille", - "gemeente_id": "72043", - "provincie_id": "70000" + "id": "72043C", + "naam": "Sint-Huibrechts-Lille", + "gemeente_niscode": "72043" }, { - "deelgemeente_id": "73001A", - "deelgemeente_naam": "Alken", - "gemeente_id": "73001", - "provincie_id": "70000" + "id": "73001A", + "naam": "Alken", + "gemeente_niscode": "73001" }, { - "deelgemeente_id": "73006A", - "deelgemeente_naam": "Bilzen", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006A", + "naam": "Bilzen", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006B", - "deelgemeente_naam": "Beverst", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006B", + "naam": "Beverst", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006C", - "deelgemeente_naam": "Munsterbilzen", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006C", + "naam": "Munsterbilzen", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006D", - "deelgemeente_naam": "Waltwilder", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006D", + "naam": "Waltwilder", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006E", - "deelgemeente_naam": "Hoelbeek", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006E", + "naam": "Hoelbeek", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006F", - "deelgemeente_naam": "Eigenbilzen", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006F", + "naam": "Eigenbilzen", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006G", - "deelgemeente_naam": "Mopertingen", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006G", + "naam": "Mopertingen", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006H", - "deelgemeente_naam": "Hees", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006H", + "naam": "Hees", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006J", - "deelgemeente_naam": "Rosmeer", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006J", + "naam": "Rosmeer", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006K", - "deelgemeente_naam": "Kleine-spouwen", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006K", + "naam": "Kleine-spouwen", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006L", - "deelgemeente_naam": "Grote-Spouwen", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006L", + "naam": "Grote-Spouwen", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006M", - "deelgemeente_naam": "Rijkhoven", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006M", + "naam": "Rijkhoven", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73006N", - "deelgemeente_naam": "Martenslinde", - "gemeente_id": "73006", - "provincie_id": "70000" + "id": "73006N", + "naam": "Martenslinde", + "gemeente_niscode": "73006" }, { - "deelgemeente_id": "73009A", - "deelgemeente_naam": "Borgloon", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009A", + "naam": "Borgloon", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009B", - "deelgemeente_naam": "Kuttekoven", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009B", + "naam": "Kuttekoven", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009C", - "deelgemeente_naam": "Kerniel", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009C", + "naam": "Kerniel", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009D", - "deelgemeente_naam": "Gors-Opleeuw", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009D", + "naam": "Gors-Opleeuw", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009E", - "deelgemeente_naam": "Jesseren", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009E", + "naam": "Jesseren", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009F", - "deelgemeente_naam": "Bommershoven", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009F", + "naam": "Bommershoven", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009G", - "deelgemeente_naam": "Groot-Loon", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009G", + "naam": "Groot-Loon", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009H", - "deelgemeente_naam": "Broekom", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009H", + "naam": "Broekom", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009J", - "deelgemeente_naam": "Hendrieken", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009J", + "naam": "Hendrieken", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009K", - "deelgemeente_naam": "Voort", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009K", + "naam": "Voort", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009L", - "deelgemeente_naam": "Gotem", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009L", + "naam": "Gotem", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009M", - "deelgemeente_naam": "Hoepertingen", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009M", + "naam": "Hoepertingen", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73009N", - "deelgemeente_naam": "Rijkel", - "gemeente_id": "73009", - "provincie_id": "70000" + "id": "73009N", + "naam": "Rijkel", + "gemeente_niscode": "73009" }, { - "deelgemeente_id": "73022A", - "deelgemeente_naam": "Heers", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022A", + "naam": "Heers", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022B", - "deelgemeente_naam": "Batsheers", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022B", + "naam": "Batsheers", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022C", - "deelgemeente_naam": "Opheers", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022C", + "naam": "Opheers", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022D", - "deelgemeente_naam": "Veulen", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022D", + "naam": "Veulen", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022E", - "deelgemeente_naam": "Gutschoven", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022E", + "naam": "Gutschoven", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022F", - "deelgemeente_naam": "Mettekoven", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022F", + "naam": "Mettekoven", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022G", - "deelgemeente_naam": "Klein-Gelmen", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022G", + "naam": "Klein-Gelmen", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022H", - "deelgemeente_naam": "Heks", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022H", + "naam": "Heks", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022J", - "deelgemeente_naam": "Horpmaal", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022J", + "naam": "Horpmaal", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022K", - "deelgemeente_naam": "Vechmaal", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022K", + "naam": "Vechmaal", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022L", - "deelgemeente_naam": "Mechelen-Bovelingen", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022L", + "naam": "Mechelen-Bovelingen", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022M", - "deelgemeente_naam": "Rukkelingen-Loon", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022M", + "naam": "Rukkelingen-Loon", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73022N", - "deelgemeente_naam": "Bovelingen", - "gemeente_id": "73022", - "provincie_id": "70000" + "id": "73022N", + "naam": "Bovelingen", + "gemeente_niscode": "73022" }, { - "deelgemeente_id": "73028A", - "deelgemeente_naam": "Herstappe", - "gemeente_id": "73028", - "provincie_id": "70000" + "id": "73028A", + "naam": "Herstappe", + "gemeente_niscode": "73028" }, { - "deelgemeente_id": "73032A", - "deelgemeente_naam": "Hoeselt", - "gemeente_id": "73032", - "provincie_id": "70000" + "id": "73032A", + "naam": "Hoeselt", + "gemeente_niscode": "73032" }, { - "deelgemeente_id": "73032B", - "deelgemeente_naam": "Werm", - "gemeente_id": "73032", - "provincie_id": "70000" + "id": "73032B", + "naam": "Werm", + "gemeente_niscode": "73032" }, { - "deelgemeente_id": "73032C", - "deelgemeente_naam": "Romershoven", - "gemeente_id": "73032", - "provincie_id": "70000" + "id": "73032C", + "naam": "Romershoven", + "gemeente_niscode": "73032" }, { - "deelgemeente_id": "73032D", - "deelgemeente_naam": "Sint-Huibrechts-Hern", - "gemeente_id": "73032", - "provincie_id": "70000" + "id": "73032D", + "naam": "Sint-Huibrechts-Hern", + "gemeente_niscode": "73032" }, { - "deelgemeente_id": "73032E", - "deelgemeente_naam": "Schalkhoven", - "gemeente_id": "73032", - "provincie_id": "70000" + "id": "73032E", + "naam": "Schalkhoven", + "gemeente_niscode": "73032" }, { - "deelgemeente_id": "73040A", - "deelgemeente_naam": "Kortessem", - "gemeente_id": "73040", - "provincie_id": "70000" + "id": "73040A", + "naam": "Kortessem", + "gemeente_niscode": "73040" }, { - "deelgemeente_id": "73040B", - "deelgemeente_naam": "Wintershoven", - "gemeente_id": "73040", - "provincie_id": "70000" + "id": "73040B", + "naam": "Wintershoven", + "gemeente_niscode": "73040" }, { - "deelgemeente_id": "73040C", - "deelgemeente_naam": "Vliermaalroot", - "gemeente_id": "73040", - "provincie_id": "70000" + "id": "73040C", + "naam": "Vliermaalroot", + "gemeente_niscode": "73040" }, { - "deelgemeente_id": "73040D", - "deelgemeente_naam": "Vliermaal", - "gemeente_id": "73040", - "provincie_id": "70000" + "id": "73040D", + "naam": "Vliermaal", + "gemeente_niscode": "73040" }, { - "deelgemeente_id": "73040E", - "deelgemeente_naam": "Guigoven", - "gemeente_id": "73040", - "provincie_id": "70000" + "id": "73040E", + "naam": "Guigoven", + "gemeente_niscode": "73040" }, { - "deelgemeente_id": "73042A", - "deelgemeente_naam": "Lanaken", - "gemeente_id": "73042", - "provincie_id": "70000" + "id": "73042A", + "naam": "Lanaken", + "gemeente_niscode": "73042" }, { - "deelgemeente_id": "73042B", - "deelgemeente_naam": "Rekem", - "gemeente_id": "73042", - "provincie_id": "70000" + "id": "73042B", + "naam": "Rekem", + "gemeente_niscode": "73042" }, { - "deelgemeente_id": "73042C", - "deelgemeente_naam": "Neerharen", - "gemeente_id": "73042", - "provincie_id": "70000" + "id": "73042C", + "naam": "Neerharen", + "gemeente_niscode": "73042" }, { - "deelgemeente_id": "73042D", - "deelgemeente_naam": "Veldwezelt", - "gemeente_id": "73042", - "provincie_id": "70000" + "id": "73042D", + "naam": "Veldwezelt", + "gemeente_niscode": "73042" }, { - "deelgemeente_id": "73042E", - "deelgemeente_naam": "Gellik", - "gemeente_id": "73042", - "provincie_id": "70000" + "id": "73042E", + "naam": "Gellik", + "gemeente_niscode": "73042" }, { - "deelgemeente_id": "73066A", - "deelgemeente_naam": "Riemst", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066A", + "naam": "Riemst", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066B", - "deelgemeente_naam": "Herderen", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066B", + "naam": "Herderen", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066C", - "deelgemeente_naam": "Vlijtingen", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066C", + "naam": "Vlijtingen", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066D", - "deelgemeente_naam": "Vroenhoven", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066D", + "naam": "Vroenhoven", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066E", - "deelgemeente_naam": "Kanne", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066E", + "naam": "Kanne", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066F", - "deelgemeente_naam": "Zichen-Zussen-Bolder", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066F", + "naam": "Zichen-Zussen-Bolder", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066G", - "deelgemeente_naam": "Valmeer", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066G", + "naam": "Valmeer", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066H", - "deelgemeente_naam": "Millen", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066H", + "naam": "Millen", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066J", - "deelgemeente_naam": "Genoelselderen", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066J", + "naam": "Genoelselderen", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73066K", - "deelgemeente_naam": "Membruggen", - "gemeente_id": "73066", - "provincie_id": "70000" + "id": "73066K", + "naam": "Membruggen", + "gemeente_niscode": "73066" }, { - "deelgemeente_id": "73083A", - "deelgemeente_naam": "Tongeren", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083A", + "naam": "Tongeren", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083B", - "deelgemeente_naam": "Koninksem", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083B", + "naam": "Koninksem", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083C", - "deelgemeente_naam": "Neerrepen", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083C", + "naam": "Neerrepen", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083D", - "deelgemeente_naam": "Riksingen", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083D", + "naam": "Riksingen", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083E", - "deelgemeente_naam": "Henis", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083E", + "naam": "Henis", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083F", - "deelgemeente_naam": "Berg", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083F", + "naam": "Berg", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083G", - "deelgemeente_naam": "Mal", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083G", + "naam": "Mal", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083H", - "deelgemeente_naam": "Sluizen", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083H", + "naam": "Sluizen", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083J", - "deelgemeente_naam": "Nerem", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083J", + "naam": "Nerem", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083K", - "deelgemeente_naam": "Vreren", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083K", + "naam": "Vreren", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083L", - "deelgemeente_naam": "Rutten", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083L", + "naam": "Rutten", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083M", - "deelgemeente_naam": "Lauw", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083M", + "naam": "Lauw", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083N", - "deelgemeente_naam": "Widooie", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083N", + "naam": "Widooie", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083P", - "deelgemeente_naam": "Piringen", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083P", + "naam": "Piringen", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083R", - "deelgemeente_naam": "Overrepen", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083R", + "naam": "Overrepen", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083S", - "deelgemeente_naam": "'s Herenelderen", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083S", + "naam": "'s Herenelderen", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083T", - "deelgemeente_naam": "Haren", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083T", + "naam": "Haren", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083U", - "deelgemeente_naam": "Kolmont", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083U", + "naam": "Kolmont", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73083V", - "deelgemeente_naam": "Diets-Heur", - "gemeente_id": "73083", - "provincie_id": "70000" + "id": "73083V", + "naam": "Diets-Heur", + "gemeente_niscode": "73083" }, { - "deelgemeente_id": "73098A", - "deelgemeente_naam": "Wellen", - "gemeente_id": "73098", - "provincie_id": "70000" + "id": "73098A", + "naam": "Wellen", + "gemeente_niscode": "73098" }, { - "deelgemeente_id": "73098B", - "deelgemeente_naam": "Herten", - "gemeente_id": "73098", - "provincie_id": "70000" + "id": "73098B", + "naam": "Herten", + "gemeente_niscode": "73098" }, { - "deelgemeente_id": "73098C", - "deelgemeente_naam": "Berlingen", - "gemeente_id": "73098", - "provincie_id": "70000" + "id": "73098C", + "naam": "Berlingen", + "gemeente_niscode": "73098" }, { - "deelgemeente_id": "73098D", - "deelgemeente_naam": "Ulbeek", - "gemeente_id": "73098", - "provincie_id": "70000" + "id": "73098D", + "naam": "Ulbeek", + "gemeente_niscode": "73098" }, { - "deelgemeente_id": "73107A", - "deelgemeente_naam": "Mechelen-aan-de-Maas", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107A", + "naam": "Mechelen-aan-de-Maas", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73107B", - "deelgemeente_naam": "Opgrimbie", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107B", + "naam": "Opgrimbie", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73107C", - "deelgemeente_naam": "Vucht", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107C", + "naam": "Vucht", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73107D", - "deelgemeente_naam": "Eisden", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107D", + "naam": "Eisden", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73107E", - "deelgemeente_naam": "Leut", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107E", + "naam": "Leut", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73107F", - "deelgemeente_naam": "Meeswijk", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107F", + "naam": "Meeswijk", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73107G", - "deelgemeente_naam": "Boorsem", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107G", + "naam": "Boorsem", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73107H", - "deelgemeente_naam": "Uikhoven", - "gemeente_id": "73107", - "provincie_id": "70000" + "id": "73107H", + "naam": "Uikhoven", + "gemeente_niscode": "73107" }, { - "deelgemeente_id": "73109A", - "deelgemeente_naam": "'s Gravenvoeren", - "gemeente_id": "73109", - "provincie_id": "70000" + "id": "73109A", + "naam": "'s Gravenvoeren", + "gemeente_niscode": "73109" }, { - "deelgemeente_id": "73109B", - "deelgemeente_naam": "Sint-Martens-Voeren", - "gemeente_id": "73109", - "provincie_id": "70000" + "id": "73109B", + "naam": "Sint-Martens-Voeren", + "gemeente_niscode": "73109" }, { - "deelgemeente_id": "73109C", - "deelgemeente_naam": "Teuven", - "gemeente_id": "73109", - "provincie_id": "70000" + "id": "73109C", + "naam": "Teuven", + "gemeente_niscode": "73109" }, { - "deelgemeente_id": "73109D", - "deelgemeente_naam": "Remersdaal", - "gemeente_id": "73109", - "provincie_id": "70000" + "id": "73109D", + "naam": "Remersdaal", + "gemeente_niscode": "73109" }, { - "deelgemeente_id": "73109E", - "deelgemeente_naam": "Sint-Pieters-Voeren", - "gemeente_id": "73109", - "provincie_id": "70000" + "id": "73109E", + "naam": "Sint-Pieters-Voeren", + "gemeente_niscode": "73109" }, { - "deelgemeente_id": "73109F", - "deelgemeente_naam": "Moelingen", - "gemeente_id": "73109", - "provincie_id": "70000" + "id": "73109F", + "naam": "Moelingen", + "gemeente_niscode": "73109" } ] \ No newline at end of file diff --git a/crabpy/data/gewesten.json b/crabpy/data/gewesten.json new file mode 100644 index 0000000..cbc3ea8 --- /dev/null +++ b/crabpy/data/gewesten.json @@ -0,0 +1,20 @@ +[ + { + "bounding_box": [141217.19, 161462.89, 157988.3, 178152.83], + "centroid": [149602.75, 169600.83], + "id": 1, + "naam": "Brussels Hoofdstedelijk Gewest" + }, + { + "bounding_box": [22279.17, 153050.23, 258873.3, 244022.31], + "centroid": [138165.09, 189297.53], + "id": 2, + "naam": "Vlaams Gewest" + }, + { + "bounding_box": [42262.91, 21192.8, 295156.81, 167700.47], + "centroid": [180603.15, 72950.6], + "id": 3, + "naam": "Waals Gewest" + } +] \ No newline at end of file diff --git a/crabpy/data/provincies.json b/crabpy/data/provincies.json new file mode 100644 index 0000000..d0bc43a --- /dev/null +++ b/crabpy/data/provincies.json @@ -0,0 +1,52 @@ +[ + { + "gewest": 2, + "niscode": "10000", + "naam": "Antwerpen" + }, + { + "gewest": 2, + "niscode": "20001", + "naam": "Vlaams-Brabant" + }, + { + "gewest": 2, + "niscode": "30000", + "naam": "West-Vlaanderen" + }, + { + "gewest": 2, + "niscode": "40000", + "naam": "Oost-Vlaanderen" + }, + { + "gewest": 2, + "niscode": "70000", + "naam": "Limburg" + }, + { + "gewest": 3, + "niscode": "20002", + "naam": "Waals-Brabant" + }, + { + "gewest": 3, + "niscode": "50000", + "naam": "Henegouwen" + }, + { + "gewest": 3, + "niscode": "60000", + "naam": "Luik" + }, + { + "gewest": 3, + "niscode": "80000", + "naam": "Luxemburg" + }, + { + "gewest": 3, + "niscode": "90000", + "naam": "Namen" + } +] \ No newline at end of file diff --git a/crabpy/gateway/adressenregister.py b/crabpy/gateway/adressenregister.py new file mode 100644 index 0000000..cb3d588 --- /dev/null +++ b/crabpy/gateway/adressenregister.py @@ -0,0 +1,822 @@ +""" +This module contains an opionated gateway for the adressen register. + +.. versionadded:: 0.14.0 +""" +import json +import logging +import os + +from dogpile.cache import make_region +from dogpile.util import compat + +from crabpy.client import AdressenRegisterClient +from crabpy.gateway.exception import GatewayResourceNotFoundException + +LOG = logging.getLogger(__name__) +AUTO = object() + + +LONG_CACHE = make_region() +SHORT_CACHE = make_region() + + +def setup_cache(cache_settings): + if cache_settings is None: + if not LONG_CACHE.is_configured: + LONG_CACHE.configure("dogpile.cache.null") + if not SHORT_CACHE.is_configured: + SHORT_CACHE.configure("dogpile.cache.null") + else: + cache_settings["long.replace_existing_backend"] = True + LONG_CACHE.configure_from_config(cache_settings, "long.") + cache_settings["short.replace_existing_backend"] = True + SHORT_CACHE.configure_from_config(cache_settings, "short.") + + +def cache_on_attribute(attribute): + """ + Caches a method and uses an attribtue of the `self` in the caching key. + + Caching bound methods / instance methods without arguments which return + values dependant on the attributes of the instance can not work with the + normal `function_key_generator` from dogpile because the generated key + would be shared across different instances. + + This method returns a `function_key_generator` which will add an + instance attribute to the key so different instances can store their + cached data under a different key. + """ + + def function_key_generator(namespace, fn, to_str=str): + # Copy from dogpile.cache.util except the marked line(s) + + if namespace is None: + namespace = f"{fn.__module__}:{fn.__name__}" + else: + namespace = f"{fn.__module__}:{fn.__name__}|{namespace}" + + fn_args = compat.inspect_getargspec(fn) + has_self = fn_args[0] and fn_args[0][0] in ("self", "cls") + + def generate_key(*args, **kw): + if kw: + raise ValueError( + "dogpile.cache's default key creation " + "function does not accept keyword arguments." + ) + if has_self: + # Start of difference + args = [args[0].__class__.__name__, getattr(args[0], attribute)] + list( + args[1:] + ) + # End of difference + + return namespace + "|" + " ".join(map(to_str, args)) + + return generate_key + + return function_key_generator + + +class LazyProperty: + """ + A lazy property is a cached_property which can also be set a value. + + A lazy property will remember the value once it has been accessed once. + The code inside the property will run maximum 1 time per instance. + When the property is given a value, the code inside will never run and + the given value will be returned when retrieving the property. + """ + + def __init__(self, method): + super().__init__() + self.method = method + self.cache_name = f"_cache_{self.method.__name__}" + + def __get__(self, instance, owner): + try: + return getattr(instance, self.cache_name) + except AttributeError: + value = self.method(instance) + setattr(instance, self.cache_name, value) + return value + + def __set__(self, instance, value): + setattr(instance, self.cache_name, value) + + +class Gateway: + """A gateway to the adressen register.""" + + def __init__(self, client: AdressenRegisterClient, cache_settings=None): + self.client = client + + def deelgemeente_from_json_data(data): + return Deelgemeente( + id_=data["id"], + naam=data["naam"], + gemeente_niscode=data["gemeente_niscode"], + gateway=self, + ) + + def gewest_from_json_data(data): + return Gewest( + id_=data["id"], + naam=data["naam"], + centroid=data["centroid"], + bounding_box=data["bounding_box"], + gateway=self, + ) + + def provincie_from_json_data(data): + return Provincie( + niscode=data["niscode"], + naam=data["naam"], + gewest=data["gewest"], + gateway=self, + ) + + data_dir = os.path.join(os.path.dirname(__file__), "..", "data") + with open(os.path.join(data_dir, "deelgemeenten.json"), encoding="utf-8") as f: + self.deelgemeenten = json.load(f, object_hook=deelgemeente_from_json_data) + with open(os.path.join(data_dir, "gewesten.json"), encoding="utf-8") as f: + self.gewesten = json.load(f, object_hook=gewest_from_json_data) + with open(os.path.join(data_dir, "provincies.json"), encoding="utf-8") as f: + self.provincies = json.load(f, object_hook=provincie_from_json_data) + + setup_cache(cache_settings) + + def list_gewesten(self): + return self.gewesten + + def get_gewest_by_id(self, id_): + """ + Get a `gewest` by id. + + :param integer id_: The id of a `gewest`. + :rtype: A :class:`Gewest`. + """ + for gewest in self.gewesten: + if gewest.id == id_: + return gewest + raise GatewayResourceNotFoundException() + + def list_provincies(self, gewest=2): + """ + List all `provincies` in a `gewest`. + + :param gewest: The :class:`Gewest` for which the \ + `provincies` are wanted. + :rtype: A :class:`list` of :class:`Provincie`. + """ + return [ + provincie for provincie in self.provincies if provincie.gewest == gewest + ] + + def get_provincie_by_id(self, niscode): + """ + Retrieve a `provincie` by the niscode. + + :param str niscode: The niscode of the provincie. + :rtype: :class:`Provincie` + """ + niscode = str(niscode) + for provincie in self.provincies: + if provincie.niscode == niscode: + return provincie + return None + + @LONG_CACHE.cache_on_arguments() + def list_gemeenten_by_provincie(self, provincie): + """ + List all `gemeenten` in a `provincie`. + + :param provincie: The :class:`Provincie` for which the \ + `gemeenten` are wanted. + :rtype: A :class:`list` of :class:`Gemeente`. + """ + if not isinstance(provincie, Provincie): + provincie = self.get_provincie_by_id(provincie) + first_niscode_digit = str(provincie.niscode)[0] + return [ + Gemeente.from_list_response(gemeente, self) + for gemeente in self.client.get_gemeenten() + if gemeente["identificator"]["objectId"][0] == first_niscode_digit + ] + + @LONG_CACHE.cache_on_arguments() + def list_gemeenten(self, gewest=2): + """ + List all `gemeenten` in a `gewest`. + + :param gewest: The :class:`Gewest` for which the \ + `gemeenten` are wanted. + :rtype: A :class:`list` of :class:`Gemeente`. + """ + first_niscode_digits = [ + provincie.niscode[0] + for provincie in self.list_provincies(gewest=gewest) + if provincie.gewest == gewest or gewest is None + ] + return [ + Gemeente.from_list_response(gemeente, self) + for gemeente in self.client.get_gemeenten() + if gemeente["identificator"]["objectId"][0] in first_niscode_digits + ] + + @LONG_CACHE.cache_on_arguments() + def get_gemeente_by_id(self, gemeente_id): + """ + Retrieve a `gemeente` by the crab id. + + :param integer gemeente_id: The niscode of the gemeente. + :rtype: :class:`Gemeente` + """ + return Gemeente.from_get_response(self.client.get_gemeente(gemeente_id), self) + + @LONG_CACHE.cache_on_arguments() + def get_gemeente_by_niscode(self, niscode): + """ + Retrieve a `gemeente` by the NIScode. + + :param integer niscode: The NIScode of the gemeente. + :rtype: :class:`Gemeente` + """ + return Gemeente.from_get_response(self.client.get_gemeente(niscode), self) + + @LONG_CACHE.cache_on_arguments() + def list_deelgemeenten(self, gewest=2): + """ + List all `deelgemeenten` in a `gewest`. + + :param gewest: The :class:`Gewest` for which the \ + `deelgemeenten` are wanted. Currently only Flanders is supported. + :rtype: A :class:`list` of :class:`Deelgemeente`. + """ + first_niscode_digits = [ + provincie.niscode[0] + for provincie in self.list_provincies(gewest=gewest) + if provincie.gewest == gewest or gewest is None + ] + return [ + deelgemeente + for deelgemeente in self.deelgemeenten + if deelgemeente.id[0] in first_niscode_digits + ] + + @LONG_CACHE.cache_on_arguments() + def list_deelgemeenten_by_gemeente(self, gemeente): + """ + List all `deelgemeenten` in a `gemeente`. + + :param gemeente: The :class:`Gemeente` for which the \ + `deelgemeenten` are wanted. Currently only Flanders is supported. + :rtype: A :class:`list` of :class:`Deelgemeente`. + """ + if not isinstance(gemeente, Gemeente): + gemeente = self.get_gemeente_by_niscode(gemeente) + return [ + deelgemeente + for deelgemeente in self.deelgemeenten + if deelgemeente.gemeente_niscode == gemeente.niscode + ] + + @LONG_CACHE.cache_on_arguments() + def get_deelgemeente_by_id(self, deelgemeente_id): + """ + Retrieve a `deelgemeente` by the id. + + :param string deelgemeente_id: The id of the deelgemeente. + :rtype: :class:`Deelgemeente` + """ + return next( + ( + deelgemeente + for deelgemeente in self.deelgemeenten + if deelgemeente.id == deelgemeente_id + ), + None, + ) + + @LONG_CACHE.cache_on_arguments() + def list_straten(self, gemeente): + """ + List all `straten` in a `Gemeente`. + + :param gemeente: The :class:`Gemeente` for which the \ + `straten` are wanted. + :rtype: A :class:`list` of :class:`Straat` + """ + if not isinstance(gemeente, Gemeente): + gemeente = self.get_gemeente_by_niscode(gemeente) + return [ + Straat.from_list_response(straat, self) + for straat in self.client.get_straatnamen(gemeentenaam=gemeente.naam) + ] + + @LONG_CACHE.cache_on_arguments() + def get_straat_by_id(self, straat_id): + """ + Retrieve a `straat` by the Id. + + :param integer straat_id: The id of the `straat`. + :rtype: :class:`Straat` + """ + return Straat.from_get_response(self.client.get_straatnaam(straat_id), self) + + @SHORT_CACHE.cache_on_arguments() + def list_adressen_by_straat(self, straat): + """ + List all `adressen` in a `Straat`. + + :param straat: The :class:`Straat` for which the \ + `adressen` are wanted. + :rtype: A :class:`list` of :class:`Adres` + """ + if not isinstance(straat, Straat): + straat = self.get_straat_by_id(straat) + return [ + Adres.from_list_response(adres, self) + for adres in self.client.get_adressen(straatnaam=straat.naam) + ] + + @SHORT_CACHE.cache_on_arguments() + def list_adressen_by_perceel(self, perceel): + """ + List all `adressen` in a `Perceel`. + + :param perceel: The :class:`Perceel` for which the \ + `adressen` are wanted. + :rtype: A :class:`list` of :class:`Adres` + """ + if not isinstance(perceel, Perceel): + perceel = self.get_perceel_by_id(perceel) + return perceel.adressen + + @SHORT_CACHE.cache_on_arguments() + def get_perceel_by_id(self, perceel_id): + """ + Retrieve a `Perceel` by the Id. + + :param string perceel_id: the Id of the `Perceel` + :rtype: :class:`Perceel` + """ + return Perceel.from_get_response(self.client.get_perceel(perceel_id), self) + + @SHORT_CACHE.cache_on_arguments() + def get_gebouw_by_id(self, gebouw_id): + """ + Retrieve a `Gebouw` by the Id. + + :param str gebouw_id: the Id of the `Gebouw` + :rtype: :class:`Gebouw` + """ + return Gebouw.from_get_response(self.client.get_gebouw(gebouw_id), self) + + +class GatewayObject: + + def __init__(self, gateway): + self.gateway: Gateway = gateway + + +class Gewest(GatewayObject): + """ + A large administrative unit in Belgium. + + Belgium consists of 3 `gewesten`. Together they form the entire territory + of the country. + """ + + def __init__(self, id_, naam, centroid, bounding_box, gateway=None): + super().__init__(gateway=gateway) + self.id = int(id_) + self.naam = naam + self.centroid = centroid + self.bounding_box = bounding_box + + @LazyProperty + def provincies(self): + return self.gateway.list_provincies(gewest=self.id) + + @LazyProperty + def gemeenten(self): + return self.gateway.list_gemeenten(self.id) + + def __str__(self): + if self.naam is not None: + return f"{self.naam} ({self.id})" + else: + return f"Gewest {self.id}" + + def __repr__(self): + attrs = [ + f"{attr}={repr(getattr(self, attr))}" + for attr in ["id", "naam", "centroid", "bounding_box"] + ] + return f"Gewest({', '.join(attrs)})" + + +class Provincie(GatewayObject): + """ + The largest administrative unit within a :class:`Gewest`. + + .. versionadded:: 0.4.0 + """ + + def __init__(self, niscode, naam, gewest, gateway): + super().__init__(gateway) + self.niscode = niscode + self.naam = naam + self.gewest = gewest + + @LazyProperty + def gemeenten(self): + return self.gateway.list_gemeenten_by_provincie(self) + + def __str__(self): + return f"{self.naam} ({self.niscode})" + + def __repr__(self): + attrs = [ + f"{attr}={repr(getattr(self, attr))}" + for attr in ["niscode", "naam", "gewest"] + ] + return f"Gewest({', '.join(attrs)})" + + +class Gemeente(GatewayObject): + """ + The smallest administrative unit in Belgium. + """ + + def __init__(self, niscode, gateway, naam=AUTO, taal=AUTO): + super().__init__(gateway) + self.niscode = niscode + if naam is not AUTO: + self.naam = naam + if taal is not AUTO: + self.taal = taal + + @classmethod + def from_list_response(cls, gemeente, gateway): + return Gemeente( + naam=gemeente["gemeentenaam"]["geografischeNaam"]["spelling"], + niscode=gemeente["identificator"]["objectId"], + taal=gemeente["gemeentenaam"]["geografischeNaam"]["taal"], + gateway=gateway, + ) + + @classmethod + def from_get_response(cls, gemeente, gateway): + res = Gemeente(niscode=gemeente["identificator"]["objectId"], gateway=gateway) + res._source_json = gemeente + return res + + @LazyProperty + def taal(self): + taal_nl = False + taal_fr = False + for naam in self._source_json["straatnamen"]: + if naam["taal"] == "nl": + taal_nl = True + elif naam["taal"] == "fr": + taal_fr = True + return "nl" if taal_nl else ("fr" if taal_fr else None) + + @LazyProperty + def naam(self): + naam_nl = None + naam_fr = None + for naam in self._source_json["gemeentenamen"]: + if naam["taal"] == "nl": + naam_nl = naam["spelling"] + elif naam["taal"] == "fr": + naam_fr = naam["spelling"] + return naam_nl or naam_fr + + @LazyProperty + def straten(self): + return self.gateway.list_straten(self) + + @LazyProperty + def provincie(self): + for p in self.gateway.provincies: + if self.niscode[0] == p.niscode[0]: + return p + + @LazyProperty + @SHORT_CACHE.cache_on_arguments( + function_key_generator=cache_on_attribute("niscode") + ) + def _source_json(self): + return self.gateway.client.get_gemeente(self.niscode) + + def __str__(self): + return f"{self.naam} ({self.niscode})" + + def __repr__(self): + attrs = [ + f"{attr}={repr(getattr(self, attr))}" + for attr in ["niscode", "naam", "taal"] + ] + return f"Gewest({', '.join(attrs)})" + + +class Deelgemeente(GatewayObject): + """ + A subdivision of a :class:`Gemeente`. + + .. versionadded:: 0.7.0 + """ + + def __init__(self, id_, naam, gemeente_niscode, gateway): + super().__init__(gateway) + self.id = id_ + self.naam = naam + self.gemeente_niscode = gemeente_niscode + + @LazyProperty + def gemeente(self): + return Gemeente(niscode=self.gemeente_niscode, gateway=self.gateway) + + def __str__(self): + return f"{self.naam} ({self.id})" + + def __repr__(self): + attrs = [ + f"{attr}={repr(getattr(self, attr))}" + for attr in ["id", "naam", "gemeente_niscode"] + ] + return f"Gewest({', '.join(attrs)})" + + +class Straat(GatewayObject): + """ + A street. + + A street object is always located in one and exactly one :class:`Gemeente`. + """ + + def __init__(self, id_, gateway, gemeente=AUTO, status=AUTO, naam=AUTO, taal=AUTO): + super().__init__(gateway) + self.id = id_ + if naam is not AUTO: + self.naam = naam + if taal is not AUTO: + self.taal = taal + if status is not AUTO: + self.status = status + if gemeente is not AUTO: + self.gemeente = gemeente + + @classmethod + def from_list_response(cls, straat, gateway): + return Straat( + id_=straat["identificator"]["objectId"], + taal=straat["straatnaam"]["geografischeNaam"]["taal"], + status=straat["straatnaamStatus"], + naam=straat["straatnaam"]["geografischeNaam"]["spelling"], + gateway=gateway, + ) + + @classmethod + def from_get_response(cls, straat, gateway): + res = Straat(id_=straat["identificator"]["objectId"], gateway=gateway) + res._source_json = straat + return res + + @LazyProperty + def taal(self): + taal_nl = False + taal_fr = False + for naam in self._source_json["straatnamen"]: + if naam["taal"] == "nl": + taal_nl = True + elif naam["taal"] == "fr": + taal_fr = True + return "nl" if taal_nl else ("fr" if taal_fr else None) + + @LazyProperty + def naam(self): + naam_nl = None + naam_fr = None + for naam in self._source_json["straatnamen"]: + if naam["taal"] == "nl": + naam_nl = naam["spelling"] + elif naam["taal"] == "fr": + naam_fr = naam["spelling"] + return naam_nl or naam_fr + + @LazyProperty + def status(self): + return self._source_json["straatnaamStatus"] + + @LazyProperty + def gemeente(self): + return Gemeente( + niscode=self._source_json["gemeente"]["objectId"], gateway=self.gateway + ) + + @LazyProperty + def adressen(self): + return self.gateway.list_adressen_by_straat(self) + + @LazyProperty + @SHORT_CACHE.cache_on_arguments( + function_key_generator=cache_on_attribute("id") + ) + def _source_json(self): + return self.gateway.client.get_straatnaam(self.id) + + def __str__(self): + return f"{self.naam} ({self.id})" + + def __repr__(self): + attrs = [ + f"{attr}={repr(getattr(self, attr))}" + for attr in ["id", "gemeente", "status", "naam", "taal"] + ] + return f"Gewest({', '.join(attrs)})" + + +class Adres(GatewayObject): + """ + An address. + + An address object is always located in one and exactly one :class:`Gemeente`. + """ + + def __init__( + self, + id_, + gateway, + status=AUTO, + huisnummer=AUTO, + label=AUTO, + taal=AUTO, + gemeente=AUTO, + ): + super().__init__(gateway=gateway) + self.id = id_ + if label is not AUTO: + self.label = label + if taal is not AUTO: + self.taal = taal + if huisnummer is not AUTO: + self.huisnummer = huisnummer + if status is not AUTO: + self.status = status + if gemeente is not AUTO: + self.gemeente = gemeente + + @classmethod + def from_list_response(cls, adres, gateway): + return Adres( + id_=adres["identificator"]["objectId"], + label=adres["volledigAdres"]["geografischeNaam"]["spelling"], + taal=adres["volledigAdres"]["geografischeNaam"]["taal"], + huisnummer=adres["huisnummer"], + status=adres["adresStatus"], + gateway=gateway, + ) + + @classmethod + def from_get_response(cls, adres, gateway): + res = Adres(id_=adres["identificator"]["objectId"], gateway=gateway) + res._source_json = adres + return res + + @LazyProperty + def label(self): + return self._source_json["volledigAdres"]["geografischeNaam"]["spelling"] + + @LazyProperty + def taal(self): + return self._source_json["volledigAdres"]["geografischeNaam"]["taal"] + + @LazyProperty + def huisnummer(self): + return self._source_json["huisnummer"] + + @LazyProperty + def gemeente(self): + return Gemeente( + niscode=self._source_json["gemeente"]["objectId"], gateway=self.gateway + ) + + @LazyProperty + @SHORT_CACHE.cache_on_arguments( + function_key_generator=cache_on_attribute("id") + ) + def _source_json(self): + return self.gateway.client.get_adres(self.id) + + def __str__(self): + return f"{self.label} ({self.id})" + + def __repr__(self): + attrs = [ + f"{attr}={repr(getattr(self, attr))}" + for attr in ["id", "status", "huisnummer", "label", "taal", "gemeente"] + ] + return f"Gewest({', '.join(attrs)})" + + +class Perceel(GatewayObject): + """A cadastral Parcel.""" + + def __init__(self, id_, gateway, status=AUTO): + super().__init__(gateway=gateway) + self.id = id_ + if status is not AUTO: + self.status = status + + @classmethod + def from_get_response(cls, perceel, gateway): + res = Perceel( + id_=perceel["identificator"]["objectId"], + gateway=gateway, + ) + res._source_json = perceel + return res + + @LazyProperty + @SHORT_CACHE.cache_on_arguments( + function_key_generator=cache_on_attribute("id") + ) + def _source_json(self): + return self.gateway.client.get_perceel(self.id) + + @LazyProperty + def status(self): + return self._source_json["perceelStatus"] + + @LazyProperty + def adressen(self): + return [ + Adres(id_=adres["objectId"], gateway=self.gateway) + for adres in self._source_json["adressen"] + ] + + def __str__(self): + return f"Perceel {self.id}" + + def __repr__(self): + attrs = [f"{attr}={repr(getattr(self, attr))}" for attr in ["id", "status"]] + return f"Gewest({', '.join(attrs)})" + + +class Gebouw(GatewayObject): + """ + A building. + """ + + def __init__(self, id_, gateway, status=AUTO, percelen=AUTO, geojson=AUTO): + super().__init__(gateway=gateway) + self.id = id_ + if status is not AUTO: + self.status = status + if percelen is not AUTO: + self.percelen = percelen + if geojson is not AUTO: + self.geojson = geojson + + @classmethod + def from_get_response(cls, gebouw, gateway): + res = Gebouw(id_=gebouw["identificator"]["objectId"], gateway=gateway) + res._source_json = gebouw + return res + + @LazyProperty + def status(self): + return self._source_json["gebouwStatus"] + + @LazyProperty + def percelen(self): + return [ + Perceel(id_=perceel["objectId"], gateway=self.gateway) + for perceel in self._source_json["percelen"] + ] + + @LazyProperty + def geojson(self): + return self._source_json["geometriePolygoon"] + + @LazyProperty + @SHORT_CACHE.cache_on_arguments( + function_key_generator=cache_on_attribute("id") + ) + def _source_json(self): + return self.gateway.client.get_gebouw(self.id) + + def __str__(self): + return f"Gebouw {self.id}" + + def __repr__(self): + attrs = [ + f"{attr}={repr(getattr(self, attr))}" + for attr in ["id", "status", "percelen", "geojson"] + ] + return f"Gewest({', '.join(attrs)})" diff --git a/crabpy/gateway/capakey.py b/crabpy/gateway/capakey.py index f774e25..55eb675 100644 --- a/crabpy/gateway/capakey.py +++ b/crabpy/gateway/capakey.py @@ -1,37 +1,30 @@ -# -*- coding: utf-8 -*- -''' +""" This module contains an opionated gateway for the capakey webservice. .. versionadded:: 0.2.0 -''' +""" -from __future__ import unicode_literals -import six import json - import logging -log = logging.getLogger(__name__) - -from crabpy.gateway.exception import ( - GatewayRuntimeException, - GatewayResourceNotFoundException -) - +import requests from dogpile.cache import make_region -import requests +from crabpy.gateway.exception import GatewayResourceNotFoundException +from crabpy.gateway.exception import GatewayRuntimeException + +log = logging.getLogger(__name__) def capakey_rest_gateway_request(url, headers={}, params={}): - ''' + """ Utility function that helps making requests to the CAPAKEY REST service. :param string url: URL to request. :param dict headers: Headers to send with the URL. :param dict params: Parameters to send with the URL. :returns: Result of the call. - ''' + """ try: res = requests.get(url, headers=headers, params=params) res.raise_for_status() @@ -50,12 +43,12 @@ def capakey_rest_gateway_request(url, headers={}, params={}): ) -class CapakeyRestGateway(object): - ''' +class CapakeyRestGateway: + """ A REST gateway to the capakey webservice. .. versionadded:: 0.8.0 - ''' + """ caches = {} @@ -81,35 +74,35 @@ def __init__(self, **kwargs): @staticmethod def _parse_centroid(center): - ''' + """ Parse response center from the CapakeyRestGateway to (CenterX, CenterY) :param center: response center from the CapakeyRestGateway :return: (CenterX, CenterY) - ''' + """ coordinates = json.loads(center)["coordinates"] return coordinates[0], coordinates[1] @staticmethod def _parse_bounding_box(bounding_box): - ''' + """ Parse response bounding box from the CapakeyRestGateway to (MinimumX, MinimumY, MaximumX, MaximumY) :param bounding_box: response bounding box from the CapakeyRestGateway :return: (MinimumX, MinimumY, MaximumX, MaximumY) - ''' + """ coordinates = json.loads(bounding_box)["coordinates"] x_coords = [x for x, y in coordinates[0]] y_coords = [y for x, y in coordinates[0]] return min(x_coords), min(y_coords), max(x_coords), max(y_coords) def list_gemeenten(self, sort=1): - ''' + """ List all `gemeenten` in Vlaanderen. :param integer sort: What field to sort on. :rtype: A :class:`list` of :class:`Gemeente`. - ''' + """ def creator(): url = self.base_url + '/municipality' @@ -133,11 +126,11 @@ def creator(): return gemeente def get_gemeente_by_id(self, id): - ''' + """ Retrieve a `gemeente` by id (the NIScode). :rtype: :class:`Gemeente` - ''' + """ def creator(): url = self.base_url + '/municipality/%s' % id @@ -164,12 +157,12 @@ def creator(): return gemeente def list_kadastrale_afdelingen(self): - ''' + """ List all `kadastrale afdelingen` in Flanders. :param integer sort: Field to sort on. :rtype: A :class:`list` of :class:`Afdeling`. - ''' + """ def creator(): gemeentes = self.list_gemeenten() @@ -186,14 +179,14 @@ def creator(): return afdelingen def list_kadastrale_afdelingen_by_gemeente(self, gemeente, sort=1): - ''' + """ List all `kadastrale afdelingen` in a `gemeente`. :param gemeente: The :class:`Gemeente` for which the \ `afdelingen` are wanted. :param integer sort: Field to sort on. :rtype: A :class:`list` of :class:`Afdeling`. - ''' + """ try: gid = gemeente.id except AttributeError: @@ -216,7 +209,7 @@ def creator(): ) for r in res['departments']] if self.caches['permanent'].is_configured: - key = 'list_kadastrale_afdelingen_by_gemeente_rest#%s#%s' % (gid, sort) + key = f'list_kadastrale_afdelingen_by_gemeente_rest#{gid}#{sort}' afdelingen = self.caches['permanent'].get_or_create(key, creator) else: afdelingen = creator() @@ -225,12 +218,12 @@ def creator(): return afdelingen def get_kadastrale_afdeling_by_id(self, aid): - ''' + """ Retrieve a 'kadastrale afdeling' by id. :param aid: An id of a `kadastrale afdeling`. :rtype: A :class:`Afdeling`. - ''' + """ def creator(): url = self.base_url + '/department/%s' % (aid) @@ -258,13 +251,13 @@ def creator(): return afdeling def list_secties_by_afdeling(self, afdeling): - ''' + """ List all `secties` in a `kadastrale afdeling`. :param afdeling: The :class:`Afdeling` for which the `secties` are \ wanted. Can also be the id of and `afdeling`. :rtype: A :class:`list` of `Sectie`. - ''' + """ try: aid = afdeling.id gid = afdeling.gemeente.id @@ -275,7 +268,7 @@ def list_secties_by_afdeling(self, afdeling): afdeling.clear_gateway() def creator(): - url = self.base_url + '/municipality/%s/department/%s/section' % (gid, aid) + url = self.base_url + f'/municipality/{gid}/department/{aid}/section' h = self.base_headers res = capakey_rest_gateway_request(url, h).json() return [ @@ -295,14 +288,14 @@ def creator(): return secties def get_sectie_by_id_and_afdeling(self, id, afdeling): - ''' + """ Get a `sectie`. :param id: An id of a sectie. eg. "A" :param afdeling: The :class:`Afdeling` for in which the `sectie` can \ be found. Can also be the id of and `afdeling`. :rtype: A :class:`Sectie`. - ''' + """ try: aid = afdeling.id except AttributeError: @@ -311,7 +304,7 @@ def get_sectie_by_id_and_afdeling(self, id, afdeling): afdeling.clear_gateway() def creator(): - url = self.base_url + '/municipality/%s/department/%s/section/%s' % (afdeling.gemeente.id, afdeling.id, id) + url = self.base_url + f'/municipality/{afdeling.gemeente.id}/department/{afdeling.id}/section/{id}' h = self.base_headers p = { 'geometry': 'full', @@ -327,7 +320,7 @@ def creator(): ) if self.caches['long'].is_configured: - key = 'get_sectie_by_id_and_afdeling_rest#%s#%s' % (id, aid) + key = f'get_sectie_by_id_and_afdeling_rest#{id}#{aid}' sectie = self.caches['long'].get_or_create(key, creator) else: sectie = creator() @@ -367,20 +360,20 @@ def parse_capakey(self, percid): ) def list_percelen_by_sectie(self, sectie): - ''' + """ List all percelen in a `sectie`. :param sectie: The :class:`Sectie` for which the percelen are wanted. :param integer sort: Field to sort on. :rtype: A :class:`list` of :class:`Perceel`. - ''' + """ sid = sectie.id aid = sectie.afdeling.id gid = sectie.afdeling.gemeente.id sectie.clear_gateway() def creator(): - url = self.base_url + '/municipality/%s/department/%s/section/%s/parcel' % (gid, aid, sid) + url = self.base_url + f'/municipality/{gid}/department/{aid}/section/{sid}/parcel' h = self.base_headers p = { 'data': 'adp', @@ -397,7 +390,7 @@ def creator(): ] if self.caches['short'].is_configured: - key = 'list_percelen_by_sectie_rest#%s#%s#%s' % (gid, aid, sid) + key = f'list_percelen_by_sectie_rest#{gid}#{aid}#{sid}' percelen = self.caches['short'].get_or_create(key, creator) else: percelen = creator() @@ -406,20 +399,20 @@ def creator(): return percelen def get_perceel_by_id_and_sectie(self, id, sectie): - ''' + """ Get a `perceel`. :param id: An id for a `perceel`. :param sectie: The :class:`Sectie` that contains the perceel. :rtype: :class:`Perceel` - ''' + """ sid = sectie.id aid = sectie.afdeling.id gid = sectie.afdeling.gemeente.id sectie.clear_gateway() def creator(): - url = self.base_url + '/municipality/%s/department/%s/section/%s/parcel/%s' % ( + url = self.base_url + '/municipality/{}/department/{}/section/{}/parcel/{}'.format( gid, aid, sid, id) h = self.base_headers p = { @@ -443,7 +436,7 @@ def creator(): ) if self.caches['short'].is_configured: - key = 'get_perceel_by_id_and_sectie_rest#%s#%s#%s' % (id, sectie.id, sectie.afdeling.id) + key = f'get_perceel_by_id_and_sectie_rest#{id}#{sectie.id}#{sectie.afdeling.id}' perceel = self.caches['short'].get_or_create(key, creator) else: perceel = creator() @@ -490,91 +483,87 @@ def creator(): return perceel def get_perceel_by_capakey(self, capakey): - ''' + """ Get a `perceel`. :param capakey: An capakey for a `perceel`. :rtype: :class:`Perceel` - ''' + """ url = self.base_url + '/parcel/%s' % capakey cache_key = 'get_perceel_by_capakey_rest#%s' % capakey return self._get_perceel_by(url, cache_key) def get_perceel_by_coordinates(self, x, y): - ''' + """ Get a `perceel`. :param capakey: An capakey for a `perceel`. :rtype: :class:`Perceel` - ''' + """ - url = self.base_url + '/parcel?x=%s&y=%s' % (x, y) - cache_key = 'get_perceel_by_coordinates_rest#%s%s' % (x, y) + url = self.base_url + f'/parcel?x={x}&y={y}' + cache_key = f'get_perceel_by_coordinates_rest#{x}{y}' return self._get_perceel_by(url, cache_key) def get_perceel_by_percid(self, percid): - ''' + """ Get a `perceel`. :param percid: A percid for a `perceel`. :rtype: :class:`Perceel` - ''' + """ return self.get_perceel_by_capakey( Perceel.get_capakey_from_percid(percid) ) -class GatewayObject(object): - ''' +class GatewayObject: + """ Abstract class for all objects being returned from the Gateway. - ''' + """ gateway = None - ''' + """ The :class:`crabpy.gateway.capakey.CapakeyGateway` to use when making further calls to the Capakey service. - ''' + """ def __init__(self, **kwargs): if 'gateway' in kwargs: self.set_gateway(kwargs['gateway']) def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.capakey.CapakeyGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway def clear_gateway(self): - ''' + """ Clear the currently set CapakeyGateway. - ''' + """ self.gateway = None def check_gateway(self): - ''' + """ Check to see if a gateway was set on this object. - ''' + """ if not self.gateway: raise RuntimeError("There's no Gateway I can use") - if six.PY2: - def __str__(self): - return self.__unicode__().encode('utf-8') - else: - def __str__(self): - return self.__unicode__() + def __str__(self): + return self.__unicode__() def check_lazy_load_gemeente(f): - ''' + """ Decorator function to lazy load a :class:`Gemeente`. - ''' + """ def wrapper(self): gemeente = self - if (getattr(gemeente, '_%s' % f.__name__, None) is None): + if getattr(gemeente, '_%s' % f.__name__, None) is None: log.debug('Lazy loading Gemeente %d', gemeente.id) gemeente.check_gateway() g = gemeente.gateway.get_gemeente_by_id(gemeente.id) @@ -587,9 +576,9 @@ def wrapper(self): class Gemeente(GatewayObject): - ''' + """ The smallest administrative unit in Belgium. - ''' + """ def __init__( self, id, naam=None, @@ -601,7 +590,7 @@ def __init__( self._centroid = centroid self._bounding_box = bounding_box self.shape = shape - super(Gemeente, self).__init__(**kwargs) + super().__init__(**kwargs) @property @check_lazy_load_gemeente @@ -624,16 +613,16 @@ def afdelingen(self): return self.gateway.list_kadastrale_afdelingen_by_gemeente(self) def __unicode__(self): - return '%s (%s)' % (self.naam, self.id) + return f'{self.naam} ({self.id})' def __repr__(self): - return "Gemeente(%s, '%s')" % (self.id, self.naam) + return f"Gemeente({self.id}, '{self.naam}')" def check_lazy_load_afdeling(f): - ''' + """ Decorator function to lazy load a :class:`Afdeling`. - ''' + """ def wrapper(self): afdeling = self @@ -651,9 +640,9 @@ def wrapper(self): class Afdeling(GatewayObject): - ''' + """ A Cadastral Division of a :class:`Gemeente`. - ''' + """ def __init__( self, id, naam=None, gemeente=None, @@ -666,20 +655,20 @@ def __init__( self._centroid = centroid self._bounding_box = bounding_box self.shape = shape - super(Afdeling, self).__init__(**kwargs) + super().__init__(**kwargs) def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.capakey.CapakeyGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway if (self._gemeente is not None): self._gemeente.set_gateway(gateway) def clear_gateway(self): - ''' + """ Clear the currently set CapakeyGateway. - ''' + """ self.gateway = None if (self._gemeente is not None): self._gemeente.clear_gateway() @@ -711,21 +700,21 @@ def secties(self): def __unicode__(self): if self._naam is not None: - return '%s (%s)' % (self._naam, self.id) + return f'{self._naam} ({self.id})' else: return 'Afdeling %s' % (self.id) def __repr__(self): if self._naam is not None: - return "Afdeling(%s, '%s')" % (self.id, self._naam) + return f"Afdeling({self.id}, '{self._naam}')" else: return 'Afdeling(%s)' % (self.id) def check_lazy_load_sectie(f): - ''' + """ Decorator function to lazy load a :class:`Sectie`. - ''' + """ def wrapper(self): sectie = self @@ -743,9 +732,9 @@ def wrapper(self): class Sectie(GatewayObject): - ''' + """ A subdivision of a :class:`Afdeling`. - ''' + """ def __init__( self, id, afdeling, @@ -757,19 +746,19 @@ def __init__( self._centroid = centroid self._bounding_box = bounding_box self.shape = shape - super(Sectie, self).__init__(**kwargs) + super().__init__(**kwargs) def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.capakey.CapakeyGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway self.afdeling.set_gateway(gateway) def clear_gateway(self): - ''' + """ Clear the currently set CapakeyGateway. - ''' + """ self.gateway = None self.afdeling.clear_gateway() @@ -789,16 +778,16 @@ def percelen(self): return self.gateway.list_percelen_by_sectie(self) def __unicode__(self): - return '%s, Sectie %s' % (self.afdeling, self.id) + return f'{self.afdeling}, Sectie {self.id}' def __repr__(self): - return "Sectie('%s', %s)" % (self.id, repr(self.afdeling)) + return f"Sectie('{self.id}', {repr(self.afdeling)})" def check_lazy_load_perceel(f): - ''' + """ Decorator function to lazy load a :class:`Perceel`. - ''' + """ def wrapper(self): perceel = self @@ -824,9 +813,9 @@ def wrapper(self): class Perceel(GatewayObject): - ''' + """ A Cadastral Parcel. - ''' + """ def __init__( self, id, sectie, capakey, percid, adres=None, @@ -844,20 +833,20 @@ def __init__( self._centroid = centroid self._bounding_box = bounding_box self.shape = shape - super(Perceel, self).__init__(**kwargs) + super().__init__(**kwargs) self._split_capakey() def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.capakey.CapakeyGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway self.sectie.set_gateway(gateway) def clear_gateway(self): - ''' + """ Clear the currently set CapakeyGateway. - ''' + """ self.gateway = None self.sectie.clear_gateway() @@ -896,11 +885,11 @@ def get_capakey_from_percid(percid): ) def _split_capakey(self): - ''' + """ Split a capakey into more readable elements. Splits a capakey into it's grondnummer, bisnummer, exponent and macht. - ''' + """ import re match = re.match( r"^[0-9]{5}[A-Z]{1}([0-9]{4})\/([0-9]{2})([A-Z\_]{1})([0-9]{3})$", @@ -940,6 +929,6 @@ def __unicode__(self): return self.capakey def __repr__(self): - return "Perceel('%s', %s, '%s', '%s')" % ( + return "Perceel('{}', {}, '{}', '{}')".format( self.id, repr(self.sectie), self.capakey, self.percid ) diff --git a/crabpy/gateway/crab.py b/crabpy/gateway/crab.py index 3805c4c..77335d0 100644 --- a/crabpy/gateway/crab.py +++ b/crabpy/gateway/crab.py @@ -1,32 +1,22 @@ -# -*- coding: utf-8 -*- -''' +""" This module contains an opionated gateway for the crab webservice. .. versionadded:: 0.3.0 -''' +""" -from __future__ import unicode_literals -import six -import math import json -import os - -from io import open - import logging -log = logging.getLogger(__name__) - -from crabpy.client import crab_request +import math +import os +from dogpile.cache import make_region from suds import WebFault -from crabpy.gateway.exception import ( - GatewayRuntimeException, - GatewayResourceNotFoundException -) - -from dogpile.cache import make_region +from crabpy.client import crab_request +from crabpy.gateway.exception import GatewayResourceNotFoundException +from crabpy.gateway.exception import GatewayRuntimeException +log = logging.getLogger(__name__) parent_dir = os.path.dirname(__file__) data_dir = os.path.join(os.path.dirname(__file__), '..', 'data') deelgemeenten_json = json.load( @@ -36,7 +26,7 @@ def crab_gateway_request(client, method, *args): - ''' + """ Utility function that helps making requests to the CRAB service. This is a specialised version of :func:`crabpy.client.crab_request` that @@ -45,7 +35,7 @@ def crab_gateway_request(client, method, *args): :param client: A :class:`suds.client.Client` for the CRAB service. :param string action: Which method to call, eg. `ListGewesten` :returns: Result of the SOAP call. - ''' + """ try: return crab_request(client, method, *args) except WebFault as wf: @@ -56,10 +46,10 @@ def crab_gateway_request(client, method, *args): raise err -class CrabGateway(object): - ''' +class CrabGateway: + """ A gateway to the CRAB webservice. - ''' + """ caches = {} provincies = [ @@ -89,20 +79,20 @@ def __init__(self, client, **kwargs): '%s.' % cr ) self.deelgemeenten = { - dg['deelgemeente_id']: { - 'id': dg['deelgemeente_id'], - 'naam': dg['deelgemeente_naam'], - 'gemeente_niscode': int(dg['gemeente_id']) + dg['id']: { + 'id': dg['id'], + 'naam': dg['naam'], + 'gemeente_niscode': int(dg['gemeente_niscode']) } for dg in deelgemeenten_json } def list_gewesten(self, sort=1): - ''' + """ List all `gewesten` in Belgium. :param integer sort: What field to sort on. :rtype: A :class`list` of class: `Gewest`. - ''' + """ def creator(): res = crab_gateway_request(self.client, 'ListGewesten', sort) tmp = {} @@ -126,12 +116,12 @@ def creator(): return gewesten def get_gewest_by_id(self, id): - ''' + """ Get a `gewest` by id. :param integer id: The id of a `gewest`. :rtype: A :class:`Gewest`. - ''' + """ def creator(): nl = crab_gateway_request( self.client, 'GetGewestByGewestIdAndTaalCode', id, 'nl' @@ -163,14 +153,14 @@ def creator(): return gewest def list_provincies(self, gewest=2): - ''' + """ List all `provincies` in a `gewest`. :param gewest: The :class:`Gewest` for which the \ `provincies` are wanted. :param integer sort: What field to sort on. :rtype: A :class:`list` of :class:`Provincie`. - ''' + """ try: gewest_id = gewest.id except AttributeError: @@ -189,12 +179,12 @@ def creator(): return provincies def get_provincie_by_id(self, niscode): - ''' + """ Retrieve a `provincie` by the niscode. :param integer niscode: The niscode of the provincie. :rtype: :class:`Provincie` - ''' + """ def creator(): for p in self.provincies: if p[0] == niscode: @@ -211,13 +201,13 @@ def creator(): return provincie def list_gemeenten_by_provincie(self, provincie): - ''' + """ List all `gemeenten` in a `provincie`. :param provincie: The :class:`Provincie` for which the \ `gemeenten` are wanted. :rtype: A :class:`list` of :class:`Gemeente`. - ''' + """ try: gewest = provincie.gewest prov = provincie @@ -247,14 +237,14 @@ def creator(): return gemeente def list_gemeenten(self, gewest=2, sort=1): - ''' + """ List all `gemeenten` in a `gewest`. :param gewest: The :class:`Gewest` for which the \ `gemeenten` are wanted. :param integer sort: What field to sort on. :rtype: A :class:`list` of :class:`Gemeente`. - ''' + """ try: gewest_id = gewest.id except AttributeError: @@ -275,7 +265,7 @@ def creator(): )for r in res.GemeenteItem if r.TaalCode == r.TaalCodeGemeenteNaam ] if self.caches['permanent'].is_configured: - key = 'ListGemeentenByGewestId#%s#%s' % (gewest_id, sort) + key = f'ListGemeentenByGewestId#{gewest_id}#{sort}' gemeenten = self.caches['permanent'].get_or_create(key, creator) else: gemeenten = creator() @@ -284,12 +274,12 @@ def creator(): return gemeenten def get_gemeente_by_id(self, id): - ''' + """ Retrieve a `gemeente` by the crab id. :param integer id: The CRAB id of the gemeente. :rtype: :class:`Gemeente` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetGemeenteByGemeenteId', id @@ -320,12 +310,12 @@ def creator(): return gemeente def get_gemeente_by_niscode(self, niscode): - ''' + """ Retrieve a `gemeente` by the NIScode. :param integer niscode: The NIScode of the gemeente. :rtype: :class:`Gemeente` - ''' + """ def creator(): res = crab_gateway_request( @@ -357,13 +347,13 @@ def creator(): return gemeente def list_deelgemeenten(self, gewest=2): - ''' + """ List all `deelgemeenten` in a `gewest`. :param gewest: The :class:`Gewest` for which the \ `deelgemeenten` are wanted. Currently only Flanders is supported. :rtype: A :class:`list` of :class:`Deelgemeente`. - ''' + """ try: gewest_id = gewest.id except AttributeError: @@ -385,13 +375,13 @@ def creator(): return deelgemeenten def list_deelgemeenten_by_gemeente(self, gemeente): - ''' + """ List all `deelgemeenten` in a `gemeente`. :param gemeente: The :class:`Gemeente` for which the \ `deelgemeenten` are wanted. Currently only Flanders is supported. :rtype: A :class:`list` of :class:`Deelgemeente`. - ''' + """ try: niscode = gemeente.niscode except AttributeError: @@ -413,12 +403,12 @@ def creator(): return deelgemeenten def get_deelgemeente_by_id(self, id): - ''' + """ Retrieve a `deelgemeente` by the id. :param string id: The id of the deelgemeente. :rtype: :class:`Deelgemeente` - ''' + """ def creator(): if id in self.deelgemeenten: dg = self.deelgemeenten[id] @@ -453,172 +443,172 @@ def creator(): return creator() def list_talen(self, sort=1): - ''' + """ List all `talen`. :rtype: A :class:`list` of :class:`Taal` - ''' + """ return self._list_codeobject('ListTalen', sort, 'Taal') def list_bewerkingen(self, sort=1): - ''' + """ List all `bewerkingen`. :rtype: A :class:`list` of :class:`Bewerking` - ''' + """ return self._list_codeobject( 'ListBewerkingen', sort, 'Bewerking' ) def list_organisaties(self, sort=1): - ''' + """ List all `organisaties`. :rtype: A :class:`list` of :class:`Organisatie` - ''' + """ return self._list_codeobject( 'ListOrganisaties', sort, 'Organisatie' ) def list_aardsubadressen(self, sort=1): - ''' + """ List all `aardsubadressen`. :rtype: A :class:`list` of :class:`Aardsubadres` - ''' + """ return self._list_codeobject( 'ListAardSubadressen', sort, 'Aardsubadres' ) def list_aardadressen(self, sort=1): - ''' + """ List all `aardadressen`. :rtype: A :class:`list` of :class:`Aardadres` - ''' + """ return self._list_codeobject( 'ListAardAdressen', sort, 'Aardadres' ) def list_aardgebouwen(self, sort=1): - ''' + """ List all `aardgebouwen`. :rtype: A :class:`list` of :class:`Aardgebouw` - ''' + """ return self._list_codeobject( 'ListAardGebouwen', sort, 'Aardgebouw' ) def list_aardwegobjecten(self, sort=1): - ''' + """ List all `aardwegobjecten`. :rtype: A :class:`list` of :class:`Aardwegobject` - ''' + """ return self._list_codeobject( 'ListAardWegobjecten', sort, 'Aardwegobject' ) def list_aardterreinobjecten(self, sort=1): - ''' + """ List all `aardterreinobjecten`. :rtype: A :class:`list` of :class:`Aardterreinobject` - ''' + """ return self._list_codeobject( 'ListAardTerreinobjecten', sort, 'Aardterreinobject' ) def list_statushuisnummers(self, sort=1): - ''' + """ List all `statushuisnummers`. :rtype: A :class:`list` of :class:`Statushuisnummer` - ''' + """ return self._list_codeobject( 'ListStatusHuisnummers', sort, 'Statushuisnummer' ) def list_statussubadressen(self, sort=1): - ''' + """ List all `statussubadressen`. :rtype: A :class:`list` of :class:`Statussubadres` - ''' + """ return self._list_codeobject( 'ListStatusSubadressen', sort, 'Statussubadres' ) def list_statusstraatnamen(self, sort=1): - ''' + """ List all `statusstraatnamen`. :rtype: A :class:`list` of :class:`Statusstraatnaam` - ''' + """ return self._list_codeobject( 'ListStatusStraatnamen', sort, 'Statusstraatnaam' ) def list_statuswegsegmenten(self, sort=1): - ''' + """ List all `statuswegsegmenten`. :rtype: A :class:`list` of :class:`Statuswegsegment` - ''' + """ return self._list_codeobject( 'ListStatusWegsegmenten', sort, 'Statuswegsegment' ) def list_geometriemethodewegsegmenten(self, sort=1): - ''' + """ List all `geometriemethodewegsegmenten`. :rtype: A :class:`list` of :class:`Geometriemethodewegsegment` - ''' + """ return self._list_codeobject( 'ListGeometriemethodeWegsegmenten', sort, 'Geometriemethodewegsegment' ) def list_statusgebouwen(self, sort=1): - ''' + """ List all `statusgebouwen`. :rtype: A :class:`list` of :class:`Statusgebouwen` - ''' + """ return self._list_codeobject( 'ListStatusGebouwen', sort, 'Statusgebouw' ) def list_geometriemethodegebouwen(self, sort=1): - ''' + """ List all `geometriegebouwen`. :rtype: A :class:`list` of :class:`Geometriegebouw` - ''' + """ return self._list_codeobject( 'ListGeometriemethodeGebouwen', sort, 'Geometriemethodegebouw' ) def list_herkomstadresposities(self, sort=1): - ''' + """ List all `herkomstadresposities`. :rtype: A :class:`list` of :class:`Herkomstadrespositie` - ''' + """ return self._list_codeobject( 'ListHerkomstAdresposities', sort, 'Herkomstadrespositie' ) def list_straten(self, gemeente, sort=1): - ''' + """ List all `straten` in a `Gemeente`. :param gemeente: The :class:`Gemeente` for which the \ `straten` are wanted. :rtype: A :class:`list` of :class:`Straat` - ''' + """ try: id = gemeente.id except AttributeError: @@ -641,7 +631,7 @@ def creator(): except AttributeError: return [] if self.caches['long'].is_configured: - key = 'ListStraatnamenWithStatusByGemeenteId#%s%s' % (id, sort) + key = f'ListStraatnamenWithStatusByGemeenteId#{id}{sort}' straten = self.caches['long'].get_or_create(key, creator) else: straten = creator() @@ -650,12 +640,12 @@ def creator(): return straten def get_straat_by_id(self, id): - ''' + """ Retrieve a `straat` by the Id. :param integer id: The id of the `straat`. :rtype: :class:`Straat` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetStraatnaamWithStatusByStraatnaamId', id @@ -688,13 +678,13 @@ def creator(): return straat def list_huisnummers_by_straat(self, straat, sort=1): - ''' + """ List all `huisnummers` in a `Straat`. :param straat: The :class:`Straat` for which the \ `huisnummers` are wanted. :rtype: A :class: `list` of :class:`Huisnummer` - ''' + """ try: id = straat.id except AttributeError: @@ -717,7 +707,7 @@ def creator(): except AttributeError: return [] if self.caches['short'].is_configured: - key = 'ListHuisnummersWithStatusByStraatnaamId#%s%s' % (id, sort) + key = f'ListHuisnummersWithStatusByStraatnaamId#{id}{sort}' huisnummers = self.caches['short'].get_or_create(key, creator) else: huisnummers = creator() @@ -726,7 +716,7 @@ def creator(): return huisnummers def list_huisnummers_by_perceel(self, perceel, sort=1): - ''' + """ List all `huisnummers` on a `Pereel`. Generally there will only be one, but multiples are possible. @@ -734,7 +724,7 @@ def list_huisnummers_by_perceel(self, perceel, sort=1): :param perceel: The :class:`Perceel` for which the \ `huisnummers` are wanted. :rtype: A :class: `list` of :class:`Huisnummer` - ''' + """ try: id = perceel.id except AttributeError: @@ -755,7 +745,7 @@ def creator(): except AttributeError: return [] if self.caches['short'].is_configured: - key = 'ListHuisnummersWithStatusByIdentificatorPerceel#%s%s' % (id, sort) + key = f'ListHuisnummersWithStatusByIdentificatorPerceel#{id}{sort}' huisnummers = self.caches['short'].get_or_create(key, creator) else: huisnummers = creator() @@ -764,12 +754,12 @@ def creator(): return huisnummers def get_huisnummer_by_id(self, id): - ''' + """ Retrieve a `huisnummer` by the Id. :param integer id: the Id of the `huisnummer` :rtype: :class:`Huisnummer` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetHuisnummerWithStatusByHuisnummerId', id @@ -797,14 +787,14 @@ def creator(): return huisnummer def get_huisnummer_by_nummer_and_straat(self, nummer, straat): - ''' + """ Retrieve a `huisnummer` by the `nummer` and `straat` :param integer nummer: The huisnummer of the 'huisnummer` :param straat: The :class:`Straat` in which the `huisnummer` \ is situated. :rtype: A :class:`Huisnummer` - ''' + """ try: straat_id = straat.id except AttributeError: @@ -830,7 +820,7 @@ def creator(): ) ) if self.caches['short'].is_configured: - key = 'GetHuisnummerWithStatusByHuisnummer#%s%s' % (nummer, straat_id) + key = f'GetHuisnummerWithStatusByHuisnummer#{nummer}{straat_id}' huisnummer = self.caches['short'].get_or_create(key, creator) else: huisnummer = creator() @@ -838,13 +828,13 @@ def creator(): return huisnummer def list_postkantons_by_gemeente(self, gemeente): - ''' + """ List all `postkantons` in a :class:`Gemeente` :param gemeente: The :class:`Gemeente` for which the \ `potkantons` are wanted. :rtype: A :class:`list` of :class:`Postkanton` - ''' + """ try: id = gemeente.id except AttributeError: @@ -872,13 +862,13 @@ def creator(): return postkantons def get_postkanton_by_huisnummer(self, huisnummer): - ''' + """ Retrieve a `postkanton` by the Huisnummer. :param huisnummer: The :class:`Huisnummer` for which the `postkanton` \ is wanted. :rtype: :class:`Postkanton` - ''' + """ try: id = huisnummer.id except AttributeError: @@ -902,12 +892,12 @@ def creator(): return postkanton def get_wegobject_by_id(self, id): - ''' + """ Retrieve a `Wegobject` by the Id. :param integer id: the Id of the `Wegobject` :rtype: :class:`Wegobject` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetWegobjectByIdentificatorWegobject', id @@ -935,13 +925,13 @@ def creator(): return wegobject def list_wegobjecten_by_straat(self, straat): - ''' + """ List all `wegobjecten` in a :class:`Straat` :param straat: The :class:`Straat` for which the `wegobjecten` \ are wanted. :rtype: A :class:`list` of :class:`Wegobject` - ''' + """ try: id = straat.id except AttributeError: @@ -970,12 +960,12 @@ def creator(): return wegobjecten def get_wegsegment_by_id(self, id): - ''' + """ Retrieve a `wegsegment` by the Id. :param integer id: the Id of the `wegsegment` :rtype: :class:`Wegsegment` - ''' + """ def creator(): res = crab_gateway_request( self.client, @@ -1004,13 +994,13 @@ def creator(): return wegsegment def list_wegsegmenten_by_straat(self, straat): - ''' + """ List all `wegsegmenten` in a :class:`Straat` :param straat: The :class:`Straat` for which the `wegsegmenten` \ are wanted. :rtype: A :class:`list` of :class:`Wegsegment` - ''' + """ try: id = straat.id except AttributeError: @@ -1039,13 +1029,13 @@ def creator(): return wegsegmenten def list_terreinobjecten_by_huisnummer(self, huisnummer): - ''' + """ List all `terreinobjecten` for a :class:`Huisnummer` :param huisnummer: The :class:`Huisnummer` for which the \ `terreinobjecten` are wanted. :rtype: A :class:`list` of :class:`Terreinobject` - ''' + """ try: id = huisnummer.id except AttributeError: @@ -1074,12 +1064,12 @@ def creator(): return terreinobjecten def get_terreinobject_by_id(self, id): - ''' + """ Retrieve a `Terreinobject` by the Id. :param integer id: the Id of the `Terreinobject` :rtype: :class:`Terreinobject` - ''' + """ def creator(): res = crab_gateway_request( self.client, @@ -1108,13 +1098,13 @@ def creator(): return terreinobject def list_percelen_by_huisnummer(self, huisnummer): - ''' + """ List all `percelen` for a :class:`Huisnummer` :param huisnummer: The :class:`Huisnummer` for which the \ `percelen` are wanted. :rtype: A :class:`list` of :class:`Perceel` - ''' + """ try: id = huisnummer.id except AttributeError: @@ -1142,12 +1132,12 @@ def creator(): return percelen def get_perceel_by_id(self, id): - ''' + """ Retrieve a `Perceel` by the Id. :param string id: the Id of the `Perceel` :rtype: :class:`Perceel` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetPerceelByIdentificatorPerceel', id @@ -1173,13 +1163,13 @@ def creator(): return perceel def list_gebouwen_by_huisnummer(self, huisnummer): - ''' + """ List all `gebouwen` for a :class:`Huisnummer`. :param huisnummer: The :class:`Huisnummer` for which the \ `gebouwen` are wanted. :rtype: A :class:`list` of :class:`Gebouw` - ''' + """ try: id = huisnummer.id except AttributeError: @@ -1209,12 +1199,12 @@ def creator(): return gebouwen def get_gebouw_by_id(self, id): - ''' + """ Retrieve a `Gebouw` by the Id. :param integer id: the Id of the `Gebouw` :rtype: :class:`Gebouw` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetGebouwByIdentificatorGebouw', id @@ -1255,13 +1245,13 @@ def get_organisatie(self, res): return item def list_subadressen_by_huisnummer(self, huisnummer): - ''' + """ List all `subadressen` for a :class:`Huisnummer`. :param huisnummer: The :class:`Huisnummer` for which the \ `subadressen` are wanted. OR A huisnummer id. :rtype: A :class:`list` of :class:`Gebouw` - ''' + """ try: id = huisnummer.id except AttributeError: @@ -1289,12 +1279,12 @@ def creator(): return subadressen def get_subadres_by_id(self, id): - ''' + """ Retrieve a `Subadres` by the Id. :param integer id: the Id of the `Subadres` :rtype: :class:`Subadres` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetSubadresWithStatusBySubadresId', id @@ -1323,13 +1313,13 @@ def creator(): return subadres def list_adresposities_by_huisnummer(self, huisnummer): - ''' + """ List all `adresposities` for a :class:`Huisnummer`. :param huisnummer: The :class:`Huisnummer` for which the \ `adresposities` are wanted. OR A huisnummer id. :rtype: A :class:`list` of :class:`Adrespositie` - ''' + """ try: id = huisnummer.id except AttributeError: @@ -1355,14 +1345,14 @@ def creator(): return adresposities def list_adresposities_by_nummer_and_straat(self, nummer, straat): - ''' + """ List all `adresposities` for a huisnummer and a :class:`Straat`. :param nummer: A string representing a certain huisnummer. :param straat: The :class:`Straat` for which the \ `adresposities` are wanted. OR A straat id. :rtype: A :class:`list` of :class:`Adrespositie` - ''' + """ try: sid = straat.id except AttributeError: @@ -1379,7 +1369,7 @@ def creator(): except AttributeError: return [] if self.caches['short'].is_configured: - key = 'ListAdrespositiesByHuisnummer#%s%s' % (nummer, sid) + key = f'ListAdrespositiesByHuisnummer#{nummer}{sid}' adresposities = self.caches['short'].get_or_create(key, creator) else: adresposities = creator() @@ -1388,13 +1378,13 @@ def creator(): return adresposities def list_adresposities_by_subadres(self, subadres): - ''' + """ List all `adresposities` for a :class:`Subadres`. :param subadres: The :class:`Subadres` for which the \ `adresposities` are wanted. OR A subadres id. :rtype: A :class:`list` of :class:`Adrespositie` - ''' + """ try: id = subadres.id except AttributeError: @@ -1420,14 +1410,14 @@ def creator(): return adresposities def list_adresposities_by_subadres_and_huisnummer(self, subadres, huisnummer): - ''' + """ List all `adresposities` for a subadres and a :class:`Huisnummer`. :param subadres: A string representing a certain subadres. :param huisnummer: The :class:`Huisnummer` for which the \ `adresposities` are wanted. OR A huisnummer id. :rtype: A :class:`list` of :class:`Adrespositie` - ''' + """ try: hid = huisnummer.id except AttributeError: @@ -1444,7 +1434,7 @@ def creator(): except AttributeError: return [] if self.caches['short'].is_configured: - key = 'ListAdrespositiesBySubadres#%s%s' % (subadres, hid) + key = f'ListAdrespositiesBySubadres#{subadres}{hid}' adresposities = self.caches['short'].get_or_create(key, creator) else: adresposities = creator() @@ -1453,12 +1443,12 @@ def creator(): return adresposities def get_adrespositie_by_id(self, id): - ''' + """ Retrieve a `Adrespositie` by the Id. :param integer id: the Id of the `Adrespositie` :rtype: :class:`Adrespositie` - ''' + """ def creator(): res = crab_gateway_request( self.client, 'GetAdrespositieByAdrespositieId', id @@ -1486,13 +1476,13 @@ def creator(): return adrespositie def get_postadres_by_huisnummer(self, huisnummer): - ''' + """ Get the `postadres` for a :class:`Huisnummer`. :param huisnummer: The :class:`Huisnummer` for which the \ `postadres` is wanted. OR A huisnummer id. :rtype: A :class:`str`. - ''' + """ try: id = huisnummer.id except AttributeError: @@ -1512,13 +1502,13 @@ def creator(): return postadres def get_postadres_by_subadres(self, subadres): - ''' + """ Get the `postadres` for a :class:`Subadres`. :param subadres: The :class:`Subadres` for which the \ `postadres` is wanted. OR A subadres id. :rtype: A :class:`str`. - ''' + """ try: id = subadres.id except AttributeError: @@ -1538,53 +1528,49 @@ def creator(): return postadres -class GatewayObject(object): - ''' +class GatewayObject: + """ Abstract class for objects that are able to use a :class:`crabpy.Gateway.CrabGateway` to find further information. - ''' + """ gateway = None - ''' + """ The :class:`crabpy.gateway.crab.CrabGateway` to use when making further calls to the CRAB service. - ''' + """ def __init__(self, **kwargs): if 'gateway' in kwargs: self.set_gateway(kwargs['gateway']) def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.crab.CrabGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway def clear_gateway(self): - ''' + """ Clear the currently set CrabGateway. - ''' + """ self.gateway = None def check_gateway(self): - ''' + """ Check to see if a gateway was set on this object. - ''' + """ if not self.gateway: raise RuntimeError("There's no Gateway I can use") - if six.PY2: - def __str__(self): - return self.__unicode__().encode('utf-8') - else: - def __str__(self): - return self.__unicode__() + def __str__(self): + return self.__unicode__() def check_lazy_load_gewest(f): - ''' + """ Decorator function to lazy load a :class:`Gewest`. - ''' + """ def wrapper(self): gewest = self attribute = 'namen' if f.__name__ == 'naam' else f.__name__ @@ -1600,12 +1586,12 @@ def wrapper(self): class Gewest(GatewayObject): - ''' + """ A large administrative unit in Belgium. Belgium consists of 3 `gewesten`. Together they form the entire territory of the country. - ''' + """ def __init__( self, id, @@ -1618,7 +1604,7 @@ def __init__( self._namen = namen self._centroid = centroid self._bounding_box = bounding_box - super(Gewest, self).__init__(**kwargs) + super().__init__(**kwargs) @property @check_lazy_load_gewest @@ -1645,7 +1631,7 @@ def gemeenten(self): def __unicode__(self): if self._namen is not None: - return "%s (%s)" % (self.naam, self.id) + return f"{self.naam} ({self.id})" else: return "Gewest %s" % (self.id) @@ -1654,11 +1640,11 @@ def __repr__(self): class Provincie(GatewayObject): - ''' + """ The largest administrative unit within a :class:`Gewest`. .. versionadded:: 0.4.0 - ''' + """ def __init__( self, niscode, naam, gewest, **kwargs ): @@ -1667,16 +1653,16 @@ def __init__( self.gewest = gewest def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.crab.CrabGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway self.gewest.gateway = gateway def clear_gateway(self): - ''' + """ Clear the currently set CrabGateway. - ''' + """ self.gateway = None self.gewest.clear_gateway() @@ -1686,16 +1672,16 @@ def gemeenten(self): return self.gateway.list_gemeenten_by_provincie(self.niscode) def __unicode__(self): - return "%s (%s)" % (self.naam, self.niscode) + return f"{self.naam} ({self.niscode})" def __repr__(self): - return "Provincie(%s, '%s', Gewest(%s))" % (self.niscode, self.naam, self.gewest.id) + return f"Provincie({self.niscode}, '{self.naam}', Gewest({self.gewest.id}))" def check_lazy_load_gemeente(f): - ''' + """ Decorator function to lazy load a :class:`Gemeente`. - ''' + """ def wrapper(*args): gemeente = args[0] if ( @@ -1714,9 +1700,9 @@ def wrapper(*args): class Gemeente(GatewayObject): - ''' + """ The smallest administrative unit in Belgium. - ''' + """ def __init__( self, id, naam, niscode, gewest, taal=None, centroid=None, @@ -1735,19 +1721,19 @@ def __init__( self._centroid = centroid self._bounding_box = bounding_box self._metadata = metadata - super(Gemeente, self).__init__(**kwargs) + super().__init__(**kwargs) def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.crab.CrabGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway self.gewest.set_gateway(gateway) def clear_gateway(self): - ''' + """ Clear the currently set CrabGateway. - ''' + """ self.gateway = None self.gewest.clear_gateway() @@ -1795,18 +1781,18 @@ def provincie(self): return p def __unicode__(self): - return "%s (%s)" % (self.naam, self.id) + return f"{self.naam} ({self.id})" def __repr__(self): - return "Gemeente(%s, '%s', %s)" % (self.id, self.naam, self.niscode) + return f"Gemeente({self.id}, '{self.naam}', {self.niscode})" class Deelgemeente(GatewayObject): - ''' + """ A subdivision of a :class:`Gemeente`. .. versionadded:: 0.7.0 - ''' + """ def __init__( self, id, naam, gemeente_niscode, **kwargs ): @@ -1815,15 +1801,15 @@ def __init__( self.gemeente_niscode = gemeente_niscode def set_gateway(self, gateway): - ''' + """ :param crabpy.gateway.crab.CrabGateway gateway: Gateway to use. - ''' + """ self.gateway = gateway def clear_gateway(self): - ''' + """ Clear the currently set CrabGateway. - ''' + """ self.gateway = None @property @@ -1831,10 +1817,10 @@ def gemeente(self): return self.gateway.get_gemeente_by_niscode(self.gemeente_niscode) def __unicode__(self): - return "%s (%s)" % (self.naam, self.id) + return f"{self.naam} ({self.id})" def __repr__(self): - return "Deelgemeente('%s', '%s', %s)" % (self.id, self.naam, self.gemeente_niscode) + return f"Deelgemeente('{self.id}', '{self.naam}', {self.gemeente_niscode})" class Codelijst(GatewayObject): @@ -1844,144 +1830,144 @@ def __init__( self.id = id self.naam = naam self.definitie = definitie - super(Codelijst, self).__init__(**kwargs) + super().__init__(**kwargs) def __unicode__(self): return self.naam class Taal(Codelijst): - ''' + """ A language. - ''' + """ def __repr__(self): - return "Taal('%s', '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Taal('{self.id}', '{self.naam}', '{self.definitie}')" class Bewerking(Codelijst): - ''' + """ An edit. - ''' + """ def __repr__(self): - return "Bewerking(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Bewerking({self.id}, '{self.naam}', '{self.definitie}')" class Organisatie(Codelijst): - ''' + """ An organisation that played a role in the genessis of an object. - ''' + """ def __repr__(self): - return "Organisatie(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Organisatie({self.id}, '{self.naam}', '{self.definitie}')" class Aardsubadres(Codelijst): - ''' + """ The nature of a subaddress. - ''' + """ def __repr__(self): - return "Aardsubadres(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Aardsubadres({self.id}, '{self.naam}', '{self.definitie}')" class Aardadres(Codelijst): - ''' + """ The nature of an address. - ''' + """ def __repr__(self): - return "Aardadres(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Aardadres({self.id}, '{self.naam}', '{self.definitie}')" class Aardgebouw(Codelijst): - ''' + """ The nature of a building. - ''' + """ def __repr__(self): - return "Aardgebouw(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Aardgebouw({self.id}, '{self.naam}', '{self.definitie}')" class Aardwegobject(Codelijst): - ''' + """ The nature of a `wegobject`. - ''' + """ def __repr__(self): - return "Aardwegobject(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Aardwegobject({self.id}, '{self.naam}', '{self.definitie}')" class Aardterreinobject(Codelijst): - ''' + """ The nature of a `terreinobject`. - ''' + """ def __repr__(self): - return "Aardterreinobject(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Aardterreinobject({self.id}, '{self.naam}', '{self.definitie}')" class Statushuisnummer(Codelijst): - ''' + """ The current state of a `huisnummer`. - ''' + """ def __repr__(self): - return "Statushuisnummer(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Statushuisnummer({self.id}, '{self.naam}', '{self.definitie}')" class Statussubadres(Codelijst): - ''' + """ The current state of a `subadres`. - ''' + """ def __repr__(self): - return "Statussubadres(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Statussubadres({self.id}, '{self.naam}', '{self.definitie}')" class Statusstraatnaam(Codelijst): - ''' + """ The current state of a `straatnaam`. - ''' + """ def __repr__(self): - return "Statusstraatnaam(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Statusstraatnaam({self.id}, '{self.naam}', '{self.definitie}')" class Statuswegsegment(Codelijst): - ''' + """ The current state of a `wegsegment`. - ''' + """ def __repr__(self): - return "Statuswegsegment(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Statuswegsegment({self.id}, '{self.naam}', '{self.definitie}')" class Geometriemethodewegsegment(Codelijst): - ''' + """ The geometry method of a :class:`Wegsegment`. - ''' + """ def __repr__(self): - return "Geometriemethodewegsegment(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Geometriemethodewegsegment({self.id}, '{self.naam}', '{self.definitie}')" class Statusgebouw(Codelijst): - ''' + """ The current state of a :class:`Gebouw`. - ''' + """ def __repr__(self): - return "Statusgebouw(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Statusgebouw({self.id}, '{self.naam}', '{self.definitie}')" class Geometriemethodegebouw(Codelijst): - ''' + """ The geometry method of a :class:`Gebouw`. - ''' + """ def __repr__(self): - return "Geometriemethodegebouw(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Geometriemethodegebouw({self.id}, '{self.naam}', '{self.definitie}')" class Herkomstadrespositie(Codelijst): - ''' + """ The origin of an Adressposition. - ''' + """ def __repr__(self): - return "Herkomstadrespositie(%s, '%s', '%s')" % (self.id, self.naam, self.definitie) + return f"Herkomstadrespositie({self.id}, '{self.naam}', '{self.definitie}')" def check_lazy_load_straat(f): - ''' + """ Decorator function to lazy load a :class:`Straat`. - ''' + """ def wrapper(*args): straat = args[0] if ( @@ -1997,11 +1983,11 @@ def wrapper(*args): class Straat(GatewayObject): - ''' + """ A street. A street object is always located in one and exactly one :class:`Gemeente`. - ''' + """ def __init__( self, id, label, gemeente_id, status, straatnaam=None, taalcode=None, @@ -2019,7 +2005,7 @@ def __init__( self._namen = ((straatnaam, taalcode), (straatnaam2, taalcode2)) self.gemeente_id = gemeente_id self._metadata = metadata - super(Straat, self).__init__(**kwargs) + super().__init__(**kwargs) @property @check_lazy_load_straat @@ -2081,16 +2067,16 @@ def bounding_box(self): return [min(x), min(y), max(x), max(y)] def __unicode__(self): - return "%s (%s)" % (self.label, self.id) + return f"{self.label} ({self.id})" def __repr__(self): - return "Straat(%s, '%s', %s, %s)" % (self.id, self.label, self.gemeente_id, self.status_id) + return f"Straat({self.id}, '{self.label}', {self.gemeente_id}, {self.status_id})" def check_lazy_load_huisnummer(f): - ''' + """ Decorator function to lazy load a :class:`Huisnummer`. - ''' + """ def wrapper(*args): huisnummer = args[0] if ( @@ -2105,11 +2091,11 @@ def wrapper(*args): class Huisnummer(GatewayObject): - ''' + """ A house number. This is mainly a combination of a street and a house number. - ''' + """ def __init__( self, id, status, huisnummer, straat_id, metadata=None, **kwargs @@ -2124,7 +2110,7 @@ def __init__( self.huisnummer = huisnummer self.straat_id = straat_id self._metadata = metadata - super(Huisnummer, self).__init__(**kwargs) + super().__init__(**kwargs) @property def straat(self): @@ -2188,21 +2174,21 @@ def adresposities(self): return self.gateway.list_adresposities_by_huisnummer(self.id) def __unicode__(self): - return "%s (%s)" % (self.huisnummer, self.id) + return f"{self.huisnummer} ({self.id})" def __repr__(self): - return "Huisnummer(%s, %s, '%s', %s)" % (self.id, self.status_id, self.huisnummer, self.straat_id) + return f"Huisnummer({self.id}, {self.status_id}, '{self.huisnummer}', {self.straat_id})" class Postkanton(GatewayObject): - ''' + """ A postal code. Eg. postal code `9000` for the city of Ghent. - ''' + """ def __init__(self, id, **kwargs): self.id = int(id) - super(Postkanton, self).__init__(**kwargs) + super().__init__(**kwargs) def __unicode__(self): return "Postkanton %s" % (self.id) @@ -2212,9 +2198,9 @@ def __repr__(self): def check_lazy_load_wegobject(f): - ''' + """ Decorator function to lazy load a :class:`Wegobject`. - ''' + """ def wrapper(*args): wegobject = args[0] if ( @@ -2247,7 +2233,7 @@ def __init__( self._centroid = centroid self._bounding_box = bounding_box self._metadata = metadata - super(Wegobject, self).__init__(**kwargs) + super().__init__(**kwargs) @property def aard(self): @@ -2281,9 +2267,9 @@ def __repr__(self): def check_lazy_load_wegsegment(f): - ''' + """ Decorator function to lazy load a :class:`Wegsegment`. - ''' + """ def wrapper(*args): wegsegment = args[0] if ( @@ -2321,7 +2307,7 @@ def __init__( self._methode = None self._geometrie = geometrie self._metadata = metadata - super(Wegsegment, self).__init__(**kwargs) + super().__init__(**kwargs) @property def status(self): @@ -2360,9 +2346,9 @@ def __repr__(self): def check_lazy_load_terreinobject(f): - ''' + """ Decorator function to lazy load a :class:`Terreinobject`. - ''' + """ def wrapper(*args): terreinobject = args[0] if ( @@ -2381,14 +2367,14 @@ def wrapper(*args): class Terreinobject(GatewayObject): - ''' + """ A cadastral parcel. A :class:`Terreinobject` is somewhat different from a :class:`Perceel` in the source of the data and the information provided. eg. A `terreinobject` has a `centroid` and a `bounding box`, while a `perceel` also has the centroid, but not the `bounding box`. - ''' + """ def __init__( self, id, aard, centroid=None, bounding_box=None, metadata=None, **kwargs @@ -2403,7 +2389,7 @@ def __init__( self._centroid = centroid self._metadata = metadata self._bounding_box = bounding_box - super(Terreinobject, self).__init__(**kwargs) + super().__init__(**kwargs) @property def aard(self): @@ -2437,9 +2423,9 @@ def __repr__(self): def check_lazy_load_perceel(f): - ''' + """ Decorator function to lazy load a :class:`Perceel`. - ''' + """ def wrapper(*args): perceel = args[0] if perceel._centroid is None or perceel._metadata is None: @@ -2453,21 +2439,21 @@ def wrapper(*args): class Perceel(GatewayObject): - ''' + """ A cadastral Parcel. A :class:`Terreinobject` is somewhat different from a :class:`Perceel` in the source of the data and the information provided. eg. A `terreinobject` has a `centroid` and a `bounding box`, while a `perceel` also has the centroid, but not the `bounding box`. - ''' + """ def __init__( self, id, centroid=None, metadata=None, **kwargs ): self.id = id self._centroid = centroid self._metadata = metadata - super(Perceel, self).__init__(**kwargs) + super().__init__(**kwargs) @property @check_lazy_load_perceel @@ -2481,25 +2467,25 @@ def metadata(self): @property def huisnummers(self): - ''' + """ Returns the huisnummers on this Perceel. Some of the huisnummers might no longer be active. :rtype: list - ''' + """ self.check_gateway() return self.gateway.list_huisnummers_by_perceel(self.id) @property def postadressen(self): - ''' + """ Returns the postadressen for this Perceel. Will only take the huisnummers with status `inGebruik` into account. :rtype: list - ''' + """ return [h.postadres for h in self.huisnummers if h.status.id == '3'] def __unicode__(self): @@ -2510,9 +2496,9 @@ def __repr__(self): def check_lazy_load_gebouw(f): - ''' + """ Decorator function to lazy load a :class:`Gebouw`. - ''' + """ def wrapper(*args): gebouw = args[0] if ( @@ -2530,9 +2516,9 @@ def wrapper(*args): class Gebouw(GatewayObject): - ''' + """ A building. - ''' + """ def __init__( self, id, aard, status, methode=None, geometrie=None, metadata=None, **kwargs @@ -2558,7 +2544,7 @@ def __init__( self._methode = None self._geometrie = geometrie self._metadata = metadata - super(Gebouw, self).__init__(**kwargs) + super().__init__(**kwargs) @property def aard(self): @@ -2608,9 +2594,9 @@ def __repr__(self): def check_lazy_load_subadres(f): - ''' + """ Decorator function to lazy load a :class:`Subadres`. - ''' + """ def wrapper(*args): subadres = args[0] if ( @@ -2629,11 +2615,11 @@ def wrapper(*args): class Subadres(GatewayObject): - ''' + """ An address within a certain :class:`Huisnummer`. These can eg. be postboxes within an appartment complex. - ''' + """ def __init__( self, id, subadres, status, huisnummer_id=None, aard=None, metadata=None, **kwargs @@ -2654,7 +2640,7 @@ def __init__( self.aard_id = aard self._aard = None self._metadata = metadata - super(Subadres, self).__init__(**kwargs) + super().__init__(**kwargs) @property def huisnummer(self): @@ -2696,16 +2682,16 @@ def adresposities(self): return self.gateway.list_adresposities_by_subadres(self.id) def __unicode__(self): - return "%s (%s)" % (self.subadres, self.id) + return f"{self.subadres} ({self.id})" def __repr__(self): - return "Subadres(%s, %s, '%s', %s)" % (self.id, self.status_id, self.subadres, self.huisnummer_id) + return f"Subadres({self.id}, {self.status_id}, '{self.subadres}', {self.huisnummer_id})" def check_lazy_load_adrespositie(f): - ''' + """ Decorator function to lazy load a :class:`Adrespositie`. - ''' + """ def wrapper(*args): adrespositie = args[0] if ( @@ -2724,7 +2710,7 @@ def wrapper(*args): class Adrespositie(GatewayObject): - ''' + """ The position of an `Adres`. This can be used for the position of both :class:`Huisnummer` and @@ -2733,7 +2719,7 @@ class Adrespositie(GatewayObject): A `Huisnummer` or `Subadres`, can have more than one `Adrespositie`, each offering a different interpretation of the position of the `Adres`. See the `herkomst` and `aard` of each `Adrespositie` to know which one to pick. - ''' + """ def __init__( self, id, herkomst, geometrie=None, aard=None, metadata=None, **kwargs @@ -2753,7 +2739,7 @@ def __init__( self.aard_id = aard self._aard = None self._metadata = metadata - super(Adrespositie, self).__init__(**kwargs) + super().__init__(**kwargs) @property def herkomst(self): @@ -2789,16 +2775,16 @@ def __unicode__(self): return "Adrespositie %s" % (self.id) def __repr__(self): - return "Adrespositie(%s, %s)" % (self.id, self.herkomst_id) + return f"Adrespositie({self.id}, {self.herkomst_id})" class Metadata(GatewayObject): - ''' + """ Metadata about a `straat`, `huisnummer`, ... Some of the metadata available is the datum the object was created, the organisation that created it and the type of creation. - ''' + """ def __init__( self, begin_datum, begin_tijd, begin_bewerking, begin_organisatie, @@ -2818,7 +2804,7 @@ def __init__( except AttributeError: self._begin_organisatie_id = begin_organisatie self._begin_organisatie = None - super(Metadata, self).__init__(**kwargs) + super().__init__(**kwargs) @property def begin_bewerking(self): diff --git a/crabpy/gateway/exception.py b/crabpy/gateway/exception.py index c6f2735..f597376 100644 --- a/crabpy/gateway/exception.py +++ b/crabpy/gateway/exception.py @@ -1,30 +1,29 @@ -# -*- coding: utf-8 -*- -''' +""" This module contains custom errors that can be generated by gateways. .. versionadded:: 0.2.0 -''' +""" class GatewayException(Exception): - ''' + """ A base exception. - ''' + """ def __init__(self, message): self.message = message class GatewayRuntimeException(GatewayException): - ''' + """ An exception that signifies a soap request went wrong. - ''' + """ soapfault = None - ''' + """ The soapfault that was generated by the service. - ''' + """ def __init__(self, message, soapfault): GatewayException.__init__(self, message) @@ -32,15 +31,15 @@ def __init__(self, message, soapfault): class GatewayAuthenticationException(GatewayRuntimeException): - ''' + """ An exception that signifies something went wrong during authentication. - ''' + """ pass class GatewayResourceNotFoundException(GatewayException): - ''' + """ An exception that signifies that no results where found. - ''' + """ def __init__(self): GatewayException.__init__(self, 'This resource was not found.') diff --git a/crabpy/wsa.py b/crabpy/wsa.py index fbcfc68..a86945f 100644 --- a/crabpy/wsa.py +++ b/crabpy/wsa.py @@ -1,22 +1,21 @@ -# -*- coding: utf-8 -*- -''' +""" This module contains utiltiy functions for using WSA with SOAP services. .. versionadded:: 0.1.0 -''' - -from suds.sudsobject import Object -from suds.sax.element import Element +""" import uuid +from suds.sax.element import Element +from suds.sudsobject import Object + wsa = ('wsa', 'http://schemas.xmlsoap.org/ws/2004/08/addressing') class Action(Object): - ''' + """ Assist in rendering a WSA:Action element. - ''' + """ def __init__(self, action): Object.__init__(self) self.action = action @@ -28,9 +27,9 @@ def xml(self): class MessageID(Object): - ''' + """ Assist in rendering a WSA:MessageID element. - ''' + """ def xml(self): messageid = Element('MessageID', ns=wsa) messageid.setText('uuid: ' + str(uuid.uuid4())) @@ -38,9 +37,9 @@ def xml(self): class To(Object): - ''' + """ Assist in rendering a WSA:To element. - ''' + """ def __init__(self, location): Object.__init__(self) self.location = location diff --git a/crabpy/wsse.py b/crabpy/wsse.py index 4bdfe52..3391ab4 100644 --- a/crabpy/wsse.py +++ b/crabpy/wsse.py @@ -1,21 +1,18 @@ -# -*- coding: utf-8 -*- -''' +""" This module adds a :class:`UsernameDigestToken` for use with SOAP services. .. versionadded:: 0.2.0 -''' +""" -from __future__ import unicode_literals - -from base64 import b64encode import hashlib - +from base64 import b64encode from datetime import datetime -from suds.wsse import UsernameToken, wssens, wsuns - from suds.sax.element import Element +from suds.wsse import UsernameToken +from suds.wsse import wssens +from suds.wsse import wsuns class UsernameDigestToken(UsernameToken): @@ -45,7 +42,7 @@ def setnonce(self, text=None): s.append(self.password.encode('utf-8')) s.append(str(datetime.utcnow()).encode('utf-8')) m = hashlib.md5() - m.update(':'.encode('utf-8').join(s)) + m.update(b':'.join(s)) self.nonce = m.hexdigest().encode('utf-8') else: self.nonce = text diff --git a/examples/adressenregister_gateway_caching.py b/examples/adressenregister_gateway_caching.py new file mode 100644 index 0000000..842fc46 --- /dev/null +++ b/examples/adressenregister_gateway_caching.py @@ -0,0 +1,37 @@ +""" +This script demonstrates querying the adressen register gateway while +maintaining a cache. + +In total this script should execute 3 rest calls: +Retrieve gemeenten, retrieve straten, retrieve adressen. +""" +from crabpy.client import AdressenRegisterClient +from crabpy.gateway.adressenregister import Gateway + +cache_settings = { + "long.backend": "dogpile.cache.redis", + "long.backend.replace_existing_backend": True, + "short.backend": "dogpile.cache.redis", + "short.backend.replace_existing_backend": True, +} +gateway = Gateway( + AdressenRegisterClient("https://api.basisregisters.vlaanderen.be", None), + cache_settings=cache_settings, +) +antwerpen = gateway.get_provincie_by_id("10000") +aartselaar = antwerpen.gemeenten[0] + +print('Straten in AARTSELAAR (1)') +print('-------------------------') +print([str(straat) for straat in gateway.list_straten(aartselaar)]) +print('Straten in AARTSELAAR (2)') +print('-------------------------') +print([str(straat) for straat in aartselaar.straten]) + +straat = aartselaar.straten[1] +print('Adressen in AARTSELAAR Straat1 (1)') +print('----------------------------------') +print([str(huisnummer) for huisnummer in gateway.list_adressen_by_straat(straat)]) +print('Adressen in AARTSELAAR Straat1 (2)') +print('----------------------------------') +print([str(huisnummer) for huisnummer in straat.adressen]) diff --git a/examples/capakey.py b/examples/capakey.py index 5456d85..ac391d5 100644 --- a/examples/capakey.py +++ b/examples/capakey.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates using the capakey client through the :func:`crabpy.client.capakey_request` function. -''' +""" from crabpy.client import capakey_factory, capakey_request diff --git a/examples/capakey_gateway.py b/examples/capakey_gateway.py index 3976b06..b731174 100644 --- a/examples/capakey_gateway.py +++ b/examples/capakey_gateway.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ This script demonstrates using the capakey gateway to walk the entire cadastral tree of a `gemeente`. diff --git a/examples/capakey_gateway_caching.py b/examples/capakey_gateway_caching.py index 0cb2726..e0d7353 100644 --- a/examples/capakey_gateway_caching.py +++ b/examples/capakey_gateway_caching.py @@ -1,9 +1,8 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates querying the capakey gateway while maintaining a cache. WARNING: The CapakeyGateway (SOAP) is deprecated, use CapakeyRestGateway (REST) instead. -''' +""" import os diff --git a/examples/capakey_gateway_rest.py b/examples/capakey_gateway_rest.py index f62bba5..ca6dab4 100644 --- a/examples/capakey_gateway_rest.py +++ b/examples/capakey_gateway_rest.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ This script demonstrates using the capakey rest gateway to walk the entire cadastral tree of a `gemeente`. diff --git a/examples/capakey_gateway_rest_caching.py b/examples/capakey_gateway_rest_caching.py index 19e83f8..738cc53 100644 --- a/examples/capakey_gateway_rest_caching.py +++ b/examples/capakey_gateway_rest_caching.py @@ -1,7 +1,6 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates querying the capakey gateway while maintaining a cache. -''' +""" import os from crabpy.gateway.capakey import CapakeyRestGateway diff --git a/examples/crab.py b/examples/crab.py index 9929da9..6a748b6 100644 --- a/examples/crab.py +++ b/examples/crab.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates using the crab client directly or through the :func:`crabpy.client.crab_request` function. -''' +""" from crabpy.client import crab_factory, crab_request diff --git a/examples/crab_client.py b/examples/crab_client.py index 9c156ed..19c9771 100644 --- a/examples/crab_client.py +++ b/examples/crab_client.py @@ -1,7 +1,6 @@ -# -*- coding: utf-8 -*- -''' +""" This script prints all available information on the CRAB webservice. -''' +""" from crabpy.client import crab_factory diff --git a/examples/crab_gateway.py b/examples/crab_gateway.py index d318e2e..463d3c7 100644 --- a/examples/crab_gateway.py +++ b/examples/crab_gateway.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates using the crab gateway to walk the entire address tree (street and number) of a `gemeente`. -''' +""" from crabpy.client import crab_request, crab_factory from crabpy.gateway.crab import CrabGateway diff --git a/examples/crab_gateway_admin_units.py b/examples/crab_gateway_admin_units.py index 0e30eeb..13cd577 100644 --- a/examples/crab_gateway_admin_units.py +++ b/examples/crab_gateway_admin_units.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates using the crab gateway to walk the entire address tree (street and number) of a `gemeente`. -''' +""" from crabpy.client import crab_request, crab_factory from crabpy.gateway.crab import CrabGateway @@ -22,4 +21,4 @@ print('\t\t%s' % str(p)) print('\t\t' + ('-' * len(str(p)))) for g in p.gemeenten: - print('\t\t\t* %s (%s)' % (g.naam, g.niscode)) + print(f'\t\t\t* {g.naam} ({g.niscode})') diff --git a/examples/crab_gateway_adrespositie.py b/examples/crab_gateway_adrespositie.py index ba5cd12..98fcc60 100644 --- a/examples/crab_gateway_adrespositie.py +++ b/examples/crab_gateway_adrespositie.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates using the crab gateway to get information about the position of an `adres`. -''' +""" from crabpy.client import crab_factory from crabpy.gateway.crab import CrabGateway @@ -15,4 +14,4 @@ for h in straat.huisnummers: print("\t* %s" % h) for ap in h.adresposities: - print("\t\t* %s: %s" % (ap.herkomst, ap.geometrie)) + print(f"\t\t* {ap.herkomst}: {ap.geometrie}") diff --git a/examples/crab_gateway_caching.py b/examples/crab_gateway_caching.py index 99826a1..72f8606 100644 --- a/examples/crab_gateway_caching.py +++ b/examples/crab_gateway_caching.py @@ -1,7 +1,6 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates querying the crab gateway while maintaining a cache. -''' +""" import os diff --git a/examples/crab_gateway_get_huisnummer.py b/examples/crab_gateway_get_huisnummer.py index 71386a9..389d677 100644 --- a/examples/crab_gateway_get_huisnummer.py +++ b/examples/crab_gateway_get_huisnummer.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -''' +""" This script demonstrates using the crab gateway to get a single `huisnummer` by id. -''' +""" from crabpy.client import crab_request, crab_factory from crabpy.gateway.crab import CrabGateway @@ -11,4 +10,4 @@ huisnummer = g.get_huisnummer_by_id(4254655) -print("%s: %s" % (huisnummer.id, huisnummer.postadres)) +print(f"{huisnummer.id}: {huisnummer.postadres}") diff --git a/examples/crab_proxy.py b/examples/crab_proxy.py index d8c398f..4432088 100644 --- a/examples/crab_proxy.py +++ b/examples/crab_proxy.py @@ -1,7 +1,6 @@ -# -*- coding: utf-8 -*- -''' +""" This script show how to connect to the WS-WRAB service through a proxy. -''' +""" from crabpy.client import crab_factory diff --git a/requirements-dev.txt b/requirements-dev.txt index bd22a49..4fd96a0 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -6,5 +6,4 @@ pytest==3.6.3 pytest-cov==2.5.1 coveralls==1.3.0 flake8==3.5.0 -mock==2.0.0 responses==0.10.6 diff --git a/requirements.txt b/requirements.txt index cb1c01d..189a4d3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ requests==2.26.0 suds-py3==1.4.4.1 dogpile.cache==1.1.3 -six==1.16.0 diff --git a/setup.py b/setup.py index 180cdee..5e46f93 100755 --- a/setup.py +++ b/setup.py @@ -1,11 +1,7 @@ #!/usr/bin/env python -import os -import sys - -import crabpy - -from setuptools import setup, find_packages +from setuptools import find_packages +from setuptools import setup packages = [ 'crabpy', @@ -14,7 +10,6 @@ requires = [ 'suds-py3>=1.4.4.1', 'dogpile.cache', - 'six', 'requests' ] diff --git a/tests/__init__.py b/tests/__init__.py index 391d4cd..37dba13 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,23 +1,46 @@ -# -*- coding: utf-8 -* - +import contextlib import os from six.moves import configparser +from crabpy.gateway import adressenregister + config = configparser.ConfigParser() TEST_DIR = os.path.dirname(__file__) -config.read(os.path.join(TEST_DIR, 'test.ini')) +config.read(os.path.join(TEST_DIR, "test.ini")) +adressenregister.setup_cache( + {"long.backend": "dogpile.cache.null", "short.backend": "dogpile.cache.null"} +) def run_crab_integration_tests(): try: - return config.getboolean('crab','run_integration_tests') + return config.getboolean("crab", "run_integration_tests") except KeyError: # pragma NO COVER return False def run_capakey_integration_tests(): try: - return config.getboolean('capakey', 'run_integration_tests') + return config.getboolean("capakey", "run_integration_tests") except KeyError: # pragma NO COVER return False + + +@contextlib.contextmanager +def memory_cache(): + try: + adressenregister.setup_cache( + { + "long.backend": "dogpile.cache.memory", + "short.backend": "dogpile.cache.memory" + } + ) + yield + finally: + adressenregister.setup_cache( + { + "long.backend": "dogpile.cache.null", + "short.backend": "dogpile.cache.null" + } + ) diff --git a/tests/conftest.py b/tests/conftest.py index 671fa13..bfec1d7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,11 +1,10 @@ -# -*- coding: utf-8 -* import json import os import re import pytest import responses -from mock import Mock +from unittest.mock import Mock from crabpy.gateway.crab import CrabGateway @@ -70,7 +69,7 @@ def mocked_responses(): def municipalities_response(mocked_responses): mocked_responses.add( method='GET', - url='{capakey}/municipality?'.format(capakey=CAPAKEY_URL), + url=f'{CAPAKEY_URL}/municipality?', json=load_json('municipalities.json') ) @@ -78,7 +77,7 @@ def municipalities_response(mocked_responses): @pytest.fixture(scope='function') def municipality_response(mocked_responses): url = re.compile( - r'{capakey}/municipality/\d+\?'.format(capakey=CAPAKEY_URL) + fr'{CAPAKEY_URL}/municipality/\d+\?' ) mocked_responses.add( method='GET', @@ -103,7 +102,7 @@ def municipality_department_response(mocked_responses): @pytest.fixture(scope='function') def department_response(mocked_responses): url = re.compile( - r'{capakey}/department/\d+\?'.format(capakey=CAPAKEY_URL) + fr'{CAPAKEY_URL}/department/\d+\?' ) mocked_responses.add( method='GET', diff --git a/tests/gateway/test_adressenregister.py b/tests/gateway/test_adressenregister.py new file mode 100644 index 0000000..57af9d1 --- /dev/null +++ b/tests/gateway/test_adressenregister.py @@ -0,0 +1,526 @@ +from unittest.mock import Mock + +import pytest + +import tests +from crabpy.gateway import adressenregister +from crabpy.gateway.adressenregister import Adres +from crabpy.gateway.adressenregister import Deelgemeente +from crabpy.gateway.adressenregister import Gebouw +from crabpy.gateway.adressenregister import Gemeente +from crabpy.gateway.adressenregister import Gewest +from crabpy.gateway.adressenregister import Perceel +from crabpy.gateway.adressenregister import Provincie +from crabpy.gateway.adressenregister import Straat +from crabpy.gateway.exception import GatewayResourceNotFoundException + + +@pytest.fixture() +def client(): + return Mock() + + +@pytest.fixture() +def gateway(client): + return adressenregister.Gateway(client) + + +def create_client_list_gemeenten_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/gemeente/54007", + "naamruimte": "https://data.vlaanderen.be/id/gemeente", + "objectId": "54007", + "versieId": "2002-08-13T16:33:18+02:00", + }, + "detail": "https://api.basisregisters.vlaanderen.be/v1/gemeenten/54007", + "gemeentenaam": { + "geografischeNaam": {"spelling": "Mouscron", "taal": "fr"} + }, + "gemeenteStatus": "inGebruik", + } + + +def create_client_get_gemeente_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/gemeente/54007", + "naamruimte": "https://data.vlaanderen.be/id/gemeente", + "objectId": "54007", + "versieId": "2002-08-13T16:33:18+02:00", + }, + "officieleTalen": ["fr"], + "faciliteitenTalen": ["nl"], + "gemeentenamen": [ + {"spelling": "Moeskroen", "taal": "nl"}, + {"spelling": "Mouscron", "taal": "fr"}, + ], + "gemeenteStatus": "inGebruik", + } + + +def create_client_list_straatnamen_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/straatnaam/1", + "naamruimte": "https://data.vlaanderen.be/id/straatnaam", + "objectId": "1", + "versieId": "2011-04-29T13:34:14+02:00", + }, + "detail": "https://api.basisregisters.vlaanderen.be/v1/straatnamen/1", + "straatnaam": { + "geografischeNaam": {"spelling": "Acacialaan", "taal": "nl"} + }, + "straatnaamStatus": "inGebruik", + } + + +def create_client_get_straatnaam_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/straatnaam/748", + "naamruimte": "https://data.vlaanderen.be/id/straatnaam", + "objectId": "748", + "versieId": "2011-04-29T13:34:14+02:00", + }, + "gemeente": { + "objectId": "11002", + "detail": "https://api.basisregisters.vlaanderen.be/v1/gemeenten/11002", + "gemeentenaam": { + "geografischeNaam": {"spelling": "Antwerpen", "taal": "nl"} + }, + }, + "straatnamen": [{"spelling": "Edelvalklaan", "taal": "nl"}], + "homoniemToevoegingen": [], + "straatnaamStatus": "inGebruik", + } + + +def create_client_list_adressen_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/adres/200001", + "naamruimte": "https://data.vlaanderen.be/id/adres", + "objectId": "200001", + "versieId": "2011-04-29T14:51:01+02:00", + }, + "detail": "https://api.basisregisters.vlaanderen.be/v1/adressen/200001", + "huisnummer": "59", + "volledigAdres": { + "geografischeNaam": { + "spelling": "Goorbaan 59, 2230 Herselt", + "taal": "nl", + } + }, + "adresStatus": "inGebruik", + } + + +def create_client_get_adres_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/adres/763445", + "naamruimte": "https://data.vlaanderen.be/id/adres", + "objectId": "763445", + "versieId": "2011-04-29T14:57:43+02:00", + }, + "gemeente": { + "objectId": "11001", + "detail": "https://api.basisregisters.vlaanderen.be/v1/gemeenten/11001", + "gemeentenaam": { + "geografischeNaam": {"spelling": "Aartselaar", "taal": "nl"} + }, + }, + "postinfo": { + "objectId": "2630", + "detail": "https://api.basisregisters.vlaanderen.be/v1/postinfo/2630", + }, + "straatnaam": { + "objectId": "93", + "detail": "https://api.basisregisters.vlaanderen.be/v1/straatnamen/93", + "straatnaam": { + "geografischeNaam": {"spelling": "Oudestraat", "taal": "nl"} + }, + }, + "huisnummer": "27", + "volledigAdres": { + "geografischeNaam": { + "spelling": "Oudestraat 27, 2630 Aartselaar", + "taal": "nl", + } + }, + "adresPositie": { + "point": {"coordinates": [150949.49, 203818.71], "type": "Point"} + }, + "positieGeometrieMethode": "afgeleidVanObject", + "positieSpecificatie": "gebouweenheid", + "adresStatus": "inGebruik", + "officieelToegekend": True, + } + + +def create_client_get_perceel_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/perceel/11001B0009-00H004", + "naamruimte": "https://data.vlaanderen.be/id/perceel", + "objectId": "11001B0009-00H004", + "versieId": "2004-02-13T10:12:36+01:00", + }, + "perceelStatus": "gerealiseerd", + "adressen": [ + {"objectId": "763445", "detail": "https://test.be/v1/adressen/763445"} + ], + } + + +def create_client_get_gebouw_item(): + return { + "identificator": { + "id": "https://data.vlaanderen.be/id/gebouw/5666547", + "naamruimte": "https://data.vlaanderen.be/id/gebouw", + "objectId": "5666547", + "versieId": "2011-04-29T13:11:28+02:00", + }, + "geometriePolygoon": { + "polygon": { + "coordinates": [[[140284.15277253836, 186724.74131567031]]], + "type": "Polygon", + } + }, + "geometrieMethode": "ingemetenGRB", + "gebouwStatus": "gerealiseerd", + "gebouweenheden": [], + "percelen": [ + { + "objectId": "23052A0059-00C000", + "detail": "https://test.be/v1/percelen/23052A0059-00C000", + } + ], + } + + +class TestAdressenRegisterGateway: + + def test_list_gewesten(self, gateway): + res = gateway.list_gewesten() + assert len(res) == 3 + assert [gewest.naam for gewest in res] == [ + "Brussels Hoofdstedelijk Gewest", + "Vlaams Gewest", + "Waals Gewest", + ] + + def test_get_gewest_by_id(self, gateway): + res = gateway.get_gewest_by_id(2) + assert isinstance(res, Gewest) + assert res.id == 2 + assert res.naam == "Vlaams Gewest" + assert len(res.provincies) == 5 + assert res.centroid == [138165.09, 189297.53] + assert res.bounding_box == [22279.17, 153050.23, 258873.3, 244022.31] + + def test_list_provincies(self, gateway): + res = gateway.list_provincies() + assert len(res) == 5 + assert [p.niscode for p in res] == ["10000", "20001", "30000", "40000", "70000"] + + def test_get_provincie_by_id(self, gateway): + res = gateway.get_provincie_by_id("10000") + assert res.niscode == "10000" + assert res.naam == "Antwerpen" + + def test_list_gemeenten_by_provincie(self, gateway, client): + one = create_client_list_gemeenten_item() + two = create_client_list_gemeenten_item() + one["identificator"]["objectId"] = "10001" + two["identificator"]["objectId"] = "20001" + client.get_gemeenten.return_value = [one, two] + res = gateway.list_gemeenten_by_provincie( + Provincie("10000", "antwerpen", 2, gateway) + ) + assert len(res) == 1 + assert res[0].niscode == "10001" + + def test_get_gewest_by_unexisting_id(self, gateway): + with pytest.raises(GatewayResourceNotFoundException): + gateway.get_gewest_by_id(5) + + def test_list_gemeenten_default(self, gateway, client): + one = create_client_list_gemeenten_item() + two = create_client_list_gemeenten_item() + three = create_client_list_gemeenten_item() + one["identificator"]["objectId"] = "10001" + two["identificator"]["objectId"] = "20001" + three["identificator"]["objectId"] = "60001" + client.get_gemeenten.return_value = [one, two, three] + res = gateway.list_gemeenten() + assert len(res) == 2 + assert [gemeente.niscode for gemeente in res] == ["10001", "20001"] + + def test_get_gemeente_by_id(self, gateway, client): + client.get_gemeente.return_value = create_client_get_gemeente_item() + res = gateway.get_gemeente_by_id(1) + assert res.niscode == "54007" + assert res.naam == "Moeskroen" + + def test_get_gemeente_by_niscode(self, gateway, client): + client.get_gemeente.return_value = create_client_get_gemeente_item() + res = gateway.get_gemeente_by_niscode(1) + assert res.niscode == "54007" + assert res.naam == "Moeskroen" + + def test_list_deelgemeenten(self, gateway): + res = gateway.list_deelgemeenten() + assert len(res) == 1132 + assert res[0].naam == "Aartselaar" + assert res[0].id == "11001A" + assert res[0].gemeente_niscode == "11001" + + def test_list_deelgemeenten_by_gemeente(self, gateway): + res = gateway.list_deelgemeenten_by_gemeente( + Gemeente(niscode="11001", naam="Aartselaar", taal="nl", gateway=gateway) + ) + assert len(res) == 1 + assert res[0].naam == "Aartselaar" + assert res[0].id == "11001A" + assert res[0].gemeente_niscode == "11001" + + def test_get_deelgemeente_by_id(self, gateway): + res = gateway.get_deelgemeente_by_id("11001A") + assert res.naam == "Aartselaar" + assert res.id == "11001A" + assert res.gemeente_niscode == "11001" + + def test_list_straten(self, gateway, client): + client.get_straatnamen.return_value = [ + create_client_list_straatnamen_item(), + create_client_list_straatnamen_item(), + ] + res = gateway.list_straten(Gemeente("Aartselaar", "11001", "nl", gateway)) + assert len(res) == 2 + assert res[0].id == "1" + assert res[0].naam == "Acacialaan" + assert res[0].status == "inGebruik" + assert res[0].taal == "nl" + + def test_get_straat_by_id(self, gateway, client): + client.get_straatnaam.return_value = create_client_get_straatnaam_item() + res = gateway.get_straat_by_id(1) + assert res.id == "748" + assert res.naam == "Edelvalklaan" + assert res.status == "inGebruik" + assert res.taal == "nl" + + def test_list_adressen_by_straat(self, gateway, client): + client.get_adressen.return_value = [ + create_client_list_adressen_item(), + create_client_list_adressen_item(), + ] + res = gateway.list_adressen_by_straat( + Straat("1", "inGebruik", "straatnaaam", "nl", gateway) + ) + assert len(res) == 2 + assert res[0].id == "200001" + assert res[0].huisnummer == "59" + assert res[0].label == "Goorbaan 59, 2230 Herselt" + assert res[0].status == "inGebruik" + assert res[0].taal == "nl" + + def test_list_adressen_by_perceel(self, gateway, client): + client.get_adres.return_value = create_client_get_adres_item() + client.get_perceel.return_value = create_client_get_perceel_item() + res = gateway.list_adressen_by_perceel( + Perceel( + id_="1", + status="inGebruik", + gateway=gateway, + ) + ) + assert len(res) == 1 + assert res[0].id == "763445" + + def test_get_perceel_by_id(self, gateway, client): + client.get_perceel.return_value = create_client_get_perceel_item() + res = gateway.get_perceel_by_id("1") + assert res.id == '11001B0009-00H004' + + def test_get_gebouw_by_id(self, gateway, client): + client.get_gebouw.return_value = create_client_get_gebouw_item() + res = gateway.get_gebouw_by_id("1") + assert res.geojson == { + "polygon": { + "coordinates": [[[140284.15277253836, 186724.7413156703]]], + "type": "Polygon", + } + } + assert res.id == "5666547" + assert len(res.percelen) == 1 + assert res.percelen[0].id == "23052A0059-00C000" + assert res.status == "gerealiseerd" + + +class TestGewest: + + def test_gemeenten(self, gateway, client): + one = create_client_list_gemeenten_item() + two = create_client_list_gemeenten_item() + three = create_client_list_gemeenten_item() + one["identificator"]["objectId"] = "10001" + two["identificator"]["objectId"] = "20001" + three["identificator"]["objectId"] = "60001" + client.get_gemeenten.return_value = [one, two, three] + + vlaanderen = gateway.get_gewest_by_id(2) + res = vlaanderen.gemeenten + assert len(res) == 2 + assert [gemeente.niscode for gemeente in res] == ["10001", "20001"] + + def test_provincies(self, gateway): + vlaanderen = gateway.get_gewest_by_id(2) + provincies = vlaanderen.provincies + assert len(provincies) == 5 + + +class TestProvincie: + + def test_gemeenten(self, gateway, client): + one = create_client_list_gemeenten_item() + two = create_client_list_gemeenten_item() + one["identificator"]["objectId"] = "10001" + two["identificator"]["objectId"] = "20001" + client.get_gemeenten.return_value = [one, two] + + p = Provincie("10001", "Antwerpen", Gewest(2, "Vlaanderen", None, None), gateway) + res = p.gemeenten + assert len(res) == 1 + assert res[0].niscode == "10001" + + +class TestGemeente: + + def test_straten(self, gateway, client): + client.get_straatnamen.return_value = [create_client_list_straatnamen_item()] + g = Gemeente(niscode="1", naam="test-gemeente", gateway=gateway) + straten = g.straten + assert len(straten) == 1 + assert straten[0].id == "1" + + def test_provincie(self, gateway): + g = Gemeente(niscode="1", naam="test-gemeente", gateway=gateway) + provincie = g.provincie + assert provincie.naam == "Antwerpen" + + def test_caching_and_lazy_loading(self, gateway, client): + client.get_gemeente.return_value = create_client_get_gemeente_item() + gemeente = Gemeente(niscode="1", gateway=gateway) + assert gemeente.naam == "Moeskroen" + assert gemeente.naam == "Moeskroen" + assert client.get_gemeente.call_count == 1 + gemeente = Gemeente(niscode="1", gateway=gateway) + assert gemeente.naam == "Moeskroen" + assert client.get_gemeente.call_count == 2 + with tests.memory_cache(): + gemeente = Gemeente(niscode="1", gateway=gateway) + assert gemeente.naam == "Moeskroen" + assert gemeente.naam == "Moeskroen" + gemeente = Gemeente(niscode="1", gateway=gateway) + assert gemeente.naam == "Moeskroen" + assert client.get_gemeente.call_count == 3 + + gemeente = Gemeente(niscode="2", gateway=gateway) + assert gemeente.naam == "Moeskroen" + assert client.get_gemeente.call_count == 4 + + +class TestDeelgemeente: + + def test_gemeente(self, gateway): + dg = Deelgemeente( + id_="45062A", + naam="Sint-Maria-Horebeke", + gemeente_niscode="45062", + gateway=None + ) + gemeente = dg.gemeente + assert isinstance(gemeente, Gemeente) + assert gemeente.niscode == "45062" + + +class TestStraat: + + def test_adressen(self, gateway, client): + client.get_adressen.return_value = [ + create_client_list_adressen_item() + ] + straat = Straat(id_=1, naam="straatnaam", gateway=gateway) + adressen = straat.adressen + assert len(adressen) == 1 + assert adressen[0].id == "200001" + + def test_taal(self, gateway, client): + client.get_straatnaam.return_value = create_client_get_straatnaam_item() + s = Straat(id_=1, gateway=gateway) + assert s.taal == "nl" + + def test_gemeente(self, gateway, client): + client.get_straatnaam.return_value = create_client_get_straatnaam_item() + s = Straat(id_=1, gateway=gateway) + assert s.gemeente.niscode == "11002" + + def test_status(self, gateway, client): + client.get_straatnaam.return_value = create_client_get_straatnaam_item() + s = Straat(id_=1, gateway=gateway) + assert s.status == "inGebruik" + + +class TestAdres: + + def test_adres(self, gateway, client): + client.get_adres.return_value = create_client_get_adres_item() + adres = Adres(id_="1", gateway=gateway) + assert adres.label == "Oudestraat 27, 2630 Aartselaar" + assert adres.taal == "nl" + assert adres.huisnummer == "27" + + def test_gemeente(self, gateway, client): + client.get_adres.return_value = create_client_get_adres_item() + adres = Adres(id_="1", gateway=gateway) + gemeente = adres.gemeente + assert gemeente.niscode == "11001" + + +class TestPerceel: + + def test_adressen(self, gateway, client): + client.get_perceel.return_value = create_client_get_perceel_item() + perceel = Perceel(id_="1", gateway=gateway) + adressen = perceel.adressen + assert len(adressen) == 1 + assert adressen[0].id == "763445" + + def test_status(self, gateway, client): + client.get_perceel.return_value = create_client_get_perceel_item() + perceel = Perceel(id_="1", gateway=gateway) + assert perceel.status == "gerealiseerd" + + +class TestGebouw: + + def test_gebouw(self, gateway, client): + client.get_gebouw.return_value = create_client_get_gebouw_item() + gebouw = Gebouw(id_=1, gateway=gateway) + assert gebouw.status == "gerealiseerd" + assert gebouw.geojson == { + 'polygon': { + 'coordinates': [[[140284.15277253836, 186724.7413156703]]], + 'type': 'Polygon' + } + } + + def test_percelen(self, gateway, client): + client.get_gebouw.return_value = create_client_get_gebouw_item() + gebouw = Gebouw(id_=1, gateway=gateway) + percelen = gebouw.percelen + assert len(percelen) == 1 + assert percelen[0].id == "23052A0059-00C000" diff --git a/tests/gateway/test_capakey.py b/tests/gateway/test_capakey.py index c07e47c..a2cbbcf 100644 --- a/tests/gateway/test_capakey.py +++ b/tests/gateway/test_capakey.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- import re from tests.conftest import CAPAKEY_URL @@ -23,7 +22,7 @@ try: from unittest.mock import MagicMock, patch except: - from mock import MagicMock, patch + from unittest.mock import MagicMock, patch def connection_error(url, headers={}, params={}): @@ -50,7 +49,7 @@ def test_get_gemeente_by_id(self, capakey_rest_gateway, def test_get_gemeente_by_invalid_id(self, capakey_rest_gateway, mocked_responses): url = re.compile( - r'{capakey}/municipality/[^/]+\?'.format(capakey=CAPAKEY_URL) + fr'{CAPAKEY_URL}/municipality/[^/]+\?' ) mocked_responses.add(method='GET', url=url, status=404) from crabpy.gateway.exception import GatewayResourceNotFoundException diff --git a/tests/gateway/test_capakey_cached.py b/tests/gateway/test_capakey_cached.py index 3bc04f1..ff23f51 100644 --- a/tests/gateway/test_capakey_cached.py +++ b/tests/gateway/test_capakey_cached.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import pytest from crabpy.gateway.capakey import ( diff --git a/tests/gateway/test_crab.py b/tests/gateway/test_crab.py index 618c30a..b442bd0 100644 --- a/tests/gateway/test_crab.py +++ b/tests/gateway/test_crab.py @@ -1,10 +1,7 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals import six import pytest -from mock import Mock +from unittest.mock import Mock from crabpy.gateway.exception import ( GatewayRuntimeException, @@ -945,7 +942,7 @@ def test_fully_initialised(self): ) def test_unicode_py2(self): g = Gemeente(92, 'Biévène', 23009, Gewest(2)) - assert 'Biévène (92)'.encode('utf-8') == str(g) + assert 'Biévène (92)'.encode() == str(g) @pytest.mark.skipif( not six.PY3, @@ -2166,7 +2163,7 @@ def test_lazy_load(self, crab_gateway, crab_service): a.set_gateway(crab_gateway) assert a.id == 4428005 assert a.herkomst_id == 3 - assert str(a.geometrie) == str('POINT (74414.91 225777.36)') + assert str(a.geometrie) == 'POINT (74414.91 225777.36)' assert int(a.aard.id) == 2 assert isinstance(a.metadata, Metadata) assert a.metadata.begin_datum == '1830-01-01 00:00:00' diff --git a/tests/gateway/test_crab_cached.py b/tests/gateway/test_crab_cached.py index 2d85a87..74eb353 100644 --- a/tests/gateway/test_crab_cached.py +++ b/tests/gateway/test_crab_cached.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - import pytest -from mock import Mock +from unittest.mock import Mock from crabpy.gateway.crab import ( Gewest, Provincie, diff --git a/tests/gateway/test_exception.py b/tests/gateway/test_exception.py index fc13c24..21301e1 100644 --- a/tests/gateway/test_exception.py +++ b/tests/gateway/test_exception.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import pytest diff --git a/tests/test_client.py b/tests/test_client.py index 8f25752..f39553b 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,19 +1,17 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - import pytest +from responses import RequestsMock +from crabpy.client import AdressenRegisterClient from crabpy.client import ( crab_factory, ) + @pytest.mark.skipif( - not pytest.config.getoption('--crab-integration'), - reason='No CRAB Integration tests required' + not pytest.config.getoption("--crab-integration"), + reason="No CRAB Integration tests required", ) class TestCrabClient: - def setup_method(self, method): self.crab = crab_factory() @@ -22,11 +20,172 @@ def teardown_method(self, method): def test_override_wsdl(self): wsdl = "http://crab.agiv.be/wscrab/wscrab.svc?wsdl" - self.crab = crab_factory( - wsdl=wsdl - ) + self.crab = crab_factory(wsdl=wsdl) assert self.crab.wsdl.url == wsdl def test_list_gemeenten(self): res = self.crab.service.ListGemeentenByGewestId(2) assert len(res) > 0 + + +class TestAdressenRegisterClient: + @pytest.fixture() + def client(self): + return AdressenRegisterClient("https://test-adres.be", "key") + + @pytest.fixture() + def requests_mock(self): + with RequestsMock() as requests_mock: + yield requests_mock + + def test_get_gemeente(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/gemeenten/123", + json={"name": "test-gemeente"}, + ) + res = client.get_gemeente("123") + assert res == {"name": "test-gemeente"} + + def test_get_gemeenten(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/gemeenten", + json={"gemeenten": [{"name": "test-gemeente"}]}, + ) + res = client.get_gemeenten() + assert res == [{"name": "test-gemeente"}] + + def test_get_postinfo(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/postinfo/123", + json={"name": "test-postinfo"}, + ) + res = client.get_postinfo("123") + assert res == {"name": "test-postinfo"} + + def test_get_postinfos(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/postinfo", + json={"postInfoObjecten": [{"name": "test-postinfo"}]}, + ) + res = client.get_postinfos() + assert res == [{"name": "test-postinfo"}] + + def test_get_straatnaam(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/straatnamen/123", + json={"name": "test-straatnaam"}, + ) + res = client.get_straatnaam("123") + assert res == {"name": "test-straatnaam"} + + def test_get_straatnamen(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/straatnamen", + json={"straatnamen": [{"name": "test-straatnaam"}]}, + ) + res = client.get_straatnamen() + assert res == [{"name": "test-straatnaam"}] + + def test_get_adres(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/adressen/123", + json={"name": "test-adres"}, + ) + res = client.get_adres("123") + assert res == {"name": "test-adres"} + + def test_get_adressen(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/adressen", + json={"adressen": [{"name": "test-adres"}]}, + ) + res = client.get_adressen() + assert res == [{"name": "test-adres"}] + + def test_get_perceel(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/percelen/123", + json={"name": "test-perceel"}, + ) + res = client.get_perceel("123") + assert res == {"name": "test-perceel"} + + def test_get_percelen(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/percelen", + json={"percelen": [{"name": "test-perceel"}]}, + ) + res = client.get_percelen() + assert res == [{"name": "test-perceel"}] + + def test_get_gebouw(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/gebouwen/123", + json={"name": "test-gebouw"}, + ) + res = client.get_gebouw("123") + assert res == {"name": "test-gebouw"} + + def test_get_gebouwen(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/gebouwen", + json={"gebouwen": [{"name": "test-gebouw"}]}, + ) + res = client.get_gebouwen() + assert res == [{"name": "test-gebouw"}] + + def test_get_adres_match(self, client, requests_mock): + response = { + "adresMatches": [ + { + "gemeente": { + "objectId": "11001", + "detail": "https://test.be/v1/gemeenten/11001", + "gemeentenaam": { + "geografischeNaam": { + "spelling": "Aartselaar", + "taal": "nl", + } + }, + }, + } + ] + } + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/adresmatch", + json=response, + ) + res = client.get_adres_match() + assert res == response + + def test_list_multiple_pages(self, client, requests_mock): + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/gemeenten", + json={ + "gemeenten": [{"name": "test-gemeente1"}], + "volgende": "https://test-adres.be/v1/gemeenten" + }, + ) + requests_mock.add( + method=requests_mock.GET, + url="https://test-adres.be/v1/gemeenten", + json={ + "gemeenten": [{"name": "test-gemeente2"}], + }, + ) + res = client.get_gemeenten() + assert res == [{"name": "test-gemeente1"}, {"name": "test-gemeente2"}] diff --git a/tests/test_wsa.py b/tests/test_wsa.py index 394a0af..07e5cad 100644 --- a/tests/test_wsa.py +++ b/tests/test_wsa.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import unittest from suds.sax.element import Element diff --git a/tests/test_wsse.py b/tests/test_wsse.py index b264535..05d57f0 100644 --- a/tests/test_wsse.py +++ b/tests/test_wsse.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - import unittest from crabpy.wsse import UsernameDigestToken @@ -29,13 +27,13 @@ def test_simple(self): def test_set_custom_nonce(self): self.assertIsInstance(self.token, UsernameDigestToken) - self.token.setnonce('NONCE'.encode('utf-8')) + self.token.setnonce(b'NONCE') xml = self.token.xml() self.assertIsInstance(xml, Element) self.assertIsInstance(xml.getChild('Username', ns=wssens), Element) self.assertIsInstance(xml.getChild('Password', ns=wssens), Element) self.assertIsInstance(xml.getChild('Nonce', ns=wssens), Element) - self.assertEquals( + self.assertEqual( xml.getChild('Nonce', ns=wssens).getText(), - b64encode('NONCE'.encode('utf-8')).decode('utf-8') + b64encode(b'NONCE').decode('utf-8') ) From 5bf8c35482d01244cf90de204ae944dd59767cdb Mon Sep 17 00:00:00 2001 From: Wim De Clercq Date: Thu, 28 Oct 2021 14:23:42 +0200 Subject: [PATCH 2/4] Review fixes. --- crabpy/gateway/adressenregister.py | 47 +++++--------------------- tests/gateway/test_adressenregister.py | 10 ++++++ 2 files changed, 19 insertions(+), 38 deletions(-) diff --git a/crabpy/gateway/adressenregister.py b/crabpy/gateway/adressenregister.py index cb3d588..cad678b 100644 --- a/crabpy/gateway/adressenregister.py +++ b/crabpy/gateway/adressenregister.py @@ -411,11 +411,7 @@ def __str__(self): return f"Gewest {self.id}" def __repr__(self): - attrs = [ - f"{attr}={repr(getattr(self, attr))}" - for attr in ["id", "naam", "centroid", "bounding_box"] - ] - return f"Gewest({', '.join(attrs)})" + return f"Gewest(id={self.id})" class Provincie(GatewayObject): @@ -439,11 +435,7 @@ def __str__(self): return f"{self.naam} ({self.niscode})" def __repr__(self): - attrs = [ - f"{attr}={repr(getattr(self, attr))}" - for attr in ["niscode", "naam", "gewest"] - ] - return f"Gewest({', '.join(attrs)})" + return f"Provincie(niscode={self.niscode})" class Gemeente(GatewayObject): @@ -478,7 +470,7 @@ def from_get_response(cls, gemeente, gateway): def taal(self): taal_nl = False taal_fr = False - for naam in self._source_json["straatnamen"]: + for naam in self._source_json["gemeentenamen"]: if naam["taal"] == "nl": taal_nl = True elif naam["taal"] == "fr": @@ -517,11 +509,7 @@ def __str__(self): return f"{self.naam} ({self.niscode})" def __repr__(self): - attrs = [ - f"{attr}={repr(getattr(self, attr))}" - for attr in ["niscode", "naam", "taal"] - ] - return f"Gewest({', '.join(attrs)})" + return f"Gemeente(niscode={self.niscode})" class Deelgemeente(GatewayObject): @@ -545,11 +533,7 @@ def __str__(self): return f"{self.naam} ({self.id})" def __repr__(self): - attrs = [ - f"{attr}={repr(getattr(self, attr))}" - for attr in ["id", "naam", "gemeente_niscode"] - ] - return f"Gewest({', '.join(attrs)})" + return f"Deelgemeente(id={self.id}" class Straat(GatewayObject): @@ -634,11 +618,7 @@ def __str__(self): return f"{self.naam} ({self.id})" def __repr__(self): - attrs = [ - f"{attr}={repr(getattr(self, attr))}" - for attr in ["id", "gemeente", "status", "naam", "taal"] - ] - return f"Gewest({', '.join(attrs)})" + return f"Straat(id={self.id})" class Adres(GatewayObject): @@ -717,11 +697,7 @@ def __str__(self): return f"{self.label} ({self.id})" def __repr__(self): - attrs = [ - f"{attr}={repr(getattr(self, attr))}" - for attr in ["id", "status", "huisnummer", "label", "taal", "gemeente"] - ] - return f"Gewest({', '.join(attrs)})" + return f"Adres(id={self.id})" class Perceel(GatewayObject): @@ -764,8 +740,7 @@ def __str__(self): return f"Perceel {self.id}" def __repr__(self): - attrs = [f"{attr}={repr(getattr(self, attr))}" for attr in ["id", "status"]] - return f"Gewest({', '.join(attrs)})" + return f"Perceel(id={self.id})" class Gebouw(GatewayObject): @@ -815,8 +790,4 @@ def __str__(self): return f"Gebouw {self.id}" def __repr__(self): - attrs = [ - f"{attr}={repr(getattr(self, attr))}" - for attr in ["id", "status", "percelen", "geojson"] - ] - return f"Gewest({', '.join(attrs)})" + return f"Gebouw(id={self.id})" diff --git a/tests/gateway/test_adressenregister.py b/tests/gateway/test_adressenregister.py index 57af9d1..aa19da2 100644 --- a/tests/gateway/test_adressenregister.py +++ b/tests/gateway/test_adressenregister.py @@ -411,6 +411,16 @@ def test_provincie(self, gateway): provincie = g.provincie assert provincie.naam == "Antwerpen" + def test_taal(self, gateway, client): + client.get_gemeente.return_value = create_client_get_gemeente_item() + g = Gemeente(niscode="1", gateway=gateway) + assert g.taal == "nl" + + def test_naam(self, gateway, client): + client.get_gemeente.return_value = create_client_get_gemeente_item() + g = Gemeente(niscode="1", gateway=gateway) + assert g.naam == "Moeskroen" + def test_caching_and_lazy_loading(self, gateway, client): client.get_gemeente.return_value = create_client_get_gemeente_item() gemeente = Gemeente(niscode="1", gateway=gateway) From af9cd23b1e8784b99f024cc8448d1a2511e64db4 Mon Sep 17 00:00:00 2001 From: vancamti Date: Wed, 17 Nov 2021 09:54:08 +0100 Subject: [PATCH 3/4] #168 bounding box straat float --- crabpy/gateway/crab.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crabpy/gateway/crab.py b/crabpy/gateway/crab.py index 3805c4c..7fc1f2c 100644 --- a/crabpy/gateway/crab.py +++ b/crabpy/gateway/crab.py @@ -2076,8 +2076,8 @@ def bounding_box(self): list = a.split(',') for z in list: temp = z.split() - x.append(temp[0]) - y.append(temp[1]) + x.append(float(temp[0])) + y.append(float(temp[1])) return [min(x), min(y), max(x), max(y)] def __unicode__(self): From b1f115f1fd4ed58cc51f76dbe035a9309832ccc3 Mon Sep 17 00:00:00 2001 From: Vanderhaegen Cedrik Date: Thu, 18 Nov 2021 14:32:40 +0100 Subject: [PATCH 4/4] prepare 0.14.0 release --- CHANGES.rst | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index a097869..308d3e8 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,8 @@ +0.14.0 (18-11-2021) +------------------- + +- Bounding box geeft strings ipv floats (#168) + 0.13.0 (14-09-2021) ------------------- diff --git a/setup.py b/setup.py index 5e46f93..112c0a3 100755 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ setup( name='crabpy', - version='0.13.0', + version='0.14.0', description='Interact with geographical webservices by Informatie Vlaanderen.', long_description=open('README.rst').read() + '\n\n' + open('CHANGES.rst').read(),