Broaden official source portfolio
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-16 02:04:31 +02:00
parent 8628582caa
commit fdf3881592
10 changed files with 970 additions and 197 deletions
+398
View File
@@ -0,0 +1,398 @@
import type { DatasetCreateResponse } from '../types'
export type SourceDomainKey =
| 'space'
| 'nature'
| 'soil'
| 'mobility'
| 'people'
| 'climate'
export type SourcePriority = 'next' | 'planned' | 'later'
export interface SourceDomainDefinition {
key: SourceDomainKey
label: string
question: string
}
export interface OfficialSourceDefinition {
key: string
domain: SourceDomainKey
name: string
owner: string
coverage: string
value: string
metricExamples: string
priority: SourcePriority
url: string
matches: (dataset: DatasetCreateResponse) => boolean
}
const sourceNameIs = (dataset: DatasetCreateResponse, sourceName: string): boolean =>
dataset.source_name === sourceName
const referenceLayerIs = (dataset: DatasetCreateResponse, layerName: string): boolean =>
String(dataset.reference_layer_name ?? dataset.source_metadata?.['theme'] ?? '').toLowerCase() === layerName
export const SOURCE_DOMAINS: SourceDomainDefinition[] = [
{
key: 'space',
label: 'Ruimte en bebouwing',
question: 'Wat staat en gebeurt hier, en hoe verandert het ruimtegebruik?',
},
{
key: 'nature',
label: 'Natuur en landbouw',
question: 'Hoeveel bos, natuurwaarde en landbouwgebruik ligt in de selectie?',
},
{
key: 'soil',
label: 'Bodem en reliëf',
question: 'Welke bodem, hoogte, helling en erosiegevoeligheid komen voor?',
},
{
key: 'mobility',
label: 'Mobiliteit en bereikbaarheid',
question: 'Welke netwerken en knooppunten maken het gebied bereikbaar?',
},
{
key: 'people',
label: 'Bevolking en voorzieningen',
question: 'Hoeveel mensen wonen er en hoe bereikbaar zijn dagelijkse diensten?',
},
{
key: 'climate',
label: 'Klimaat en leefomgeving',
question: 'Welke risico’s en omgevingsdruk spelen rond hitte, lucht en water?',
},
]
export const OFFICIAL_SOURCE_PORTFOLIO: OfficialSourceDefinition[] = [
{
key: 'grb_buildings',
domain: 'space',
name: 'GRB-gebouwen',
owner: 'Digitaal Vlaanderen',
coverage: 'Actuele gebouwcontouren',
value: 'Objectniveau voor bebouwing, kaartselectie en AI-validatie.',
metricExamples: 'aantal gebouwen, bebouwde oppervlakte, dichtheid',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/grbgis',
matches: (dataset) => sourceNameIs(dataset, 'grb') && referenceLayerIs(dataset, 'buildings'),
},
{
key: 'building_register',
domain: 'space',
name: 'Gebouwen- en Adressenregister',
owner: 'Digitaal Vlaanderen',
coverage: 'Continu geactualiseerd',
value: 'Gebouwstatus en geaggregeerde eenheden als aanvulling op GRB.',
metricExamples: 'gerealiseerde gebouwen, gebouweenheden, statusverdeling',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/gebouwen-en-adressenregister',
matches: (dataset) => sourceNameIs(dataset, 'digitaal_vlaanderen_buildings_addresses_register'),
},
{
key: 'land_use',
domain: 'space',
name: 'Landgebruik Vlaanderen',
owner: 'Departement Omgeving',
coverage: '10 m raster, meerdere officiële toestanden',
value: 'Werkelijk gebruik voor wonen, industrie, landbouw en natuur.',
metricExamples: 'hectare per landgebruiksklasse, aandeel van selectie, evolutie',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/landgebruik-vlaanderen-toestand-2022',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_land_use') || sourceNameIs(dataset, 'historical_landuse'),
},
{
key: 'orthophoto',
domain: 'space',
name: 'Actuele en historische orthofoto’s',
owner: 'Digitaal Vlaanderen',
coverage: '1971, 1979-1990 en jaarlijkse reeksen 2000-2025',
value: 'Beeldbewijs voor actuele toestand en visuele evolutie.',
metricExamples: 'beeldjaargang en begrensde AI- of visuele analyse',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/orthofotomozaiek-kleinschalig-zomeropnamen',
matches: (dataset) => sourceNameIs(dataset, 'digitaal_vlaanderen_orthophoto'),
},
{
key: 'space_occupation',
domain: 'space',
name: 'Ruimtebeslag Vlaanderen 2025',
owner: 'Departement Omgeving',
coverage: '10 m raster, toestand 2025',
value: 'Gebiedsdruk en ingenomen ruimte naast het fijnere GRB-objectbeeld.',
metricExamples: 'hectare ruimtebeslag, aandeel, vergelijking met open ruimte',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/ruimtebeslag-vlaanderen-toestand-2025',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_space_occupation'),
},
{
key: 'settlement_typology',
domain: 'space',
name: 'Kernen, linten en verspreide bebouwing',
owner: 'Departement Omgeving',
coverage: 'Toestand 2022',
value: 'Begrijpelijke morfologie voor kern, lint en verspreide bebouwing.',
metricExamples: 'oppervlakte en aandeel per morfologisch type',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/kernen-linten-verspreide-bebouwing-in-vlaanderen-kernen-toestand-2022',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_settlement_typology'),
},
{
key: 'business_parks',
domain: 'space',
name: 'Bedrijventerreinen OSLO',
owner: 'VLAIO / Digitaal Vlaanderen',
coverage: 'Productieservice, toestand 2026',
value: 'Economische ruimte, bezetting en bedrijventerreincontext.',
metricExamples: 'hectare bedrijventerrein, bezette/onbezette oppervlakte',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/wfs-bedrijventerreinen',
matches: (dataset) => sourceNameIs(dataset, 'vlaio_business_parks'),
},
{
key: 'bwk',
domain: 'nature',
name: 'BWK / Natura 2000',
owner: 'INBO',
coverage: 'Toestand 2025',
value: 'Biologische waardering, biotopen en habitattypen.',
metricExamples: 'hectare natuurwaarde, habitat en regionaal belangrijk biotoop',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/biologische-waarderingskaart-en-natura-2000-habitatkaart-toestand-2025',
matches: (dataset) => sourceNameIs(dataset, 'inbo_bwk_natura2000'),
},
{
key: 'agriculture',
domain: 'nature',
name: 'Landbouwgebruikspercelen',
owner: 'Agentschap Landbouw en Zeevisserij',
coverage: 'Jaarlijkse definitieve bestanden',
value: 'Landbouwoppervlakte en teeltevolutie zonder perceellijnage te verzinnen.',
metricExamples: 'hectare landbouw en hoofdteeltgroep per jaar',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/open-geodata-landbouwgebruikspercelen',
matches: (dataset) => sourceNameIs(dataset, 'agentschap_landbouw_zeevisserij_agricultural_parcels'),
},
{
key: 'open_space',
domain: 'nature',
name: 'Open ruimte Vlaanderen',
owner: 'Departement Omgeving',
coverage: '10 m raster, toestand 2022',
value: 'Openruimte-aandeel en versnippering naast ruimtebeslag en landgebruik.',
metricExamples: 'hectare open ruimte, aandeel en fragmentatie',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/open-ruimte-vlaanderen-toestand-2022',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_open_space'),
},
{
key: 'dhmv',
domain: 'soil',
name: 'Digitaal Hoogtemodel Vlaanderen II',
owner: 'Digitaal Vlaanderen',
coverage: 'DTM/DSM, opname 2013-2015',
value: 'Hoogte, reliëf en helling als gemeten terreinbasis.',
metricExamples: 'hoogte m TAW, reliëf en helling in graden',
priority: 'next',
url: 'https://www.vlaanderen.be/digitaal-vlaanderen/onze-diensten-en-platformen/earth-observation-data-science-eodas/het-digitaal-hoogtemodel/digitaal-hoogtemodel-vlaanderen-ii',
matches: (dataset) => sourceNameIs(dataset, 'digitaal_vlaanderen_dhmv'),
},
{
key: 'soil_map',
domain: 'soil',
name: 'Digitale bodemkaart',
owner: 'Databank Ondergrond Vlaanderen',
coverage: 'Vlaams Gewest, historische kartering',
value: 'Bodemtype, textuur en drainage voor landbouw en geschiktheid.',
metricExamples: 'hectare per bodemtype, drainage- en textuurverdeling',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/digitale-bodemkaart-van-het-vlaams-gewest-bodemtypes',
matches: (dataset) => sourceNameIs(dataset, 'dov_soil_map'),
},
{
key: 'erosion',
domain: 'soil',
name: 'Potentiële bodemerosie per perceel',
owner: 'Departement Omgeving',
coverage: 'Perceelmodel, editie 2023',
value: 'Potentiële erosiedruk gecombineerd met landbouw en reliëf.',
metricExamples: 'hectare per erosieklasse en aandeel risicogebied',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/potentiele-bodemerosiekaart-per-perceel-2023',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_erosion'),
},
{
key: 'grb_roads',
domain: 'mobility',
name: 'GRB-wegen en transport',
owner: 'Digitaal Vlaanderen',
coverage: 'Actuele wegcontext',
value: 'Wegennet en transportcontext in de kaartselectie.',
metricExamples: 'kilometer weg, dichtheid en afstand tot netwerk',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/grbgis',
matches: (dataset) => sourceNameIs(dataset, 'grb') && referenceLayerIs(dataset, 'roads'),
},
{
key: 'node_value',
domain: 'mobility',
name: 'Knooppuntwaarde per hectare',
owner: 'Departement Omgeving',
coverage: '1 ha raster, toestand 2022',
value: 'Modelmatige bereikbaarheid via collectief vervoer.',
metricExamples: 'gemiddelde score en aandeel per bereikbaarheidsklasse',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/knooppuntwaarde-per-ha-toestand-2022',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_node_value'),
},
{
key: 'hoppin',
domain: 'mobility',
name: 'Hoppinpunten en mobiliteitsknooppunten',
owner: 'Departement Mobiliteit en Openbare Werken',
coverage: 'Geplande en gerealiseerde punten',
value: 'Multimodale overstappunten en voorzieningen in de buurt.',
metricExamples: 'aantal punten, status en afstand tot selectie',
priority: 'planned',
url: 'https://www.vlaanderen.be/DataCatalogRecord/c262d7d0-d90d-4695-a8c6-6427ef4abb38',
matches: (dataset) => sourceNameIs(dataset, 'mow_hoppin'),
},
{
key: 'cycle_highways',
domain: 'mobility',
name: 'Fietssnelwegen',
owner: 'Vereniging van de Vlaamse Provincies',
coverage: 'Vlaams netwerk, productieservice',
value: 'Gerealiseerde en geplande functionele fietsverbindingen.',
metricExamples: 'kilometer route, realisatiestatus en kwaliteit',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/fietssnelwegen-wfs',
matches: (dataset) => sourceNameIs(dataset, 'vvp_cycle_highways'),
},
{
key: 'statistical_sectors',
domain: 'people',
name: 'Statistische sectoren',
owner: 'Statbel / Digitaal Vlaanderen',
coverage: 'Gebiedsindeling, toestand 2024/2025',
value: 'Betrouwbare ruimtelijke sleutel voor socio-economische indicatoren.',
metricExamples: 'sectorprofielen en gewogen indicatoren per selectie',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/statistische-sectoren-van-belgie-toestand-01-01-2024',
matches: (dataset) => sourceNameIs(dataset, 'statbel') && referenceLayerIs(dataset, 'statistical_sectors'),
},
{
key: 'population_density',
domain: 'people',
name: 'Inwonersdichtheid per hectare',
owner: 'Departement Omgeving / Statbel',
coverage: '1 ha raster, toestand 2019',
value: 'Gebiedsdekkende bevolkingsdichtheid zonder adressen te tonen.',
metricExamples: 'geschat aantal inwoners en inwoners per hectare',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/inwonersdichtheid-per-ha-vlaanderen-toestand-2019',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_population_density'),
},
{
key: 'service_level',
domain: 'people',
name: 'Totaal voorzieningenniveau',
owner: 'Departement Omgeving',
coverage: '1 ha raster, toestand 2022',
value: 'Nabijheid van dagelijkse voorzieningen in één brongetrouwe score.',
metricExamples: 'gemiddelde score en aandeel per voorzieningsklasse',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/totaal-voorzieningenniveau-toestand-2022',
matches: (dataset) => sourceNameIs(dataset, 'department_omgeving_service_level'),
},
{
key: 'municipality_indicators',
domain: 'people',
name: 'Gemeente in cijfers',
owner: 'Vlaamse Milieumaatschappij',
coverage: 'Gemeentelijke klimaat- en leefomgevingsindicatoren',
value: 'Contextcijfers voor Mol en vergelijking met andere gemeenten.',
metricExamples: 'hittegolfdagen, temperatuur en luchtkwaliteitsindex',
priority: 'later',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/gemeente-in-cijfers',
matches: (dataset) => sourceNameIs(dataset, 'vmm_municipality_indicators'),
},
{
key: 'flood_hazard',
domain: 'climate',
name: 'VMM-overstromingsgevaar',
owner: 'Vlaamse Milieumaatschappij',
coverage: 'Fluviaal/pluviaal, T10/T100/T1000, huidig en 2050',
value: 'Gemodelleerde lokale maximumdiepte per kansscenario.',
metricExamples: 'hectare positieve diepte, gemiddelde/P90/maximale diepte',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/publieke-inspire-coverage-service-van-ogrk',
matches: (dataset) => sourceNameIs(dataset, 'vmm_flood_hazard'),
},
{
key: 'waterinfo',
domain: 'climate',
name: 'Waterinfo meetreeksen',
owner: 'Waterinfo Vlaanderen',
coverage: 'Stationgebonden jaarmetingen',
value: 'Hydrologische waarnemingen als puntreeksen, niet als gebiedsvolume.',
metricExamples: 'waterstand, debiet en neerslag per station en periode',
priority: 'planned',
url: 'https://waterinfo.vlaanderen.be/',
matches: (dataset) => sourceNameIs(dataset, 'waterinfo'),
},
{
key: 'heat_stress',
domain: 'climate',
name: 'Hitte-eilanden in steden',
owner: 'Vlaamse Milieumaatschappij',
coverage: 'Jaarbeelden 2019-2022',
value: 'Ruimtelijke blootstelling aan hittestress voor leefomgevingsanalyse.',
metricExamples: 'hittegolfgraaddagen en aandeel blootgesteld gebied',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/hitte-eilanden-in-steden',
matches: (dataset) => sourceNameIs(dataset, 'vmm_heat_stress'),
},
{
key: 'air_quality',
domain: 'climate',
name: 'Luchtkwaliteit',
owner: 'Vlaamse Milieumaatschappij / Departement Omgeving',
coverage: 'Meetreeksen en geselecteerde gebiedskaarten',
value: 'PM2,5 en andere luchtindicatoren met expliciete schaal en jaargang.',
metricExamples: 'concentratie, normoverschrijding en trend per brongebied',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/concentratie-fijn-stof-pm25-in-de-omgevingslucht',
matches: (dataset) => sourceNameIs(dataset, 'vmm_air_quality'),
},
{
key: 'vha',
domain: 'climate',
name: 'Vlaamse Hydrografische Atlas',
owner: 'Vlaamse Milieumaatschappij',
coverage: 'Actuele gecategoriseerde waterlopen',
value: 'Autoritatief waterlopennetwerk voor lengte, categorie en beheerder.',
metricExamples: 'kilometer waterloop per categorie en afstand tot netwerk',
priority: 'later',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/ogc-api-features-vlaamse-hydrografische-atlas-waterlopen',
matches: (dataset) => sourceNameIs(dataset, 'vmm_vha'),
},
]
export function operationalSources(
datasets: DatasetCreateResponse[],
domain?: SourceDomainKey,
): OfficialSourceDefinition[] {
const ready = datasets.filter((dataset) => dataset.status === 'ready')
return OFFICIAL_SOURCE_PORTFOLIO.filter(
(source) => (!domain || source.domain === domain) && ready.some(source.matches),
)
}
export function sourcesForDomain(domain: SourceDomainKey): OfficialSourceDefinition[] {
return OFFICIAL_SOURCE_PORTFOLIO.filter((source) => source.domain === domain)
}