Cited GeoJSON

Cited GeoJSON 0.1#

Status: draft. Profile identifier: https://www.openhistorymap.org/cited-geojson/0.1

Cited GeoJSON is a profile of GeoJSON (RFC 7946) for sharing map features together with the evidence behind them: the sources a feature was drawn, transcribed or inferred from, the exact place in each source, and how scanned maps were fitted to the earth. A Cited GeoJSON file is still an ordinary GeoJSON file — QGIS, MapLibre or any other GeoJSON reader opens it and ignores what it does not understand — while profile-aware tools can show, check and exchange the citations.

It is maintained by OpenHistoryMap and is designed to be generic: the same structure serves real history (OpenHistoryMap) and invented worlds (Open Fantasy Maps).

The key words MUST, MUST NOT, SHOULD, SHOULD NOT and MAY are to be interpreted as described in RFC 2119.

1. Design#

Cited GeoJSON adds only foreign members, which RFC 7946 explicitly allows, and reuses existing standards wherever one exists:

Need Reused from
Declaring the profile conformsTo, as in OGC JSON-FG
Dates, including uncertain ones when, from the Linked Places Format (World Historical Gazetteer)
Pointing into a source (quote, page, section, image region) Selectors from the W3C Web Annotation model and ontorag-provenance
Fitting scanned maps to the earth Allmaps Georeference Annotations (IIIF georeference extension)
Linked-data reading of the file A JSON-LD 1.1 context mapping onto W3C PROV-O, Web Annotation and ontorag-provenance

The profile adds three things of its own: a per-file source list, per-feature citations, and two small vocabularies, supports (which part of a feature a citation backs) and method (how the feature was obtained from the source).

2. Feature collection#

A Cited GeoJSON document MUST be a GeoJSON FeatureCollection and MUST contain:

It SHOULD contain:

It MAY contain:

3. Sources#

A source is a published work that evidence is taken from: a book, an archival document, a scanned map, a dataset, a web page, a piece of software that generated data. The key of each entry in sources is the source's IRI. It SHOULD resolve, and it SHOULD come from a shared registry when one exists — for OpenHistoryMap that is the OHM Zotero library, whose item IRIs have the form https://www.zotero.org/groups/3757017/items/<KEY>.

A Source object:

Member Required Meaning
title MUST Title of the work.
type SHOULD One of text, map, dataset, image, webpage, software, other.
creator MAY Author(s), as a string or array of strings.
issued MAY Publication date or year (ISO 8601 / EDTF string).
publisher MAY Publisher.
identifier MAY Other identifiers (ISBN, DOI, catalogue number), as a string or array.
license SHOULD Licence IRI, e.g. https://creativecommons.org/licenses/by/4.0/.
url MAY Landing page, if different from the source IRI.
files MAY Array of File objects: the concrete files that selectors point into.
derivedFrom MAY Array of source IRIs this source was itself built from. Each MUST also appear in sources.

derivedFrom records lineage between sources — for example a modern dataset compiled from a cadastral survey and a 19th-century guidebook — without claiming that a particular feature appears in the older works. Claims about a feature are made only by its own citations.

3.1 Files#

A source can exist as several files (a PDF and its scan, several map sheets). Selectors point into a file, not into the abstract work, so page numbers and pixel coordinates are unambiguous.

Member Required Meaning
id MUST Identifier of the file, unique within the document. An IRI, or a string used as a local key.
checksum SHOULD sha256:<hex> of the file's bytes.
url MAY Where the file can be retrieved.
iiif MAY IIIF Image API info.json URL, for images; image-region selectors are then IIIF-addressable.
mediaType MAY IANA media type, e.g. application/pdf, image/tiff.
label MAY Human label, e.g. "Sheet 3".

4. Features#

Each Feature in the collection:

properties remain free-form, as in RFC 7946. Cited GeoJSON does not constrain them, but supports can refer to them by name.

4.1 Citations#

citations is an array. Each citation says: this source, at this place, is evidence for these parts of this feature, obtained by this method.

Member Required Meaning
source MUST IRI of the cited source; MUST be a key of the collection's sources.
file MAY id of the file within that source that selector points into. RECOMMENDED when the source has more than one file.
selector SHOULD Array of selectors locating the evidence. Several selectors describe the same place in different ways (a quote and its page); they are not alternatives to choose between. Omit only when the whole source is the evidence (e.g. an imported dataset).
supports MAY Array of support terms. Default: ["existence"].
method SHOULD One method term.
label SHOULD The citation formatted for a human reader, e.g. "Author, Title, vol. 2, p. 211".
id MAY IRI for the citation itself, so other documents can refer to it.
confidence MAY Number from 0 to 1: how strongly the cited evidence supports the claim.
note MAY Free-text remark (e.g. a disagreement between sources).
created, creator MAY When and by whom the citation was recorded.

Several citations on one feature are cumulative; they MAY disagree, in which case note SHOULD say how the feature resolves the disagreement.

4.2 Supports#

A support term names which part of the feature a citation is evidence for:

Term The citation supports…
existence that the feature existed (or exists) at all
geometry its shape and position
name its name(s)
when its dates
properties.<key> the value of properties.<key>, e.g. properties.status

The distinction matters: a chronicle may date a border without drawing it, and a map may draw a building without naming it.

4.3 Selectors#

Selectors are Web Annotation selectors in their JSON-LD serialisation, plus two from ontorag-provenance for paginated and structured documents:

type Members Use
TextQuoteSelector exact, optional prefix, suffix a quoted passage
TextPositionSelector start, end (character offsets) a span in a plain-text file
PageSelector pageStart, optional pageEnd, pageLabel, pageLabelEnd pages in a paginated file; pageStart is the 1-based position in the file, pageLabel the printed number a reader cites
SectionSelector headingPath (array, outermost first), optional sectionTitle a section of a structured document
FragmentSelector value, optional conformsTo a media fragment: xywh=x,y,w,h (pixel region of an image, Media Fragments), page=n (PDF, RFC 3778), or a IIIF region
SvgSelector value (SVG markup) a non-rectangular region of an image, e.g. the traced outline itself

Pixel coordinates in FragmentSelector and SvgSelector are in the full-resolution pixel space of the cited file. Together with a georeference of that file, they tie the feature's geometry back to the exact region of the scan it was traced from.

4.4 Methods#

Term The feature (or the supported part) was…
traced drawn over a georeferenced map or image, by hand or with assistance
transcribed taken from text (a description, a table, a gazetteer entry)
surveyed measured in the field
imported copied from another dataset, as is
inferred reasoned from indirect evidence (e.g. placed between two attested points)
generated produced by a model or procedural generator (the source is then the software, with its parameters)

5. Time#

when follows the Linked Places Format when object: timespans (each with start and/or end, each of which has in, or earliest and/or latest), and optional periods, label and duration. Values are ISO 8601-2 / EDTF strings, so years before the common era and uncertain dates are expressible: "-0044", "1450~", "1047/1050".

A collection-level calendar states the calendar of all when values. It is an object with label and optional id (IRI) and epoch. When absent, values are in the proleptic Gregorian calendar. Worlds with their own calendars (the in-world Reckoning of Open Fantasy Maps' Claude world, for instance) declare it here instead of pretending to be Gregorian.

6. Georeferences#

georeferences holds Georeference Annotations: Web Annotations whose target is an image (or a region of it) and whose body is a GeoJSON FeatureCollection of ground control points pairing pixel positions with geographic positions, plus the transformation used. They are the output of georeferencing tools such as Allmaps.

In Cited GeoJSON, each georeference's target MUST identify a file listed in sources (by the file's id, url or iiif). A georeference MAY additionally carry accuracy:

Member Meaning
rmse root-mean-square error of the control points after transformation
unit unit of rmse: m (metres on the ground) or px (source pixels)
method how it was estimated, e.g. residuals or leave-one-out
controlPoints number of control points used

Publishing accuracy lets readers judge how far a traced geometry can be trusted, independently of how carefully it was traced.

7. Conformance#

A document conforms to Cited GeoJSON 0.1 when:

  1. it is valid GeoJSON (RFC 7946);
  2. it validates against the JSON Schema;
  3. every citation's source is a key of sources, every file is the id of a file of that source, and every derivedFrom IRI is a key of sources (these cross-references are not expressible in JSON Schema; the reference checker verifies them);
  4. feature ids are unique within the document.

Consumers MUST ignore members they do not understand, as RFC 7946 requires.

8. Linked-data reading#

With its @context, a Cited GeoJSON document is JSON-LD 1.1. The context maps:

cg: is https://www.openhistorymap.org/cited-geojson/ns# (vocabulary). The direct reading is deliberately loose: it attaches selectors to the citation and does not type sources.

The reference converter (tools/to_orp.py) produces the strict ontorag-provenance form, which validates against its SHACL shapes:

Producers who want their citations to be full ontorag-provenance mentions should therefore record file checksums and selectors.

9. Serving#

Cited GeoJSON is a file format and a response format. Servers that also offer vector tiles SHOULD put only the feature id and the number of citations in the tiles (nested citations do not fit the vector tile model) and serve the full feature, with its citations, from a GeoJSON endpoint that clients call when a feature is selected.

10. Changes#

Examples#

Every example is checked in CI: JSON Schema, cross-references, JSON-LD expansion, checksums and quotes against the cited files, and conversion to ontorag-provenance validated with its SHACL shapes.

Torre Asinelli, Bologna

Real open data from the Comune di Bologna. Two source-level citations (the dataset it was imported from, and the documentation page that names it) and the dataset's own lineage (derivedFrom the Catasto Gregoriano and Guidicini's Cose notabili). Download bologna-torre-asinelli.geojson.

Show the document
{
  "@context": "https://www.openhistorymap.org/cited-geojson/0.1/context.jsonld",
  "type": "FeatureCollection",
  "conformsTo": [
    "https://www.openhistorymap.org/cited-geojson/0.1"
  ],
  "name": "Torre Asinelli, from Origine di Bologna",
  "description": "A real feature from the Comune di Bologna's 'Origine di Bologna' open data (towers layer), expressed as Cited GeoJSON. The source dataset carries no dates, so the feature has no `when`. The feature id is a UUIDv5 of the dataset URL and the tower's name, because the dataset has no stable identifier of its own.",
  "sources": {
    "https://opendata.comune.bologna.it/explore/dataset/origini-di-bologna-torri/": {
      "title": "Origini di Bologna - torri",
      "type": "dataset",
      "publisher": "Comune di Bologna",
      "license": "https://creativecommons.org/licenses/by/4.0/",
      "url": "https://opendata.comune.bologna.it/explore/dataset/origini-di-bologna-torri/information/",
      "derivedFrom": [
        "http://www.wikidata.org/entity/Q3663317",
        "http://www.wikidata.org/entity/Q125554931"
      ]
    },
    "http://www.originebologna.com/torri/asinella-dall-o-asinelli": {
      "title": "Asinella (dall'O, Asinelli) — Origine di Bologna",
      "type": "webpage",
      "publisher": "Origine di Bologna"
    },
    "http://www.wikidata.org/entity/Q3663317": {
      "title": "Catasto Gregoriano",
      "type": "map"
    },
    "http://www.wikidata.org/entity/Q125554931": {
      "title": "Cose notabili della città di Bologna, ossia Storia cronologica de' suoi stabili sacri, pubblici e privati",
      "type": "text",
      "creator": "Giuseppe Guidicini",
      "url": "https://archive.org/details/cosenotabilidell00guid"
    }
  },
  "features": [
    {
      "type": "Feature",
      "id": "91327a33-4fd8-5d07-8875-6cb42e3bfb7c",
      "@id": "https://www.openhistorymap.org/id/origini-di-bologna/torri/91327a33-4fd8-5d07-8875-6cb42e3bfb7c",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              11.346691,
              44.494152
            ],
            [
              11.346793,
              44.494133
            ],
            [
              11.346825,
              44.494198
            ],
            [
              11.346726,
              44.494221
            ],
            [
              11.346691,
              44.494152
            ]
          ]
        ]
      },
      "properties": {
        "name": "Torre Asinelli",
        "etichetta": "Torre",
        "stato": "Esistente",
        "numeromoderno": "2"
      },
      "citations": [
        {
          "source": "https://opendata.comune.bologna.it/explore/dataset/origini-di-bologna-torri/",
          "method": "imported",
          "supports": [
            "existence",
            "geometry",
            "name",
            "properties.stato",
            "properties.numeromoderno"
          ],
          "label": "Comune di Bologna, Origini di Bologna – torri (open data, CC BY 4.0)"
        },
        {
          "source": "http://www.originebologna.com/torri/asinella-dall-o-asinelli",
          "method": "transcribed",
          "supports": [
            "name"
          ],
          "label": "Origine di Bologna, “Asinella (dall'O, Asinelli)”"
        }
      ]
    }
  ]
}

Wengnga, an invented realm

A realm of the Open Fantasy Maps world Claude: generated geometry cited to the generator's output, a date in the world's own calendar, and a quoted passage of the world guide, located by quote and section in a checksummed file. Download claude-wengnga.geojson.

