Skip to content

Georeferences

Georeferences are the map placements that our community has contributed. There are two types:

  • Point georeferences — the location of the "camera".
  • From-above georeferences — a polygon outlining the area covered by an image taken from high up, such as from an airplane.

Both endpoints return GeoJSON FeatureCollections.

Tip

These endpoints only return the most recent georeference per image. If an image has been georeferenced multiple times, only the latest placement is included. To see all georeferences for a specific image, use the image detail endpoint.

Point georeferences

GET /api/v2/georeferences/

Returns the most recent point georeference per image as a GeoJSON FeatureCollection. Each feature is a user-submitted point representing the location of the "camera".

Example request

curl "https://yesterdays.maprva.org/api/v2/georeferences/"
import requests

response = requests.get("https://yesterdays.maprva.org/api/v2/georeferences/")
data = response.json()
library(httr2)

resp <- request("https://yesterdays.maprva.org/api/v2/georeferences/") |>
  req_perform()
data <- resp_body_json(resp)

Example response

{
    "type": "FeatureCollection",
    "count": 8969,
    "next": "https://yesterdays.maprva.org/api/v2/georeferences/?page=2",
    "previous": null,
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [-77.409651, 37.536789]
            },
            "properties": {
                "id": 5701,
                "image_id": 5934,
                "image_title": "N. 28th and Q Streets",
                "image_thumbnail": "https://cdn.maprva.org/7416452b52d0f9fdbe1c_thumb",
                "direction": 136.0,
                "confidence": "medium",
                "georeferenced_by": "mhpob",
                "georeferenced_at": "2025-12-16T12:55:01Z",
                "validation_count": 0
            }
        }
    ]
}

Pagination works the same as the rest of the API (page and page_size query parameters), but the count, next, and previous fields are included directly inside the GeoJSON FeatureCollection rather than wrapping it.

Point georeference fields

Field Type Description
id integer Unique identifier for this georeference
image_id integer ID of the georeferenced image
image_title string Title of the image
image_thumbnail string URL to the image thumbnail
direction number Compass direction the "camera" was facing (degrees, 0 = north)
confidence string "low", "medium", or "high"
georeferenced_by string OpenStreetMap username of the contributor
georeferenced_at string ISO 8601 timestamp
validation_count integer Number of community validations

From-above georeferences

GET /api/v2/from-above-georeferences/

Returns the most recent polygon georeference per image for bird's-eye and from-above images as a GeoJSON FeatureCollection. Each feature's geometry is a polygon outlining the area covered by the image.

Example request

curl "https://yesterdays.maprva.org/api/v2/from-above-georeferences/"
import requests

response = requests.get("https://yesterdays.maprva.org/api/v2/from-above-georeferences/")
data = response.json()
library(httr2)

resp <- request("https://yesterdays.maprva.org/api/v2/from-above-georeferences/") |>
  req_perform()
data <- resp_body_json(resp)

Example response

{
    "type": "FeatureCollection",
    "count": 93,
    "next": null,
    "previous": null,
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Polygon",
                "coordinates": [[
                    [-77.424245114, 37.539632546],
                    [-77.427029848, 37.53543474],
                    [-77.435582592, 37.537152634],
                    [-77.430173107, 37.544017523],
                    [-77.424245114, 37.539632546]
                ]]
            },
            "properties": {
                "id": 123,
                "image_id": 35157,
                "image_title": "Aerial View of Downtown Richmond",
                "image_thumbnail": "https://cdn.maprva.org/51cb74d460edec3c3d98_thumb",
                "confidence": "high",
                "georeferenced_by": "John Pole",
                "georeferenced_at": "2026-02-20T04:41:09Z",
                "validation_count": 0
            }
        }
    ]
}

From-above georeference fields

Field Type Description
id integer Unique identifier
image_id integer ID of the georeferenced image
image_title string Title of the image
image_thumbnail string URL to the image thumbnail
confidence string "low", "medium", or "high"
georeferenced_by string OpenStreetMap username of the contributor
georeferenced_at string ISO 8601 timestamp
validation_count integer Number of community validations

Tip

The confidence_notes field is available on georeference objects within the image detail response, but is omitted from these GeoJSON endpoints to keep responses lightweight.

Bounding box filtering

Both georeference endpoints support spatial filtering with the in_bbox parameter. This lets you fetch only the georeferences within a geographic area — perfect for map-based applications.

The format is in_bbox=west,south,east,north (minimum longitude, minimum latitude, maximum longitude, maximum latitude):

# Georeferences in downtown Richmond
curl "https://yesterdays.maprva.org/api/v2/georeferences/?in_bbox=-77.45,37.53,-77.43,37.55"
import requests

# Georeferences in downtown Richmond
response = requests.get("https://yesterdays.maprva.org/api/v2/georeferences/", params={
    "in_bbox": "-77.45,37.53,-77.43,37.55",
})
data = response.json()
library(httr2)

# Georeferences in downtown Richmond
resp <- request("https://yesterdays.maprva.org/api/v2/georeferences/") |>
  req_url_query(in_bbox = "-77.45,37.53,-77.43,37.55") |>
  req_perform()
data <- resp_body_json(resp)

Other filters

Both endpoints support these filters:

Parameter Type Description
image integer Filter by image ID
source integer Filter by source ID
collection integer Filter by collection ID
subject integer Filter by subject ID
confidence string Filter by confidence level: low, medium, or high
georeferenced_by integer Filter by the contributor's OpenStreetMap user ID. You can use the users endpoint to look this up.
year_min number Include georeferences whose image's date range overlaps with or follows this year
year_max number Include georeferences whose image's date range overlaps with or precedes this year

The point georeferences endpoint also supports:

Parameter Type Description
from_above boolean true for from-above images, false for standard images. Useful because from-above images can have both point and polygon georeferences, so from_above=false lets you exclude them from point results.

Example: combining filters

Find all high-confidence georeferences from the Library of Virginia:

curl "https://yesterdays.maprva.org/api/v2/georeferences/?source=1&confidence=high"
import requests

response = requests.get("https://yesterdays.maprva.org/api/v2/georeferences/", params={
    "source": 1,
    "confidence": "high",
})
data = response.json()
library(httr2)

resp <- request("https://yesterdays.maprva.org/api/v2/georeferences/") |>
  req_url_query(source = 1, confidence = "high") |>
  req_perform()
data <- resp_body_json(resp)

Ordering

Parameter Description
georeferenced_at Sort by when the georeference was submitted
confidence Sort by confidence level
validation_count Sort by number of community validations

Prefix with - to sort descending. Default ordering is -georeferenced_at (most recently georeferenced first).