In general terms, a "point of interest" is a location about which information is available. A POI can be as simple as a set of coordinates and an identifier, or more complex such as a three dimensional model of a building with names in various languages, information about open and closed hours, and a civic address. POI data has many uses including augmented reality browsers, location-based social networking games, geocaching, mapping, and navigation systems.
POI data has traditionally been exchanged in proprietary formats via various transports. This specification defines a flexible, lightweight, extensible POI data model, and one normative syntax for the data model. This will enable content publishers to effectively describe and efficiently serve and exchange POI data. In addition to the data model and format, this specification includes best practices for how to organize and serve POIs on the Web.
To achieve these goals, this document describes a generic data model and one normative format. This format is based on XML and is likely insufficient to cover all POI use cases, therefore, it is expected that the data model will be mapped to other formats, such as JSON, GML, RDF, GeoRSS, or HTML.
The term points of interest is used in a broad sense in this specification to refer to a loosely coupled and inter-related set of terms: locations, POIs and places.
This section is primarily based on the wiki home page definition of POI.
OGC has suggested the following changes to the definition of location:
FYI, Point of Interest is defined in the OGC Open Location Services standard as:
A location (with a fixed position) where one can find a place, product or service, typically identified by name rather than by address and characterized by type, which may be used as a reference point or a target in a location based service request, e.g., as the destination of a route.
The definition for “Location” should be harmonized with ISO standards terms and definitions. Also, a specified coordinate reference system (WGS 84) should not be mentioned in a definition. The specification and handling of CRS should be later in the document. So, the definition of Location becomes:
Location: Identifiable geographic place [[ISO19112]]. Typically a location is a physically fixed point, typically on the surface of the Earth, though locations can be relative to other, non-earth centric coordinate reference systems. Locations can be a single point, a centroid, a minimum bounding rectangle, or a set of vectors. A location should be persistent over time and does not change.
The following primitives can be combined to represent a POI.
Geo-references are used a lot and were difficult to introduce just in the middle of the location primitive, so it got a promotion, even though it only appears in the location primitive.
A geo-reference is a reference to a location. A geo-reference can represent location in a variety of ways, such as the geospatial coordinates for the center of the POI, a civic address, an area (simple bounding box, or a polygon, or a 3d object), relative to a particular map or other geo-reference or undetermined. Geo-references are used in the location primitive.
A geo-reference is of one of the following types:
The Center geo-reference locates the center point of the POI. This type is largely used for display purposes.
Name | Required | Details |
---|---|---|
Coordinates | required | |
System | optional | If not specified WGS 84 is assumed |
Longitude | required | |
Latitude | required | |
Altitude | optional | Defines the height in meters above or below sea level |
OGC has recommended the term geolocation instead of georeference:
Georeference – While geo-reference is a valid term, geo-reference typically indicates that a geometry or an image has coordinate reference system metadata. The suggested term is geolocation as this term is used extensively in other standards work, including the work of the W3C.
A Navigation Point geo-reference is to a point that is the logical destination for routing. For example, this may be a reference to the entrance of parking lot POI.
Name | Required | Details |
---|---|---|
Coordinates | required |
Note:Support for addresses in the XML syntax has been dropped for the FPWD, but reminds here in the data model.
An Address geo-reference is a civic address, such as a mailing address or a street address.
Name | Required | Details |
---|---|---|
Country | required | ISO country code (ISO 3166-1 alpha-3 country code) |
Language | required | xml:lang Language Code |
Street | optional | Can contain a variable mix of house number prefix, suffix, street base name and or street type |
Floor | optional | +/- number |
Suite | optional | |
Region | optional | Repeating: can contain a variable mix of administrative regions, neighborhood, city, state, etc. |
Postal-code | optional |
This is our first reference to language tags, should we use ISO 3166-1 or BCP 47/IETF RFC 5646? It's been suggested to use xmllang, but do we need to specify this in the data model? Probably, as we do want interchangeability between formats.
This section needs reworking. Within the XML syntax there's a notion of a list of points, as well as a point type that is reused. In the Wiki draft Routes and Areas both have point lists, we should extract the point list concept out so it can be shared.
Optional. Represents routes and traces.
An Area geo-reference represents a line-bounded area. The area is described by an ordered list of coordinates, where the first and last are the same.
I changed this one a bit, instead of introducing Points, I just made it have Coordinates, and mention that it is an ordered list of them where the first and last are the same. I figure the ordering can occur however such things happen in desired syntax (XML could be as they appear in document order or with an 'order' attribute, JSON may represent it as an array,etc)
Name | Required | Details |
---|---|---|
Coordinates | required | An ordered list of Coordinates, minimum of three, first and last must be the same. |
The following paragraphs are adapted from Christine Perey's email. Parts of this are related to collections of POIs/objects and is thus also related to ISSUE-28. This section needs serious attention.
The Object primitive provides a rich and flexible description of an object, which decouples the description of an object from where it is located.
An Object MAY have one location at a (temporary-duration undefined) specific point in time but does not have one fixed point over time.
An Object of Interest can be a parent to other Objects each with its own description to allow for the representation of complex objects that are the aggregate of a collection of Objects (a car, boat, or airplane).
It should not be inferred that each of the elements within the object primitive are not spatially synonymous, but do refer to the same object.
Represents a 3D object, building, etc.
Name | Required | Details |
---|
An Undetermined geo-reference represents a location that as of yet is undetermined. This can be used to describe a Place prior to the final location being resolved.
There are no members for an Undetermined geo-reference.
I made relative a member of geo-reference rather than a sub-member of the map geo-reference, as it seems useful outside of the map scope
A Relative geo-reference is described in terms of distance from and bearing to another location.
Name | Required | Details |
---|---|---|
Relative-Location-Object | required | ID or location object (ID) this relative reference refers to |
Distance-From | required | |
Bearing-To | required | |
Relative height | optional |
Map georeference type has been dropped from the FPWD until it is better understood.
The location primitive provides a rich and flexible description of the location of a POI. A location is a required part of a POI.
Name | Required | Details |
---|---|---|
Identifier | required | A unique identifier for this location. |
Geo-reference | required | A reference to the actual location |
I didn't follow the definition of a location identifier, so details were removed
The relationship primitive establishes 1-to-1 or 1-to-many relationships between POIs.
A relationship may be one of the following:
Need more relationship types
Should the details of the various relationship types themselves be in this section? Assuming yes for now
todo
todo
todo
Dropped per our discussion at f2f
POIs may have zero or more label primitives which represent a human readable label.
At F2F2 we decided to rename the name primitive to "label", and to allow labels to be marked as primary for each language represented.
POI must have an "id" primitive. It unambiguously identifies a POI within a particular implementation.
At F2F2 we discussed using URI fragments as IDs, as in XML. Using XML Base we could build a full URI that could then be used to identify the entire POI.
POI MAY have a "categorization" primitive, with one or more category identifiers.
Todo
Todo. We haven't decided how this would work, and why this wouldn't just be covered by our extensibility story. Please see: ISSUE-18.
POI MAY have one or more time primitives that represent an individual point in time, a span of time, or a recurring time or time span.
Even more so than the rest of this document, this section is a straw man proposal, so please treat it as such!
This section describes an XML syntax to represent the data model.
The following data types are from XML Schema, Part 2: Datatypes [XMLSCHEMA11-2]. The meanings are provided here as a convenience, for more complete information refer to the XML Schema, Part 2: Datatypes Recommendation.
Notation | Meaning |
---|---|
boolean | has the ·value space· required to support the mathematical concept of binary-valued logic: {true, false} |
decimal | a subset of the real numbers, which can be represented by decimal numerals |
float | patterned after the IEEE single-precision 32-bit floating point type [IEEE 754-1985]. |
double | atterned after the IEEE double-precision 64-bit floating point type [IEEE 754-1985]. |
duration | represents a duration of time. |
dateTime | may be viewed as objects with integer-valued year, month, day, hour and minute properties, a decimal-valued second property, and a boolean timezoned property. Each such object also has one decimal-valued method or computed property, timeOnTimeline, whose value is always a decimal number; the values are dimensioned in seconds, the integer 0 is 0001-01-01T00:00:00 and the value of timeOnTimeline for other dateTime values is computed using the Gregorian algorithm as modified for leap-seconds |
time | represents an instant of time that recurs every day |
date | consists of top-open intervals of exactly one day in length on the timelines of dateTime, beginning on the beginning moment of each day (in each timezone), i.e. '00:00:00', up to but not including '24:00:00' (which is identical with '00:00:00' of the next day) |
gYearMonth | represents a specific gregorian month in a specific gregorian year. |
gYear | represents a gregorian calendar year |
gMonthDay | a gregorian date that recurs, specifically a day of the year such as the third of May |
gDay | a gregorian day that recurs, specifically a day of the month such as the 5th of the month |
gMonth | gregorian month that recurs every year |
anyURI | represents a Uniform Resource Identifier Reference (URI). An anyURI value can be absolute or relative, and may have an optional fragment identifie |
We need to figure out: xml id/xml:base, xml:lang, units of measurement
<pois>
element
The root element for an POI in XML syntax is the pois
element. The <pois>
element MUST contain one or more <poi>
elements.
The <pois>
element has TBD attributes.
We may not allow for collections of POIs, in which case there will be no pois element.
The pois element could have attributes such as xml:lang and an id, but is there a case for more? What's the right way to represent text-wise that lang and id's can be on all elements?
<poi>
elementThe <poi>
element encompasses all information about a single POI. The <poi>
element MUST contain one or more <location>
elements, and MAY contain one or more <label>
and <category>
elements.
see above note in the <pois>
element about lang and id
Many of the elements described below rely on a coordinates as attributes. In the interest of not repeating the definition, the following attributes are inferred whenever the coordinate attributes
are referenced below.
Name | Required | Type | Default value | Details |
---|---|---|---|---|
srsname | optional | anyURI | urn:ogc:def:crs:EPSG:6.6:4326 | A URN as defined in OGC Definition identifier URNs in OGC namespace [OGC-07-092r1] of the geodetic system to which the latitude and longitude and altitude are relative |
longitude | required | number | None | |
latitude | required | number | None | |
altitude | optional | number | ?? sea level relative to system? |
Is there an official geode tagging scheme, e.g. "wgs84", or "etrs89"? Apparently yes: http://portal.opengeospatial.org/files/?artifact_id=24045
Now tracked as issue: ISSUE-21.
How does this effect the altitude attribute?
<point>
elementThe <point>
element is used in many different geo-reference types below. It represents a single set of coordinates, and can be ordered relative to other <point>
elements within the parent element via the order
attribute.
The <point>
element has no character data.
The <point>
element uses the coordinate attributes
, and an order
attribute.
Name | Required | Type | Default value | Details |
---|---|---|---|---|
order | optional | unsigned-number | None | Applies only when a list of points is needed. Within the parent element containing the point list, there must be one <point> with the order attribute set to '0', other <point> element's order attribute MUST be unique and contiguous integers. Each point element within a point list MUST have the order attribute set. |
Do we want to use an order attribute? Document order? A single attribute with a list of comma separated coordinates?
Now tracked as: ISSUE-19: how should we represent points? and a related issue: ISSUE-36: do we want to rely on document order?.
<location>
elementThe <location>
element contains one or more geo-references elements (see below), and has no attributes or character data.
The following elements are the XML mapping for the geo-references outlined in the data model. Geo-references are used only with in the <location>
element.
<center>
elementThe <center>
element has no character data, and only the coordinate attributes
.
<address>
element Representing addresses is a tricky business, see Geolocation WG and IETF geopriv.
As such address will be moved to TBD in this draft. This issue is now tracked as ISSUE-40
Should there be a way to assign languages to addresses or parts of addresses?
<navigation-point>
elementThe <navigation-point>
element has no character data and only the coordinate attributes
.
<area>
elementThe <area>
element MUST contain three or more <point>
elements. The first and last points in an area point list must have the same latitude, longitude and altitude. The area element has no attributes.
<object>
elementThis geo-reference hasn't been written yet
Name | Required | Type | Default value |
---|
<undetermined>
elementThe <undetermined>
element has no character data and no attributes.
<relative>
elementThe <relative>
element has no character data.
Name | Required | Type | Default value | Details |
---|---|---|---|---|
location-id | required | idref (not really, more of a xsd:anyURI as it can be external too) | None | The fragment identifier or URI of the object to which this location is relative. |
distance-from | required | integer | None | The distance this object is from the object referred to in the location-id attribute |
bearing-to | required | decimal | None | ?? radians? degrees? |
relative-height | optional | integer | None |
<map>
elementMap georeference type has been dropped from the FPWD until it is better understood, so the map element has been dropped as well.
<relationship>
element The <relationship>
element contains no character data.
Name | Required | Type | Default value | Details |
---|---|---|---|---|
type | required | string | None | MUST be one of: "contained-within","adjacent-to", or "contains" |
relative-to | required | URI | None |
<label>
elementTodo. At the f2f we agreed it would be label instead of name, and that multiples can exist, and one per language can be marked as primary
At F2F2 we discussed using URI fragments as IDs, as in XML. Using XML Base we could build a full URI that could then be used to identify the entire POI.
<category>
elementThe <category>
element is a child of the <poi> element. It is used to identify a category scheme and a category within that scheme, as well as one or more labels for the category.
The <category>
element MUST contain one or more <label> elements, and zero or more <association> elements.
See ISSUE-24.
I adjusted the Atom category element, to support multiple human readable labels via label sub elements and I try to give some meaning to the term attribute when there is no scheme.
Name | Required | Type | Default value | Details |
---|---|---|---|---|
scheme | optional | URI | None | URI that identifies the categorization scheme, does not need to be dereferencable |
term | required | string | None | The name of the category, in the context of the scheme, or when scheme is missing, it is relevant only as an opaque string to identify the category. |
TBD. See ISSUE-18.
<time>
elementWe discussed at F2F2 basing this on other standards' time representations.
This section now represents times as defined in XML Schema Datatypes.
This is ISSUE-26.
Name | Required | Type | Default value | Details |
---|---|---|---|---|
scheme | optional | URI | None | URI that identifies the categorization scheme, does not need to be dereferencable |
term | required | string | None | The name of the category, in the context of the scheme, or when scheme is missing, it is relevant only as an opaque string to identify the category. |
This example was just something I generated while thinking through the XML syntax, it hasn't been updated to be in sync with what is in the document, so it may differ.
This is a very rough RELAX NG schema for the XML syntax. It is not guaranteed to work or be in sync with the rest of the document for now.