< The Future of Areas

The Future of Areas/Triangles

How do computers draw polygons? By splitting them into adjacent triangles. Being the most basic form of polygon, they're easy to work with.

<triangle id='1'>
  <nd ref='101'/>
  <nd ref='102'/>
  <nd ref='103'/>  (Constrained to three nodes, always)
</triangle>
 
<area id='1'>
  <tr ref='1'>
  <tr ref='2'>
</area>

Advantages

Easy to get out of the DB and convert them into a OGC Polygon - just build the WKT for every triangle, compute the union of every triangle, you're done.

Consistency: Areas will always be closed, no matter what. No need to worry about inner rings or node ordering.

Disadvantages

  • A bit of extra space used for storage.
today with triangles
<way id="1">
  <node ref="1" />
  <node ref="2" />
  <node ref="3" />
  <node ref="4" />
  <node ref="1" />
  <tag k="building" v="yes" />
</way>
<triangle id='1'>
  <nd ref='1'>
  <nd ref='2'>
  <nd ref='3'>
</triangle>
<triangle id='2'>
  <nd ref='1'>
  <nd ref='3'>
  <nd ref='4'>
</triangle>
<area id='1'>
  <tr ref='1'>
  <tr ref='2'>
  <tag k="building" v="yes" />
</area>
  • Added complexity for editors (either let users know about triangles and allow editing, or transparently convert them).
  • a "local" change (within the red bounding box) might require a complete new triangulation of the polygon:, e.g. when a node is moved from position P to P':

Variations

Do not implement an "area" primitive, and handle everything with relations.

Allow tags on triangles.

Enforce a tesselation of the entire planet. That is, make sure no two triangles overlap. That may need either topological operators at the API level (split a triangle segment and remove a vertex) or extra topological checks whenever areas are included in a request (juggle triangles as needed).

This article is issued from Openstreetmap. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.