The navPlace Property
About
Many UTK works that manifests describe include cartographic and coordinate information. This document details how we will
implement navPlace for our works so that IIIF viewers that support the property can display our works on a map.
@context
The navPlace property exists in a separate IIIF extension.
In order to use navPlace, we must include this extension, http://iiif.io/api/extension/navplace/context.json,
in the @context property before the http://iiif.io/api/presentation/3/context.json value.
{
"@context":[
"http://iiif.io/api/extension/navplace/context.json",
"http://iiif.io/api/presentation/3/context.json"
]
}
Notes about navPlace
The navPlace property is valid on a Collection, Manifest, Range,
or Canvas. In our implementation, navPlace is ever only found on the Manifest or in a
Range with an items property that represents a geographic location.
Unlike other properties, navPlace follows a specific pattern. The value of the property must be a JSON object
that follows the requirements for a GeoJSON Feature Collection as described in
Section 2.2.2. The value should be an embedded
Feature Collection. However, the value may be a referenced Feature Collection. Feature Collections referenced in the
navPlace property must have the id and type properties. Referenced Feature Collections must not
have the features property, such that clients are able to recognize that it should be retrieved in order to be
processed.
navPlace on the Manifest
For our manifests, if a work has a match for the XPATH query subject[@authority="geonames"]/cartographics/coordinates
on its MODS record, it will get a navPlace property on the Manifest.
For our manifests, the navPlace property always have three properties: id, type, features.
The value of the type property is FeatureCollection. The id property is unique for the
FeatureCollection and is equal to the base manifest id concatenated with the value /feature-collection/1.
{
"navPlace":
"id": "https://digital.lib.utk.edu/notdereferenceable/assemble/manifest/rfta/8/feature-collection/1",
"type": "FeatureCollection",
"features": []
}
The features property is an array. In the array are Feature bodies for each matching value of
mods:subject[@authority="geonames"]/mods:cartographics/mods:coordinates. Each Feature has the following
properties: id, type, properties, and geometry.
The type property is always Feature. To ensure uniqueness, each Feature id is equal to
the id of the id of the Manifest concatenated with /feature/1. The properties property
is described here.
For our implementation, the label property is the only thing used and it is equal to a concatenation of the Manifest
label and the related geographic location from the corresponding mods:subject[@authority="geonames]/mods:geographic.
Finally, geometry will always be a Point with the cartographics in the coordinates property in the format of “longitude, latitude”.
{
"navPlace":
{
"id": "https://digital.lib.utk.edu/notdereferenceable/assemble/manifest/rfta/8/feature-collection/1",
"type": "FeatureCollection",
"features": [
{
"id":"https://digital.lib.utk.edu/notdereferenceable/assemble/manifest/rfta/8/feature/1",
"type":"Feature",
"properties":{
"label":{
"en":[
"Interview with Seemona -- Gatlinburg"
]
}
},
"geometry":{
"type":"Point",
"coordinates":[
-83.51189,
35.71453
]
}
}
]
}
}
navPlace on a Range
If a manifest has ranges and has cartographic coordinates as described above, any Ranges that related to geographic data
are given a navPlace property similar to what appears on a manifest. The navPlace property is only added
if there is a match between its label and a subject[@authority]/geographic. The one difference is that the label
will be the value of subject[@authority]/geographic concatenated with ” discussed in ” and the title of the
manifest.
When the property is generated and added, it looks like this:
{
"type": "Range",
"id": "https:\/\/digital.lib.utk.edu\/notdereferenceable\/assemble\/manifest\/rfta\/8\/range\/places_mentioned\/1",
"label": {
"en": [
"Chalet Village"
]
},
"navPlace": {
"id": "https:\/\/digital.lib.utk.edu\/notdereferenceable\/featurecollection\/ChaletVillage\/1",
"type": "FeatureCollection",
"features": [
{
"id": "https:\/\/digital.lib.utk.edu\/notdereferenceable\/feature\/ChaletVillage\/1",
"type": "Feature",
"properties": {
"label": {
"en": [
"Chalet Village discussed in Interview with Seemona and Daniel Whaley, 2019-09-20"
]
}
},
"geometry": {
"type": "Point",
"coordinates": [
-83.5277175,
35.7232049
]
}
}
]
},
"items": [
{
"type": "Canvas",
"id": "https:\/\/digital.lib.utk.edu\/notdereferenceable\/assemble\/manifest\/rfta\/8\/canvas\/0#t=00:12:35,00:26:30"
}
]
}
navPlace Properties on Viewers
Currently, there is only one recognized viewer that supports navPlace, navPlace Viewer.
This viewer makes use of the property on the manifest and range. It also will dereference the properties from both locations
when a collection manifest is passed to it.
For this example, we will pass rfta:8 to the viewer.
A navPlace body on the manifest is added to a map with a description and links to open the manifest in Universal
Viewer and Mirador:
A navPlace body on a Range is added to the map, but only with the label. In the future, we are hoping this will
change to include a content state URI that is passed to the viewers so that the corresponding timestamp can be opened: