RFC 5964

Specifying Holes in Location-to-Service Translation (LoST) Service Boundaries

πŸ“… published August 2010, from ietf

Specifying Holes in Location-to-Service Translation (LoST) Service Boundaries πŸŽ€

Okay bestie, this RFC is a whole Standards Track doc from August 2010 by J. Winterbottom and M. Thomson at Andrew Corporation. It's ISSN 2070-1721, and the header doesn't list any RFCs it obsoletes or updates, so it's standing on its own πŸ’…βœ¨

Abstract ✨

Okay so this doc is all about how you can carve holes into geodetic service boundaries πŸ•³οΈπŸ¦‹ It also describes one way a search solution could work in a service database, like the kind a Location-to-Service Translation (LoST) server might use πŸ’–

Status of This Memo πŸ“œ

This is an Internet Standards Track document 🌸

It's a product of the Internet Engineering Task Force (IETF), so it has the consensus of the whole IETF community πŸ‘‘ It got public review and the Internet Engineering Steering Group (IESG) approved it for publication. If you want more on Internet Standards, check Section 2 of RFC 5741 πŸ“–

For the current status, any errata, and how to give feedback, go to http://www.rfc-editor.org/info/rfc5964 🧚

Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stood on the publication date. Please read these carefully, because they spell out your rights and restrictions for this document πŸ™ˆ Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as the Simplified BSD License describes 🫢

Table of Contents πŸ“

1. Introduction ....................................................2
2. Terminology .....................................................3
3. Specifying Holes ................................................3
4. GML Polygons ....................................................6
5. Holes in GML Polygons ...........................................6
6. Service Boundary Specification and Selection Algorithm ..........7
7. Security Considerations ........................................10
8. Acknowledgements ...............................................10
9. References .....................................................10
   9.1. Normative References ......................................10
   9.2. Informative References ....................................10

1. Introduction 🌈

Okay so the LoST protocol [RFC5222] maps services and locations to destination addresses πŸ—ΊοΈ A LoST server does this by provisioning boundary maps or areas against service URNs. The boundary is a polygon made of sets of geodetic coordinates that describe an enclosed area. Sometimes that enclosed area (the exterior polygon) has exception areas inside it, called holes πŸ•³οΈ For the same service, those holes have to point to a different destination than the bigger area does 😭

This doc describes a profile of Geographic Markup Language (GML) [ISO-19107] polygons. The profile limits how they can be represented when they're used for service boundaries πŸ’… It cuts out a bunch of tricky permutations, so simpler implementations don't have to handle every variation GML allows. A fully conformant GML implementation still has to produce polygons that fit this profile, so everyone stays interoperable 🫢

    o--------------o
   /                \
  /    /\            \
 /    + +-----+       \
o     |  Hole  \       o
|     |    1   /       |
|     +-------+        |<--- Primary Polygon
|        +-------+     |
|       /  Hole  |     |
o       \   2    |     o
 \       +-----+ +    /
  \             \/   /
   \                /
    o--------------o

Figure 1: Holes in a Polygon

Again, this doc is a profile of GML [ISO-19107] polygons that limits their representation when they're used for service boundaries πŸ’–

The working group thought these regions could be drawn as polygons without holes in a bunch of different ways. They still landed on the recommendations here, to avoid problems with arbitrarily dividing regions and to line up with how existing geospatial systems already work 🧚✨

2. Terminology πŸŽ€

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] πŸ“–

3. Specifying Holes πŸ•³οΈ

Holes related to an exterior boundary polygon MUST adhere to the following rules:

Rule 1: Two holes MUST NOT have more than one point of intersection.

If two or more holes overlap or share a common boundary, they count as a single hole. The internal elements (holes) should have common boundaries removed, and one single hole gets created, no matter whether the excluded area is itself made up of multiple service boundaries πŸ¦‹

    o--------------o                      o--------------o
   /                \                    /                \
  /    /\            \                  /    /\            \
 /    + +-----+       \                /    + +-----+       \
o     |  Hole  \       o              o     |        \       o
|     |    1    \      |              |     |  One    \      |
|     +-+-------+      |  =========>  |     +-+  Hole +      |
|       /  Hole  |     |              |       /        |     |
o       \   2    |     o              o       \        |     o
 \       +-----+ +    /                \       +-----+ +    /
  \             \/   /                  \             \/   /
   \                /                    \                /
    o--------------o                      o--------------o

       Incorrect                              Correct

         Figure 2: Hole Specification with Boundary Sharing

Rule 2: A polygon MUST describe a contiguous region.

If a hole overlaps with the outer boundary, or shares part of a side with it, then it has an inlet, and it MUST be expressed without the hole 😀

           +------- Inlet
           |
           v
    o---+-----+----o                     o---o     o----o
   /    |%%%%%|     \                   /    |     |     \
  /    /%%%%%%|      \                 /    /      |      \
 /    +%%%%%%%|       \               /    o       o       \
o     |%%%%%%%%\       o             o     |        \       o
|     |%%%%%%%%%\      |             |     |         \      |
|     +-+%%%%%%%%+     |  ========>  |     o-o        o     |
|       /%%%%%%%%|     |             |       /        |     |
o       \%%%%%%%%|     o             o       \        |     o
 \       +-----+ +    /               \       o-----o o    /
  \             \/   /                 \             \/   /
   \                /                   \                /
    o--------------o                     o--------------o

       Incorrect                             Correct

                 Figure 3: Specification of an Inlet

If a hole touches the outer boundary in two places, the region MUST be expressed as two separate polygons 🌸

    A--q-----------B                     A-q   q----------B
   /  | |           \                   /  |   |           \
  /   | |            \                 /   |   |            \
 /    z r-----s       \               / P  z   r-----s   P   \
H     |        \       C             H  o  |          \   o   C
|     |  One    \      |             |  l  |           \   l  |
|     y-x  Hole  t     |  ========>  |  y  y-x          t  y  |
|       /        |     |             |  g    /          |  g  |
G       \        |     D             G  o    \          |  o  D
 \      /    v---u    /               \ n    /      v---u  n /
  \     \   /        /                 \  1  \     /      2 /
   \     \ /        /                   \     \   /        /
    F-----w--------E                     F-----w w--------E

       Incorrect                               Correct

    Figure 4: Specification of Hole with Multiple Outer-Boundary
                           Intersections

Similarly, a polygon that sits entirely inside a hole from another polygon (an "island") is a separate polygon 🏝️

       o--------------o
      /                \
     / +--------------+ \
    /  |%%%%%%%%%%%%%%|  \
   o   |%%o--------o%%|   o
   |   |%/  Island  \%|   |
   |   |%\          /%|   |
   |   |%%o--------o%%|   |
   o   |%%%%%%%%%%%%%%|   o
    \  +--------------+  /
     \                  /
      \                /
       o--------------o

Figure 5: Hole with Enclosed Polygon (Island)

Rule 3: A hole MUST be formed from a legal linear ring in accordance with [geoshape], except that points are specified in a clockwise direction πŸ”„

Holes are specified clockwise so that their upward normal opposes the upward normal of the exterior boundary of the polygon. Note that [geoshape] says exterior boundaries are specified in counterclockwise order 🧠

There's no restriction on how many points can be used to express the perimeter of either exterior or interior boundaries πŸŽ‰

4. GML Polygons πŸ’Ž

The GML encoding of a polygon defines an enclosed exterior boundary, where the first and last points of the boundary are the same. Check out the example in Figure 6 πŸ‘€

    F--------------E
   /                \
  /                  \
 /                    \
A                      D
 \                    /
  \                  /
   \                /
    B--------------C
<gml:Polygon srsName="urn:ogc:def:crs:EPSG::4326">
  <gml:exterior>
    <gml:LinearRing>
      <gml:pos>43.311 -73.422</gml:pos> <!--A-->
      <gml:pos>43.111 -73.322</gml:pos> <!--B-->
      <gml:pos>43.111 -73.222</gml:pos> <!--C-->
      <gml:pos>43.311 -73.122</gml:pos> <!--D-->
      <gml:pos>43.411 -73.222</gml:pos> <!--E-->
      <gml:pos>43.411 -73.322</gml:pos> <!--F-->
      <gml:pos>43.311 -73.422</gml:pos> <!--A-->
    </gml:LinearRing>
  </gml:exterior>
</gml:Polygon>

Figure 6: Hexagon and Associated GML

Note that the polygon vertices in Figure 6 use <pos> elements, purely for clarity. The vertices can also be expressed using a <posList> element ✨

Part 1 down, bestie! Part 2 (Section 5 onward) is coming next πŸ’–πŸ¦‹

5. Holes in GML Polygons ✨

okay so a hole gets carved into the polygon by giving it an interior boundary πŸ•³οΈ bestie, the points of that interior boundary are what define the area the hole takes up inside the main (exterior) polygon 🫢 in Figure 7, the shaded bit is the hole, and it's made of the 4 interior points (w,z,y,x) πŸ’…

    F-------------E
   /               \
  /  w-------------x \
 /   |/////////////|  \
A    |/////////////|   D
 \   |/////////////|  /
  \  z-------------y /
   \               /
    B-------------C
<gml:Polygon srsName="urn:ogc:def:crs:EPSG::4326">
  <gml:exterior>
    <gml:LinearRing>
      <gml:pos>43.311 -73.422</gml:pos> <!--A-->
      <gml:pos>43.111 -73.322</gml:pos> <!--B-->
      <gml:pos>43.111 -73.222</gml:pos> <!--C-->
      <gml:pos>43.311 -73.122</gml:pos> <!--D-->
      <gml:pos>43.511 -73.222</gml:pos> <!--E-->
      <gml:pos>43.511 -73.322</gml:pos> <!--F-->
      <gml:pos>43.311 -73.422</gml:pos> <!--A-->
    </gml:LinearRing>
  </gml:exterior>
  <gml:interior>
    <gml:LinearRing>
      <gml:pos>43.411 -73.322</gml:pos> <!--w-->
      <gml:pos>43.411 -73.222</gml:pos> <!--x-->
      <gml:pos>43.211 -73.222</gml:pos> <!--y-->
      <gml:pos>43.211 -73.322</gml:pos> <!--z-->
      <gml:pos>43.411 -73.322</gml:pos> <!--w-->
    </gml:LinearRing>
  </gml:interior>
</gml:Polygon>
                     Figure 7: Hexagon with Hole

6. Service Boundary Specification and Selection Algorithm πŸ’œ

okay this one is giving main character energy πŸ‘‘ a service boundary is a polygon that can have lots of vertices 🌸 the area enclosed by the polygon is where a service (written as a service URN) maps to one single URI πŸŽ€

Figure 7 gets used to show off two service boundaries πŸ¦‹ the first one, A->F, is called area-A, and the second one, w->z, is called area-w πŸ’– area-A is directly encoded by the GML in Figure 7 ✨ area-w shows up as a hole in area-A through the interior boundary 🫢 and because area-w is a service boundary too, it needs its own separate polygon, shown in Figure 8 (notice the vertices are reversed πŸ™ˆ)

<gml:Polygon srsName="urn:ogc:def:crs:EPSG::4326">
  <gml:exterior>
    <gml:LinearRing>
      <gml:pos>43.411 -73.322</gml:pos> <!--w-->
      <gml:pos>43.211 -73.322</gml:pos> <!--z-->
      <gml:pos>43.211 -73.222</gml:pos> <!--y-->
      <gml:pos>43.411 -73.222</gml:pos> <!--x-->
      <gml:pos>43.411 -73.322</gml:pos> <!--w-->
    </gml:LinearRing>
  </gml:exterior>
</gml:Polygon>
                 Figure 8: GML for Area-w

Service mappings for these boundaries could be handed out by a LoST server like in Figure 9 🧚

<mapping xmlns="urn:ietf:params:xml:ns:lost1"
         expires="2010-12-25T09:44:33Z"
         lastUpdated="2010-03-08T03:48:22Z"
         source="authoritative.foo.example"
         sourceId="7e3f40b098c711dbb606011111111111">
  <displayName xml:lang="en">Outer Area Police</displayName>
  <service>urn:service:sos.police</service>
  <serviceBoundary profile="geodetic-2d">
    <gml:Polygon xmlns:gml="http://www.opengis.net/gml"
                 srsName="urn:ogc:def:crs:EPSG::4326">
      <gml:exterior>
        <gml:LinearRing>
          <gml:pos>43.311 -73.422</gml:pos>
          <gml:pos>43.111 -73.322</gml:pos>
          <gml:pos>43.111 -73.222</gml:pos>
          <gml:pos>43.311 -73.122</gml:pos>
          <gml:pos>43.511 -73.222</gml:pos>
          <gml:pos>43.511 -73.322</gml:pos>
          <gml:pos>43.311 -73.422</gml:pos>
        </gml:LinearRing>
      </gml:exterior>
      <!-- this is the service boundary hole -->
      <gml:interior>
        <gml:LinearRing>
          <gml:pos>43.411 -73.322</gml:pos>
          <gml:pos>43.211 -73.322</gml:pos>
          <gml:pos>43.211 -73.222</gml:pos>
          <gml:pos>43.411 -73.222</gml:pos>
          <gml:pos>43.411 -73.322</gml:pos>
        </gml:LinearRing>
      </gml:interior>
    </gml:Polygon>
  </serviceBoundary>
  <uri>sip:area-A-pd@example.com</uri>
  <uri>xmpp:area-A-pd@example.com</uri>
  <serviceNumber>000</serviceNumber>
</mapping>

<mapping xmlns="urn:ietf:params:xml:ns:lost1"
         expires="2010-12-25T09:44:33Z"
         lastUpdated="2010-03-08T03:48:22Z"
         source="authoritative.foo.example"
         sourceId="7e3f40b098c711dbb606011111111111">
  <displayName xml:lang="en">Inner Area Police</displayName>
  <service>urn:service:sos.police</service>
  <serviceBoundary profile="geodetic-2d">
    <gml:Polygon xmlns:gml="http://www.opengis.net/gml"
                 srsName="urn:ogc:def:crs:EPSG::4326">
      <gml:exterior>
        <gml:LinearRing>
          <gml:pos>43.411 -73.322</gml:pos>
          <gml:pos>43.211 -73.322</gml:pos>
          <gml:pos>43.211 -73.222</gml:pos>
          <gml:pos>43.411 -73.222</gml:pos>
          <gml:pos>43.411 -73.322</gml:pos>
        </gml:LinearRing>
      </gml:exterior>
    </gml:Polygon>
  </serviceBoundary>
  <uri>sip:area-w-pd@example.com</uri>
  <uri>xmpp:area-w-pd@example.com</uri>
  <serviceNumber>000</serviceNumber>
</mapping>
                 Figure 9: Service Boundary Specifications

so LoST servers are likely going to need to answer fast enough for real-time queries during an emergency call routing flow 🚨 that's why databases with native geospatial query support are desirable 😭 and service boundary specs that map easily onto internal data structures are preferred πŸ’… using interior boundaries makes this super easy, and you can specify an arbitrary number of holes in a service boundary 🌈

each polygon gets stored in the geospatial database and mapped to a service URN and destination URI ✨ lots of geospatial databases natively support polygons with interior exclusions πŸ’œ without native support, interior boundaries can be stored against the polygon and checked separately 🧩 a location is inside a polygon's area if it's within the exterior boundary and not within any interior boundary πŸŽ€

in the example above, if a location lands inside the interior boundary, it maps to the "Inner Area Police" service πŸš“ and if it's inside the exterior boundary but not the interior one, it maps to the "Outer Area Police" service πŸš“ ✨

7. Security Considerations πŸ”

okay the security part is short but sweet 🫢 constraining the form of a polygon representation the way this document describes does not introduce any new security considerations πŸ’…

8. Acknowledgements πŸ™

big thanks to Carl Reed for the input sent to the list some months back and for reviewing this doc πŸ’– thanks to Michael Haberler for suggesting that this kind of specification was needed 🌸 and thanks to Avery Penniston for the review and feedback πŸ¦‹

9. References πŸ“š

9.1. Normative References

[RFC2119]    Bradner, S., "Key words for use in RFCs to Indicate
             Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC5222]    Hardie, T., Newton, A., Schulzrinne, H., and H.
             Tschofenig, "LoST: A Location-to-Service Translation
             Protocol", RFC 5222, August 2008.

[geoshape]   Thomson, M. and C. Reed, "GML 3.1.1 PIDF-LO Shape
             Application Schema for use by the Internet Engineering
             Task Force (IETF)", Candidate OpenGIS Implementation
             Specification 06-142r1, Version: 1.0, April 2007.

9.2. Informative References

[ISO-19107]  ISO, "Geographic information - Spatial Schema", ISO
             Standard 19107, First Edition, May 2003.

Authors' Addresses

James Winterbottom
Andrew Corporation
Andrew Building (39)
Wollongong University Campus
Northfields Avenue
Wollongong, NSW  2522
AU

EMail: james.winterbottom@andrew.com


Martin Thomson
Andrew Corporation
Andrew Building (39)
Wollongong University Campus
Northfields Avenue
Wollongong, NSW  2522
AU

EMail: martin.thomson@andrew.com
πŸ“¦ where this page comes from