Show the document
{
  "@context": "https://www.openhistorymap.org/cited-geojson/0.1/context.jsonld",
  "type": "FeatureCollection",
  "conformsTo": [
    "https://www.openhistorymap.org/cited-geojson/0.1"
  ],
  "name": "Wengnga, from the Open Fantasy Maps world Claude",
  "description": "An invented world's realm, expressed as Cited GeoJSON. The geometry is the realm's largest polygon, simplified (tolerance 1.2°) from the generated `politics` layer. Dates use the world's own calendar. The quote was checked against the cited file, whose checksum is recorded.",
  "calendar": {
    "label": "Years of the Reckoning (R.)",
    "epoch": "Year 1 of the Reckoning, in the world Claude"
  },
  "sources": {
    "https://fantasymaps.org/id/claude/source/worldgen": {
      "title": "Claude world generator (seed 20260923)",
      "type": "software",
      "creator": "Open Fantasy Maps",
      "identifier": "seed 20260923",
      "files": [
        {
          "id": "politics",
          "url": "https://staticfiles.fantasymaps.org/claude/raw/geojson/politics.geojson",
          "checksum": "sha256:1920032ac9bff8117e5b818fb3c05acc1aaae731cfa8988d88fc5309fc304443",
          "mediaType": "application/geo+json",
          "label": "Generated politics layer"
        }
      ]
    },
    "https://fantasymaps.org/id/claude/source/world-guide": {
      "title": "Claude — World Guide",
      "type": "text",
      "creator": "Open Fantasy Maps",
      "files": [
        {
          "id": "world-md",
          "url": "https://staticfiles.fantasymaps.org/claude/WORLD.md",
          "checksum": "sha256:142790145396472c107932cb088795b62ff52906925d4adeb62bef6d18732903",
          "mediaType": "text/markdown"
        }
      ]
    }
  },
  "features": [
    {
      "type": "Feature",
      "id": "c530d10e-5455-521f-ad85-921f7a9a2873",
      "@id": "https://fantasymaps.org/id/claude/politics/c530d10e-5455-521f-ad85-921f7a9a2873",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              -31.88,
              27.53
            ],
            [
              -34.92,
              19.66
            ],
            [
              -37.35,
              20.52
            ],
            [
              -37.58,
              24.49
            ],
            [
              -42.41,
              18.77
            ],
            [
              -43.27,
              20.12
            ],
            [
              -47.0,
              19.16
            ],
            [
              -54.78,
              10.77
            ],
            [
              -62.46,
              11.65
            ],
            [
              -68.8,
              16.0
            ],
            [
              -72.75,
              10.95
            ],
            [
              -62.66,
              -9.23
            ],
            [
              -56.22,
              -4.77
            ],
            [
              -46.25,
              -6.66
            ],
            [
              -44.0,
              -1.83
            ],
            [
              -46.12,
              2.16
            ],
            [
              -45.55,
              1.97
            ],
            [
              -43.02,
              -2.8
            ],
            [
              -41.76,
              -7.95
            ],
            [
              -44.27,
              -15.61
            ],
            [
              -50.25,
              -24.66
            ],
            [
              -46.8,
              -27.3
            ],
            [
              -45.97,
              -30.45
            ],
            [
              -35.38,
              -33.73
            ],
            [
              -31.5,
              -32.56
            ],
            [
              -34.23,
              -27.97
            ],
            [
              -32.75,
              -21.88
            ],
            [
              -35.23,
              -13.36
            ],
            [
              -34.25,
              -11.67
            ],
            [
              -45.75,
              3.91
            ],
            [
              -42.19,
              7.35
            ],
            [
              -26.05,
              9.53
            ],
            [
              -30.25,
              10.94
            ],
            [
              -26.77,
              23.08
            ],
            [
              -31.88,
              27.53
            ]
          ]
        ]
      },
      "properties": {
        "name": "Wengnga",
        "class": "political",
        "subclass": "city league",
        "culture": "ilunga"
      },
      "when": {
        "timespans": [
          {
            "start": {
              "in": "1078"
            }
          }
        ],
        "label": "from 1078 R."
      },
      "citations": [
        {
          "source": "https://fantasymaps.org/id/claude/source/worldgen",
          "file": "politics",
          "method": "generated",
          "supports": [
            "existence",
            "geometry",
            "properties.subclass",
            "properties.culture"
          ],
          "label": "Claude world generator, seed 20260923, politics layer"
        },
        {
          "source": "https://fantasymaps.org/id/claude/source/world-guide",
          "file": "world-md",
          "method": "transcribed",
          "supports": [
            "name",
            "when"
          ],
          "selector": [
            {
              "type": "TextQuoteSelector",
              "exact": "The old imperial cities, led by Ngendani, re-form as the **Wengnga City League**, the Imperium's rump and still the largest realm on the map"
            },
            {
              "type": "SectionSelector",
              "headingPath": [
                "Claude — World Guide",
                "History"
              ],
              "sectionTitle": "History"
            }
          ],
          "label": "Claude — World Guide, History › 1078",
          "note": "The guide and the generated layers were produced together; the guide is the world's canonical text."
        }
      ]
    }
  ]
}

