glam/docs/GEOSPATIAL_PLACE_INTEGRATION.md
2025-11-29 18:05:16 +01:00

386 lines
16 KiB
Markdown

# GeoSpatial Place Integration Documentation
## Overview
This document describes the integration of geospatial capabilities into the Heritage Custodian Ontology, following the TOOI (Dutch Government Ontology) pattern for geographic data.
## Architecture
```
┌─────────────────────────────────────┐
│ OrganizationalChangeEvent │
│ (crm:E5_Event) │
└──────────────┬──────────────────────┘
┌─────────────────────────┼─────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐
│ event_location │ │ from_location │ │ affected_territory │
│ (where event │ │ to_location │ │ (jurisdictions, │
│ occurred) │ │ (RELOCATION) │ │ boundaries) │
└────────┬────────┘ └────────┬────────┘ └──────────┬──────────┘
│ │ │
▼ ▼ │
┌─────────────────────────────────────────┐ │
│ CustodianPlace │ │
│ (Nominal Reference) │ │
│ │ │
│ place_name: "Rijksmuseum" │ │
│ place_specificity: BUILDING │ │
│ place_language: "nl" │ │
│ │ │
│ has_geospatial_location ────────┼──────┐ │
│ │ │ │
│ ┌───────────────────────────────┐ │ │ │
│ │ auxiliary_places │ │ │ │
│ └───────────────┬───────────────┘ │ │ │
│ │ │ │ │
└──────────────────┼──────────────────────┘ │ │
│ │ │
▼ │ │
┌─────────────────────────────────────────┐ │ │
│ AuxiliaryPlace │ │ │
│ (org:Site) │ │ │
│ │ │ │
│ place_name: "Depot Amersfoort" │ │ │
│ auxiliary_place_type: STORAGE_FACILITY │ │ │
│ street_address: "Euterpelaan 25" │ │ │
│ │ │ │
│ has_geospatial_location ────────┼──────┤ │
│ │ │ │
└─────────────────────────────────────────┘ │ │
│ │
▼ ▼
┌─────────────────────────────┐
│ GeoSpatialPlace │
│ (geosparql:Feature) │
│ │
│ latitude: 52.3600 │
│ longitude: 4.8852 │
│ geometry_wkt: POLYGON(...) │
│ geonames_id: 6930126 │
│ osm_id: "way/27083908" │
│ │
└─────────────────────────────┘
```
## Classes
### CustodianPlace (crm:E53_Place)
**Purpose**: Nominal place reference used to identify a heritage custodian.
**Key Characteristics**:
- Emic/contextual naming ("het herenhuis in de Schilderswijk")
- May be vague ("the mansion") or specific ("Rijksmuseum")
- Captures how people refer to custodians through place
- Source: archival documents, oral history, guidebooks
**NEW Slot**: `has_geospatial_location`
- Links to GeoSpatialPlace for precise coordinates
- Multivalued (historical boundaries at different time periods)
- Optional (not all nominal references can be geolocated)
### AuxiliaryPlace (org:Site)
**Purpose**: Secondary or subordinate physical location of a heritage custodian.
**Key Characteristics**:
- Branch offices, storage facilities, research centers
- Like CustodianAppellation is to CustodianName (alternative → preferred)
- W3C Org: `org:Site` for organizational premises
- Has precise addresses unlike nominal CustodianPlace
**NEW Slot**: `has_geospatial_location`
- Links to GeoSpatialPlace for precise coordinates of subordinate sites
- Enables mapping entire organizational footprint
- Supports building footprints for storage depots
- Multivalued (temporal history of boundaries)
**Relationship to CustodianPlace**:
```
CustodianPlace (main)
└── auxiliary_places → AuxiliaryPlace[]
└── has_geospatial_location → GeoSpatialPlace
```
### GeoSpatialPlace (geosparql:Feature)
**Purpose**: Precise geospatial location with coordinates and geometry.
**Key Characteristics**:
- WGS84 coordinates (lat/lon)
- WKT geometry (Point, Polygon, MultiPolygon)
- External linking (GeoNames ID, OSM ID, Cadastral ID)
- Accuracy metadata (meters)
- Temporal validity (valid_from_geo, valid_to_geo)
**TOOI Alignment**:
- Follows `tooi:BestuurlijkeRuimte` pattern
- SubClass of `geosparql:Feature` and `prov:Entity`
- Uses `geosparql:hasGeometry` relationship
### OrganizationalChangeEvent (crm:E5_Event)
**Purpose**: Documents organizational restructuring events.
**NEW Place-Related Slots**:
| Slot | Range | Purpose |
|------|-------|---------|
| `event_location` | CustodianPlace | Where the event occurred (board meeting, ceremony) |
| `from_location` | CustodianPlace | Previous location (RELOCATION events) |
| `to_location` | CustodianPlace | New location (RELOCATION events) |
| `affected_territory` | GeoSpatialPlace | Geographic areas affected by the change |
## TOOI Ontology Pattern
The Dutch Government TOOI ontology models administrative territories as `geosparql:Feature` subclasses:
```turtle
tooi:BestuurlijkeRuimte
a owl:Class ;
rdfs:subClassOf geosparql:Feature, prov:Entity .
tooi:BestuurlijkeRuimte-hasGeometry
rdfs:subPropertyOf geosparql:hasGeometry .
```
Our implementation follows this pattern:
```yaml
GeoSpatialPlace:
class_uri: geosparql:Feature
related_mappings:
- prov:Entity
- tooi:BestuurlijkeRuimte
```
## Use Cases
### 1. Museum Building Location
```yaml
CustodianPlace:
place_name: "Rijksmuseum"
place_specificity: BUILDING
has_geospatial_location:
- geospatial_id: "https://nde.nl/ontology/hc/geo/rijksmuseum-building"
latitude: 52.3600
longitude: 4.8852
geometry_wkt: "POLYGON((4.883 52.359, 4.887 52.359, ...))"
geometry_type: POLYGON
geonames_id: 6930126
osm_id: "way/27083908"
accuracy_meters: 1.0
spatial_resolution: "BUILDING"
```
### 2. Archive Relocation Event
```yaml
OrganizationalChangeEvent:
id: "https://nde.nl/ontology/hc/event/archive-relocation-2020"
event_type: RELOCATION
event_date: "2020-06-01"
event_description: "Archive relocates to climate-controlled facility"
from_location:
place_name: "Historic City Hall Basement"
place_specificity: BUILDING
has_geospatial_location:
- latitude: 52.3700
longitude: 4.8900
to_location:
place_name: "Modern Archive Building, Amstelveen"
place_specificity: BUILDING
has_geospatial_location:
- latitude: 52.3012
longitude: 4.8631
affected_territory:
- geospatial_id: "https://nde.nl/ontology/hc/geo/old-building"
valid_to_geo: "2020-06-01"
- geospatial_id: "https://nde.nl/ontology/hc/geo/new-building"
valid_from_geo: "2020-06-01"
```
### 3. Regional Archive Merger with Territorial Impact
```yaml
OrganizationalChangeEvent:
id: "https://nde.nl/ontology/hc/event/noord-hollands-archief-merger-2001"
event_type: MERGER
event_date: "2001-01-01"
event_description: >-
Merger of Gemeentearchief Haarlem and Rijksarchief in Noord-Holland
to form Noord-Hollands Archief. Combined municipal and provincial
archival jurisdictions.
affected_territory:
- geospatial_id: "https://nde.nl/ontology/hc/geo/haarlem-municipality"
geometry_type: POLYGON
feature_class: "A"
feature_code: "A.ADM2"
valid_to_geo: "2001-01-01" # Municipal archive jurisdiction ends
- geospatial_id: "https://nde.nl/ontology/hc/geo/noord-holland-province"
geometry_type: MULTIPOLYGON
feature_class: "A"
feature_code: "A.ADM1"
valid_from_geo: "2001-01-01" # New combined jurisdiction begins
```
### 4. Vague Place Reference (No Coordinates)
```yaml
CustodianPlace:
place_name: "the old mansion"
place_specificity: VAGUE
place_note: "Mentioned in 1850 letter, exact location unknown"
# has_geospatial_location: null (cannot be geolocated)
```
### 5. Off-Site Storage Facility with Building Footprint
```yaml
AuxiliaryPlace:
auxiliary_place_id: "https://nde.nl/ontology/hc/aux-place/rijksmuseum-depot-amersfoort"
place_name: "Depot Amersfoort"
auxiliary_place_type: STORAGE_FACILITY
place_description: "Off-site storage facility for overflow collections. Climate-controlled."
street_address: "Euterpelaan 25"
postal_code: "3824 BK"
city: "Amersfoort"
country: "https://nde.nl/ontology/hc/country/NL"
valid_from: "1995-06-01"
is_auxiliary_of: "https://nde.nl/ontology/hc/place/rijksmuseum-main"
has_geospatial_location:
- geospatial_id: "https://nde.nl/ontology/hc/geo/depot-amersfoort-building"
latitude: 52.1561
longitude: 5.3878
geometry_wkt: "POLYGON((5.385 52.154, 5.390 52.154, 5.390 52.158, 5.385 52.158, 5.385 52.154))"
geometry_type: POLYGON
osm_id: "way/234567890"
accuracy_meters: 1.0
geospatial_source: "Kadaster BAG"
spatial_resolution: "BUILDING"
```
### 6. Museum with Multiple Sites (Full Example)
```yaml
CustodianPlace:
place_id: "https://nde.nl/ontology/hc/place/rijksmuseum-main"
place_name: "Rijksmuseum"
place_specificity: BUILDING
has_geospatial_location:
- geospatial_id: "https://nde.nl/ontology/hc/geo/rijksmuseum-building"
latitude: 52.3600
longitude: 4.8852
geometry_type: POLYGON
osm_id: "way/27083908"
spatial_resolution: "BUILDING"
auxiliary_places:
- place_name: "Depot Amersfoort"
auxiliary_place_type: STORAGE_FACILITY
city: "Amersfoort"
valid_from: "1995-06-01"
has_geospatial_location:
- latitude: 52.1561
longitude: 5.3878
spatial_resolution: "BUILDING"
- place_name: "Rijksmuseum Schiphol"
auxiliary_place_type: BRANCH_OFFICE
city: "Schiphol"
valid_from: "2002-10-01"
has_geospatial_location:
- latitude: 52.3086
longitude: 4.7639
accuracy_meters: 50.0
spatial_resolution: "BUILDING"
```
## Ontology Mappings
### CIDOC-CRM Alignment
| Slot | Property | Domain | Range |
|------|----------|--------|-------|
| `event_location` | crm:P7_took_place_at | E5_Event | E53_Place |
| `from_location` | crm:P27_moved_from | E9_Move | E53_Place |
| `to_location` | crm:P26_moved_to | E9_Move | E53_Place |
### GeoSPARQL Alignment
| Slot | Property | Range |
|------|----------|-------|
| `has_geospatial_location` | geosparql:hasGeometry | geosparql:Feature |
| `geometry_wkt` | geosparql:asWKT | geosparql:wktLiteral |
### WGS84 Basic Geo Alignment
| Slot | Property | Range |
|------|----------|-------|
| `latitude` | geo:lat | xsd:float |
| `longitude` | geo:long | xsd:float |
| `altitude` | geo:alt | xsd:float |
## Files Modified
| File | Changes |
|------|---------|
| `GeoSpatialPlace.yaml` | **NEW** - Geospatial location class |
| `CustodianPlace.yaml` | Added `has_geospatial_location` slot |
| `AuxiliaryPlace.yaml` | Added `has_geospatial_location` slot for subordinate sites |
| `OrganizationalChangeEvent.yaml` | Added `event_location`, `from_location`, `to_location`, `affected_territory` slots |
## Temporal Tracking
Both CustodianPlace and GeoSpatialPlace support temporal validity:
**CustodianPlace**:
- `valid_from` / `valid_to`: When this nominal reference was in use
**GeoSpatialPlace**:
- `valid_from_geo` / `valid_to_geo`: When this boundary/location was valid
This enables tracking:
1. **Name changes**: "Royal Library" → "National Library" (CustodianPlace temporal)
2. **Boundary changes**: Municipal mergers (GeoSpatialPlace temporal)
3. **Relocations**: Building moves (OrganizationalChangeEvent + from/to_location)
## External Linking
GeoSpatialPlace supports linking to external knowledge bases:
| Field | Source | Purpose |
|-------|--------|---------|
| `geonames_id` | GeoNames | Hierarchical admin data, multilingual names |
| `osm_id` | OpenStreetMap | Building footprints, street-level detail |
| `cadastral_id` | National Cadastre | Legal property boundaries |
## Spatial Resolution Levels
| Level | Description | Accuracy | Example |
|-------|-------------|----------|---------|
| BUILDING | Individual building | 1-5m | Museum building footprint |
| PARCEL | Cadastral parcel | 5-20m | Property boundary |
| STREET | Street address | 20-50m | Geocoded address |
| NEIGHBORHOOD | Neighborhood/district | 100-500m | "Schilderswijk" |
| CITY | City centroid | 500-2000m | Amsterdam |
| REGION | Province/state | 2-10km | Noord-Holland |
| COUNTRY | Country centroid | 10-100km | Netherlands |
## Validation Notes
- `latitude` must be between -90.0 and 90.0
- `longitude` must be between -180.0 and 180.0
- WKT geometry must follow OGC Simple Features format
- GeoNames IDs should resolve at `https://www.geonames.org/{id}/`
- OSM IDs should follow format `{type}/{id}` (e.g., "way/27083908")
## See Also
- [GeoSPARQL Specification](http://www.opengis.net/ont/geosparql)
- [TOOI Ontology](https://identifier.overheid.nl/tooi/def/ont/)
- [CIDOC-CRM E53_Place](http://www.cidoc-crm.org/html/cidoc_crm_v7.1.3.html#E53)
- [GeoNames API](https://www.geonames.org/)
- [OpenStreetMap](https://www.openstreetmap.org/)