Files
geointel/frontend/src/lib/sourcePortfolio.ts
T
Codex 70c5e34ecf
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
Add governed SPW bathymetry analysis
2026-07-19 04:07:01 +02:00

438 lines
18 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
const thematicProductIs = (dataset: DatasetCreateResponse, productKey: string): boolean =>
sourceNameIs(dataset, 'department_omgeving_thematic_raster') && dataset.source_metadata?.['product_key'] === productKey
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 risicos 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 orthofotos',
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) => thematicProductIs(dataset, 'space_occupation_2025'),
},
{
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: 'next',
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) => thematicProductIs(dataset, 'open_space_2022'),
},
{
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, mediaan en percentielen van de bronindex',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/knooppuntwaarde-per-ha-toestand-2022',
matches: (dataset) => thematicProductIs(dataset, 'node_value_2022'),
},
{
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) => thematicProductIs(dataset, 'population_density_2019'),
},
{
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, mediaan en percentielen van de 0-1-score',
priority: 'next',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/totaal-voorzieningenniveau-toestand-2022',
matches: (dataset) => thematicProductIs(dataset, 'service_level_2022'),
},
{
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'),
},
{
key: 'vha_bathymetry_profiles',
domain: 'climate',
name: 'VHA-dwarsprofielen waterbodem',
owner: 'Vlaamse Milieumaatschappij',
coverage: 'Historische profielpunten op Vlaamse waterlopen',
value: 'Gemeten profielinformatie en officiële bronbladen op exacte kaartlocaties.',
metricExamples: 'aantal profielen, geregistreerde diepte en breedte per meetpunt',
priority: 'next',
url: 'https://vha.waterinfo.be/arcgis/rest/services/digitale_atlas/MapServer',
matches: (dataset) => sourceNameIs(dataset, 'vmm_vha_bathymetry_profiles'),
},
{
key: 'mdk_bcp_bathymetry',
domain: 'climate',
name: 'Dieptemodel Belgisch Continentaal Plat',
owner: 'Agentschap Maritieme Dienstverlening en Kust',
coverage: 'Belgische Noordzee, 20 x 20 m raster in LAT',
value: 'Continue zeebodemhoogte voor mariene selectie en evolutie.',
metricExamples: 'minimum/maximum diepte, diepteklassen en bodemvolume per peilcampagne',
priority: 'planned',
url: 'https://www.vlaanderen.be/datavindplaats/catalogus/dieptemodel-van-de-zeebodem-belgisch-continentaal-plat-noordzee',
matches: (dataset) => sourceNameIs(dataset, 'mdk_bcp_bathymetry'),
},
{
key: 'spw_waterway_bathymetry',
domain: 'climate',
name: 'Waalse vaarweg- en stuwmeerbathymetrie',
owner: 'Service public de Wallonie',
coverage: 'Gemeten Waalse vaarwegen en stuwmeren, 0,5 m in mDNG',
value: 'Officiële waterbodemhoogtes voor begrensde analyse buiten Vlaanderen.',
metricExamples: 'bodemhoogte, gemeten oppervlakte en brondekking',
priority: 'next',
url: 'https://geoportail.wallonie.be/catalogue/0a544b42-0b30-4c8e-85e7-38149b99eae0.html',
matches: (dataset) => sourceNameIs(dataset, 'spw_bathymetry'),
},
]
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)
}