A lake traced from a georeferenced image

Tracing provenance: the feature cites the pixel region of the image it was traced from, and the collection carries the image's georeference (25 control points, second-order polynomial) with its computed accuracy. Download traced-from-image.geojson.

Show the document
{
  "@context": "https://www.openhistorymap.org/cited-geojson/0.1/context.jsonld",
  "type": "FeatureCollection",
  "conformsTo": [
    "https://www.openhistorymap.org/cited-geojson/0.1"
  ],
  "name": "A lake traced from a georeferenced image",
  "description": "Demonstrates tracing provenance: a feature cites the pixel region of the image it was traced from, and the collection carries the image's georeference with its accuracy. The 'scan' here is a real rendered overview of the Claude world (an equirectangular image, so its georeference is known exactly); the lake outline was taken from the generated layer, so this file illustrates the structure rather than a manual tracing. Control points and the RMSE were computed, not estimated: a second-order polynomial from pixels to Web Mercator over this region leaves the stated residual (a first-order, affine fit would leave about 42 km, because it cannot follow the equirectangular-to-Mercator stretch).",
  "sources": {
    "https://fantasymaps.org/id/claude/source/overview-render": {
      "title": "Claude world overview render",
      "type": "image",
      "creator": "Open Fantasy Maps",
      "files": [
        {
          "id": "render",
          "url": "https://staticfiles.fantasymaps.org/claude/raw/geojson/render.png",
          "checksum": "sha256:5c87f07ddd4f87a1cb5184173f53615aa722892bf0588791057079aa3c2beba4",
          "mediaType": "image/png",
          "label": "2400 × 1733 px, equirectangular, lon -90.0…90.0, lat -60.0…70.0"
        }
      ]
    },
    "https://fantasymaps.org/id/claude/source/world-guide": {
      "title": "Claude — World Guide",
      "type": "text",
      "creator": "Open Fantasy Maps",
      "files": [
        {
          "id": "world-md",
          "url": "https://staticfiles.fantasymaps.org/claude/WORLD.md",
          "checksum": "sha256:142790145396472c107932cb088795b62ff52906925d4adeb62bef6d18732903",
          "mediaType": "text/markdown"
        }
      ]
    }
  },
  "georeferences": [
    {
      "id": "https://fantasymaps.org/id/claude/georef/overview-render",
      "type": "Annotation",
      "@context": "http://iiif.io/api/extension/georef/1/context.json",
      "motivation": "georeferencing",
      "target": {
        "type": "SpecificResource",
        "source": {
          "id": "https://staticfiles.fantasymaps.org/claude/raw/geojson/render.png",
          "type": "Image",
          "width": 2400,
          "height": 1733
        }
      },
      "body": {
        "type": "FeatureCollection",
        "transformation": {
          "type": "polynomial",
          "options": {
            "order": 2
          }
        },
        "features": [
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1440.0,
                199.96
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                18.0,
                55.0
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1506.67,
                199.96
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                23.0,
                55.0
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1573.33,
                199.96
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                28.0,
                55.0
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1640.0,
                199.96
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                33.0,
                55.0
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1706.67,
                199.96
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                38.0,
                55.0
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1440.0,
                254.95
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                18.0,
                50.875
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1506.67,
                254.95
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                23.0,
                50.875
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1573.33,
                254.95
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                28.0,
                50.875
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1640.0,
                254.95
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                33.0,
                50.875
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1706.67,
                254.95
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                38.0,
                50.875
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1440.0,
                309.94
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                18.0,
                46.75
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1506.67,
                309.94
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                23.0,
                46.75
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1573.33,
                309.94
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                28.0,
                46.75
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1640.0,
                309.94
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                33.0,
                46.75
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1706.67,
                309.94
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                38.0,
                46.75
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1440.0,
                364.93
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                18.0,
                42.625
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1506.67,
                364.93
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                23.0,
                42.625
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1573.33,
                364.93
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                28.0,
                42.625
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1640.0,
                364.93
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                33.0,
                42.625
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1706.67,
                364.93
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                38.0,
                42.625
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1440.0,
                419.92
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                18.0,
                38.5
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1506.67,
                419.92
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                23.0,
                38.5
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1573.33,
                419.92
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                28.0,
                38.5
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1640.0,
                419.92
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                33.0,
                38.5
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "resourceCoords": [
                1706.67,
                419.92
              ]
            },
            "geometry": {
              "type": "Point",
              "coordinates": [
                38.0,
                38.5
              ]
            }
          }
        ]
      },
      "accuracy": {
        "rmse": 3295.6,
        "unit": "m",
        "method": "residuals",
        "controlPoints": 25
      }
    }
  ],
  "features": [
    {
      "type": "Feature",
      "id": "711e96cd-06ed-560c-a2b4-46f5a55b150a",
      "@id": "https://fantasymaps.org/id/claude/internal_waters/711e96cd-06ed-560c-a2b4-46f5a55b150a",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              23.0,
              54.453
            ],
            [
              22.273,
              53.695
            ],
            [
              21.703,
              51.125
            ],
            [
              20.32,
              50.477
            ],
            [
              19.727,
              49.383
            ],
            [
              18.383,
              48.602
            ],
            [
              18.383,
              47.523
            ],
            [
              19.984,
              46.523
            ],
            [
              21.516,
              46.523
            ],
            [
              22.719,
              46.977
            ],
            [
              24.547,
              45.383
            ],
            [
              27.375,
              45.75
            ],
            [
              28.281,
              45.25
            ],
            [
              29.898,
              47.867
            ],
            [
              31.0,
              47.953
            ],
            [
              31.75,
              47.172
            ],
            [
              30.898,
              46.867
            ],
            [
              30.047,
              45.5
            ],
            [
              30.203,
              43.547
            ],
            [
              28.547,
              42.195
            ],
            [
              29.023,
              40.648
            ],
            [
              30.43,
              40.023
            ],
            [
              34.43,
              39.477
            ],
            [
              35.422,
              39.0
            ],
            [
              36.953,
              39.547
            ],
            [
              37.242,
              41.578
            ],
            [
              36.523,
              43.461
            ],
            [
              36.703,
              45.75
            ],
            [
              36.188,
              46.227
            ],
            [
              34.133,
              46.008
            ],
            [
              32.75,
              46.422
            ],
            [
              34.875,
              46.547
            ],
            [
              35.953,
              47.875
            ],
            [
              35.977,
              49.398
            ],
            [
              34.977,
              52.18
            ],
            [
              32.164,
              52.773
            ],
            [
              30.5,
              54.203
            ],
            [
              28.75,
              54.203
            ],
            [
              28.273,
              53.648
            ],
            [
              28.453,
              50.875
            ],
            [
              27.422,
              50.523
            ],
            [
              25.023,
              51.898
            ],
            [
              24.422,
              54.367
            ],
            [
              23.0,
              54.453
            ]
          ]
        ]
      },
      "properties": {
        "name": "Lake Houyang",
        "class": "lake",
        "subclass": "salt"
      },
      "citations": [
        {
          "source": "https://fantasymaps.org/id/claude/source/overview-render",
          "file": "render",
          "method": "traced",
          "supports": [
            "geometry"
          ],
          "selector": [
            {
              "type": "FragmentSelector",
              "value": "xywh=1445,207,252,207",
              "conformsTo": "http://www.w3.org/TR/media-frags/"
            }
          ],
          "label": "Claude world overview render, region 1445,207,252,207"
        },
        {
          "source": "https://fantasymaps.org/id/claude/source/world-guide",
          "file": "world-md",
          "method": "transcribed",
          "supports": [
            "name",
            "properties.subclass"
          ],
          "selector": [
            {
              "type": "TextQuoteSelector",
              "exact": "a 1.2-million-km² salt\ninland sea",
              "prefix": "**Lake Houyang**, "
            },
            {
              "type": "SectionSelector",
              "headingPath": [
                "Claude — World Guide",
                "Geography"
              ],
              "sectionTitle": "Geography"
            }
          ],
          "label": "Claude — World Guide, Geography › Deserts"
        }
      ]
    }
  ]
}

Artefacts#

Profile
https://www.openhistorymap.org/cited-geojson/0.1
JSON Schema
schema.json
JSON-LD context
context.jsonld
Vocabulary
cg: terms (Turtle)
Tools
check.py, to_orp.py