Geo-Anchored AR Content

There is currently the ability to attach media objects to a land parcel and form a gallery. These objects, however, are basically attached as a big bucket onto a parcel. There is no concept of where within the parcel the content can be anchored.

This is especially important for 3D models and other content that can be displayed in AR. The ability to anchor content to specific coordinates within a parcel would be very valuable to the Geo Web.

Here are two approaches I have thought of for how this could be accomplished.

MediaObject → coordinates

The first approach would build on the existing media gallery and add a link from a MediaObject to some coordinates.

Looking at schema.org, the best candidate I see is the spatial property on a MediaObject. The schema looks something like this:

{
  "title": "MediaObject",
  "properties": {
    "spatial": {
      "$ref": "#/definitions/PlaceStreamId"
    }
  } 
}
{
  "title": "Place",
  "properties": {
    "geo": {
      "description": "The geo coordinates of the place.",
      "anyOf": [
        { "$ref": "#/definitions/GeoCoordinatesStreamId" },
        { "$ref": "#/definitions/GeoShapeStreamId" }
      ]
    }
  }
}
{
  "title": "GeoCoordinates",
  "properties": {
    "elevation": {
      "anyOf": [{ "type": "number" }, { "type": "string" }]
    },
    "latitude": {
      "anyOf": [{ "type": "number" }, { "type": "string" }]
    },
    "longitude": {
      "anyOf": [{ "type": "number" }, { "type": "string" }]
    }
  }
}

So the MediaObject links to a Place which links to a GeoCoordinates. This would be three separate streams.

Pros

  • No new schemas or definitions

Cons

  • Two additional links needed per object
  • Must iterate through entire MediaGallery to see what is anchored

GeoCoordinates + MediaObject

Another approach is to have a new definition separate from the MediaGallery. Call it AnchoredMediaObjects. This would be an array of pairs of coordinates and objects:

{
  "title": "AnchoredMediaObjects",
  "properties": {
    "anchors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "coordinates": { "$ref": "#/definitions/GeoCoordinatesStreamId" },
          "mediaObject": { "$ref": "#/definitions/MediaObjectStreamId" }
        }
      }
    }
  } 
}

Pros

  • No iteration through MediaGallery
  • Only one extra stream per anchor

Cons

  • New definition + schema
  • No link from MediaGallery

Both?

Both approaches could also be used to create a bidirectional link.

@codynhat I think there could be a generic type for all types of media content.
This way, resolving on the frontend is straightforward.

Opensea established a metadata standard, which they use to render stuff below the image itself.

Would it be possible to mimic the same?

MediaObject should be generic enough to support a lot of media types. Should there be something more generic?

GPS coordinates in either approach are linked to the MediaObject and not any particular type of media.

Yes…This is good enough.
Can always have nested attributes here only.