glam/schemas/20251121/linkml/modules/classes/GeoSpatialPlace.yaml
2025-12-06 19:50:04 +01:00

474 lines
16 KiB
YAML

# GeoSpatialPlace Class - Geospatial Location with Coordinates and Geometry
# Based on TOOI BestuurlijkeRuimte pattern using GeoSPARQL
#
# CRITICAL DISTINCTION:
# - CustodianPlace: NOMINAL reference ("het herenhuis in de Schilderswijk")
# - GeoSpatialPlace: GEOSPATIAL coordinates (lat: 52.0705, lon: 4.2894, geometry: POLYGON(...))
#
# TOOI Alignment:
# - tooi:BestuurlijkeRuimte is subClassOf geosparql:Feature, prov:Entity
# - tooi:BestuurlijkeRuimte-hasGeometry → geosparql:Geometry
# - This class follows the same pattern for heritage custodian locations
id: https://nde.nl/ontology/hc/class/GeoSpatialPlace
name: geospatial_place_class
title: GeoSpatialPlace Class
prefixes:
geosparql: http://www.opengis.net/ont/geosparql#
wgs84: http://www.w3.org/2003/01/geo/wgs84_pos#
sf: http://www.opengis.net/ont/sf#
gn: http://www.geonames.org/ontology#
gn_entity: http://sws.geonames.org/
tooi: https://identifier.overheid.nl/tooi/def/ont/
imports:
- linkml:types
- ../metadata
- ../slots/geonames_id
- ../slots/latitude
- ../slots/longitude
- ../slots/altitude
types:
WktLiteral:
uri: geosparql:wktLiteral
base: str
description: |
Well-Known Text (WKT) representation of geometry.
See OGC Simple Features specification.
examples:
- value: "POINT(4.2894 52.0705)"
- value: "POLYGON((4.0 52.0, 4.5 52.0, 4.5 52.5, 4.0 52.5, 4.0 52.0))"
slots:
geospatial_id:
identifier: true
range: uriorcurie
description: "Unique identifier for this geospatial place"
# NOTE: latitude imported from global slot ../slots/latitude.yaml
# NOTE: longitude imported from global slot ../slots/longitude.yaml
# NOTE: altitude imported from global slot ../slots/altitude.yaml
geometry_wkt:
range: string
slot_uri: geosparql:asWKT
description: |
Well-Known Text (WKT) representation of the geometry.
Use for polygons, lines, or complex geometries.
Examples:
- POINT(4.8852 52.3600) - Single point
- POLYGON((lon1 lat1, lon2 lat2, ...)) - Boundary polygon
- MULTIPOLYGON(...) - Multiple polygons (e.g., archipelago)
examples:
- value: "POINT(4.8852 52.3600)"
description: "Amsterdam centroid"
- value: "POLYGON((4.72 52.28, 5.08 52.28, 5.08 52.43, 4.72 52.43, 4.72 52.28))"
description: "Amsterdam municipal boundary (simplified)"
geometry_type:
range: GeometryTypeEnum
description: |
Type of geometry (Point, Polygon, MultiPolygon, etc.).
Follows OGC Simple Features classification.
examples:
- value: "POINT"
- value: "POLYGON"
coordinate_reference_system:
range: string
description: |
Coordinate Reference System identifier.
Default: EPSG:4326 (WGS84).
Common CRS codes:
- EPSG:4326 - WGS84 (GPS coordinates)
- EPSG:28992 - Amersfoort / RD New (Dutch national grid)
- EPSG:3857 - Web Mercator (web maps)
examples:
- value: "EPSG:4326"
description: "WGS84 - default for GPS coordinates"
- value: "EPSG:28992"
description: "Dutch Rijksdriehoeksstelsel"
# NOTE: geonames_id imported from global slot ../slots/geonames_id.yaml
osm_id:
range: string
description: |
OpenStreetMap identifier (node, way, or relation).
Format: {type}/{id} (e.g., "way/123456789")
Use for:
- Building footprints
- Street-level detail
- Community-verified boundaries
examples:
- value: "way/27083908"
description: "Rijksmuseum building footprint"
cadastral_id:
range: string
description: |
Cadastral parcel identifier.
Country-specific format.
Netherlands: Kadaster perceelnummer
Format: {gemeente}-{sectie}-{perceelnummer}
examples:
- value: "ASD04-H-4567"
description: "Amsterdam cadastral parcel"
accuracy_meters:
range: float
description: |
Spatial accuracy in meters.
Indicates uncertainty radius around coordinates.
Typical values:
- 1-5m: High-precision survey or GPS
- 10-50m: Standard GPS
- 100-500m: Geocoded address
- 1000m+: Regional/city-level approximation
examples:
- value: 5.0
description: "High-precision GPS survey"
- value: 100.0
description: "Geocoded from address"
geospatial_source:
range: string
slot_uri: dcterms:source
description: |
Source of geospatial data.
Common sources:
- "GeoNames API"
- "OpenStreetMap Nominatim"
- "Google Maps Geocoding API"
- "Kadaster BAG"
- "Manual survey"
examples:
- value: "OpenStreetMap Nominatim"
- value: "Kadaster BAG"
bounding_box:
range: string
slot_uri: geosparql:hasBoundingBox
description: |
Bounding box in WKT format.
Format: POLYGON((minLon minLat, maxLon minLat, maxLon maxLat, minLon maxLat, minLon minLat))
examples:
- value: "POLYGON((4.72 52.28, 5.08 52.28, 5.08 52.43, 4.72 52.43, 4.72 52.28))"
description: "Amsterdam bounding box"
spatial_resolution:
range: string
description: |
Level of spatial detail.
Values:
- BUILDING: Individual building footprint
- PARCEL: Cadastral parcel
- STREET: Street address level
- NEIGHBORHOOD: Neighborhood/district
- CITY: City/municipality centroid
- REGION: Province/state level
- COUNTRY: Country centroid
examples:
- value: "BUILDING"
description: "Rijksmuseum building"
- value: "CITY"
description: "Amsterdam centroid"
feature_class:
range: string
slot_uri: geonames:featureClass
description: |
GeoNames feature class code.
Codes:
- A: Administrative boundary
- H: Hydrographic (water features)
- L: Area (parks, areas)
- P: Populated places
- R: Roads
- S: Spots (buildings, farms)
- T: Terrain (mountains, hills)
- U: Undersea
- V: Vegetation
examples:
- value: "S"
description: "Spot/building (museum)"
- value: "P"
description: "Populated place (city)"
feature_code:
range: string
slot_uri: geonames:featureCode
description: |
GeoNames feature code (subcategory).
Common codes for heritage:
- S.LIBR: Library
- S.MUS: Museum
- S.ARCH: Archive building
- S.CH: Church
- S.THTR: Theater
- S.UNIV: University
- P.PPL: Populated place
- A.ADM1: First-order admin division (province)
examples:
- value: "S.MUS"
description: "Museum building"
valid_from_geo:
range: date
slot_uri: schema:validFrom
description: |
Date from which this geospatial data is valid.
Use for tracking boundary changes (e.g., municipal mergers).
valid_to_geo:
range: date
slot_uri: schema:validThrough
description: |
Date until which this geospatial data was valid.
Use for historical boundaries that have changed.
enums:
GeometryTypeEnum:
description: "OGC Simple Features geometry types"
permissible_values:
POINT:
description: "Single point location"
# meaning: sf:Point - OGC Simple Features Point type
LINESTRING:
description: "Line or path"
# meaning: sf:LineString - OGC Simple Features LineString type
POLYGON:
description: "Closed polygon boundary"
# meaning: sf:Polygon - OGC Simple Features Polygon type
MULTIPOINT:
description: "Multiple points"
# meaning: sf:MultiPoint - OGC Simple Features MultiPoint type
MULTILINESTRING:
description: "Multiple lines"
# meaning: sf:MultiLineString - OGC Simple Features MultiLineString type
MULTIPOLYGON:
description: "Multiple polygons (e.g., archipelago)"
# meaning: sf:MultiPolygon - OGC Simple Features MultiPolygon type
GEOMETRYCOLLECTION:
description: "Mixed geometry types"
# meaning: sf:GeometryCollection - OGC Simple Features GeometryCollection type
classes:
GeoSpatialPlace:
class_uri: geosparql:Feature
description: |
Geospatial location with coordinates, geometry, and projections.
CRITICAL DISTINCTION FROM CustodianPlace:
| Aspect | CustodianPlace | GeoSpatialPlace |
|--------|----------------|-----------------|
| Nature | Nominal reference | Geospatial data |
| Content | "het herenhuis in de Schilderswijk" | lat: 52.0705, lon: 4.2894 |
| Purpose | Identify custodian by place name | Locate custodian precisely |
| Ambiguity | May be vague ("the mansion") | Precise, measurable |
| Source | Archival documents, oral history | GPS, cadastral surveys, geocoding |
**TOOI Ontology Alignment**:
This class follows the TOOI pattern for geospatial data:
- `tooi:BestuurlijkeRuimte` is a subclass of `geosparql:Feature` and `prov:Entity`
- `tooi:BestuurlijkeRuimte-hasGeometry` → `geosparql:Geometry`
- `tooi:RegistratieveRuimte` for administrative boundaries
- `tooi:JuridischeRuimte` for legal jurisdiction boundaries
Like TOOI, we separate:
- **geosparql:Feature** (this class): The real-world place with location data
- **geosparql:Geometry**: The mathematical representation (WKT, GeoJSON)
**Use Cases**:
1. **Building-level precision**: Museum building footprint (Polygon)
2. **City-level approximation**: Heritage institution centroid (Point)
3. **Administrative boundaries**: Archive jurisdiction area (MultiPolygon)
4. **Historical boundaries**: Pre-merger municipal territory (Polygon + valid_to_geo)
**Relationship to CustodianPlace**:
CustodianPlace.has_geospatial_location → GeoSpatialPlace
A nominal place reference ("Rijksmuseum") links to its geospatial location
(lat: 52.3600, lon: 4.8852, geometry: building footprint polygon).
**Relationship to AuxiliaryPlace**:
AuxiliaryPlace.has_geospatial_location → GeoSpatialPlace
Secondary/subordinate locations (branch offices, storage depots, reading rooms)
can also link to precise geospatial coordinates. This enables:
- Mapping all custodian locations (primary + auxiliary)
- Spatial queries across an organization's entire footprint
- Building footprints for off-site storage facilities
- Historical boundary tracking for branch offices
**Relationship to OrganizationalChangeEvent**:
Organizational changes may affect geographic location:
- RELOCATION: New GeoSpatialPlace, old one gets valid_to_geo
- MERGER: Multiple locations → single primary + auxiliary locations
- SPLIT: One location → multiple successor locations
**Ontology Alignment**:
- GeoSPARQL: geosparql:Feature (primary)
- W3C Basic Geo: geo:SpatialThing
- TOOI: tooi:BestuurlijkeRuimte pattern
- Schema.org: schema:Place, schema:GeoCoordinates
- PROV-O: prov:Entity (for temporal tracking)
exact_mappings:
- geosparql:Feature
close_mappings:
- geo:SpatialThing
- schema:Place
- schema:GeoCoordinates
related_mappings:
- prov:Entity
- tooi:BestuurlijkeRuimte
- crm:E53_Place
slots:
- geospatial_id
- latitude
- longitude
- altitude
- geometry_wkt
- geometry_type
- coordinate_reference_system
- geonames_id
- osm_id
- cadastral_id
- accuracy_meters
- geospatial_source
- bounding_box
- spatial_resolution
- feature_class
- feature_code
- valid_from_geo
- valid_to_geo
slot_usage:
geospatial_id:
identifier: true
required: true
description: "Unique identifier for this geospatial place"
examples:
- value: "https://nde.nl/ontology/hc/geo/rijksmuseum-building"
- value: "https://nde.nl/ontology/hc/geo/amsterdam-centroid"
latitude:
required: true
description: "WGS84 latitude (REQUIRED for all geospatial places)"
examples:
- value: 52.3600
description: "Rijksmuseum latitude"
longitude:
required: true
description: "WGS84 longitude (REQUIRED for all geospatial places)"
examples:
- value: 4.8852
description: "Rijksmuseum longitude"
geometry_wkt:
description: |
WKT geometry for polygons and complex shapes.
Optional for point locations (lat/lon sufficient).
Required for boundary representations.
examples:
- value: "POLYGON((4.883 52.359, 4.887 52.359, 4.887 52.361, 4.883 52.361, 4.883 52.359))"
description: "Rijksmuseum building footprint (simplified)"
coordinate_reference_system:
ifabsent: "string(EPSG:4326)"
description: "Default: WGS84 (EPSG:4326)"
geonames_id:
description: |
GeoNames identifier for linking to external knowledge base.
Highly recommended for place disambiguation.
examples:
- value: 6930126
description: "Rijksmuseum GeoNames ID"
comments:
- "Follows TOOI BestuurlijkeRuimte pattern using GeoSPARQL"
- "CRITICAL: NOT a nominal reference - this is measured/surveyed location data"
- "Use CustodianPlace for nominal references, this class for coordinates"
- "lat/lon required; geometry_wkt optional for point locations"
- "Link from CustodianPlace via has_geospatial_location slot"
- "Link from AuxiliaryPlace via has_geospatial_location slot (subordinate sites)"
- "Link from OrganizationalChangeEvent via affected_territory slot"
- "valid_from_geo/valid_to_geo track boundary changes over time"
- "OSM and GeoNames IDs enable external linking"
see_also:
- "http://www.opengis.net/ont/geosparql"
- "https://www.geonames.org/"
- "https://www.openstreetmap.org/"
- "https://identifier.overheid.nl/tooi/def/ont/"
examples:
- value:
geospatial_id: "https://nde.nl/ontology/hc/geo/rijksmuseum-building"
latitude: 52.3600
longitude: 4.8852
altitude: 0.0
geometry_wkt: "POLYGON((4.8830 52.3590, 4.8870 52.3590, 4.8870 52.3610, 4.8830 52.3610, 4.8830 52.3590))"
geometry_type: "POLYGON"
coordinate_reference_system: "EPSG:4326"
geonames_id: 6930126
osm_id: "way/27083908"
accuracy_meters: 1.0
geospatial_source: "OpenStreetMap"
spatial_resolution: "BUILDING"
feature_class: "S"
feature_code: "S.MUS"
description: "Rijksmuseum building with full geospatial detail"
- value:
geospatial_id: "https://nde.nl/ontology/hc/geo/amsterdam-centroid"
latitude: 52.3676
longitude: 4.9041
geometry_type: "POINT"
coordinate_reference_system: "EPSG:4326"
geonames_id: 2759794
accuracy_meters: 500.0
geospatial_source: "GeoNames API"
spatial_resolution: "CITY"
feature_class: "P"
feature_code: "P.PPLC"
description: "Amsterdam city centroid (approximate)"
- value:
geospatial_id: "https://nde.nl/ontology/hc/geo/noord-holland-archive-territory-pre-2001"
latitude: 52.5
longitude: 4.8
geometry_wkt: "MULTIPOLYGON(((4.5 52.2, 5.2 52.2, 5.2 52.8, 4.5 52.8, 4.5 52.2)))"
geometry_type: "MULTIPOLYGON"
coordinate_reference_system: "EPSG:4326"
accuracy_meters: 1000.0
geospatial_source: "Historical cadastral records"
spatial_resolution: "REGION"
feature_class: "A"
feature_code: "A.ADM1"
valid_from_geo: "1920-01-01"
valid_to_geo: "2001-01-01"
description: "Historical archive jurisdiction boundary (pre-merger)"