[OSM-dev] Polygons and Multipolygons

Artem Pavlenko artem.mapnik at googlemail.com
Fri Feb 8 11:42:02 GMT 2008


Hello,

I found the way term 'Multipolygon' is used in OSM context is confusing.

Here are ISO 19125-1 definitions :

1. Polygon

A Polygon is a planar Surface, defined by 1 exterior boundary and 0  
or more interior boundaries. Each
interior boundary defines a hole in the Polygon.

The assertions for polygons (the rules that define valid polygons) are:
1. Polygons are topologically closed.
2. The boundary of a Polygon consists of a set of LinearRings that  
make up its exterior and interior
boundaries.
3. No two rings in the boundary cross, the rings in the boundary of a  
Polygon may intersect at a Point but
only as a tangent :
" P Î Polygon, " c1, c2 Î P.Boundary(), c1 1 c2, " p, q Î Point, p, q  
Î c1, p 1 q, [ p Î c2 ? q Ï c2]
4. A Polygon may not have cut lines, spikes or punctures:
" P Î Polygon, P = Closure(Interior(P))
5. The Interior of every Polygon is a connected point set.
6. The Exterior of a Polygon with 1 or more holes is not connected.  
Each hole defines a connected
component of the Exterior.
In the above assertions, Interior, Closure and Exterior have the  
standard topological definitions. The
combination of 1 and 3 make a Polygon a Regular Closed point set.

2. MultiPolygon

A MultiPolygon is a MultiSurface whose elements are Polygons.

The assertions for MultiPolygons are :
1. The interiors of 2 Polygons that are elements of a MultiPolygon  
may not intersect.
" M Î MultiPolygon, " Pi, Pj Î M.Geometries(), i1j, Interior(Pi) Ç  
Interior(Pj) = Æ
2. The Boundaries of any 2 Polygons that are elements of a  
MultiPolygon may not ‘cross’ and may touch
at only a finite number of points. (Note that crossing is prevented  
by assertion 1 above).
" M Î MultiPolygon, " Pi, Pj Î M.Geometries(), " ci Î Pi.Boundaries 
(), cj Î Pj.Boundaries()
ci Ç cj = {p1, ….., pk | pi Î Point, 1 <= i <= k}
3. A MultiPolygon is defined as topologically closed.
4. A MultiPolygon may not have cut lines, spikes or punctures, a  
MultiPolygon is a Regular, Closed point
set:
" M Î MultiPolygon, M = Closure(Interior(M))
5. The interior of a MultiPolygon with more than 1 Polygon is not  
connected, the number of connected
components of the interior of a MultiPolygon is equal to the number  
of Polygons in the MultiPolygon.

The boundary of a MultiPolygon is a set of closed curves  
(LineStrings) corresponding to the boundaries of
its element Polygons. Each Curve in the boundary of the MultiPolygon  
is in the boundary of exactly 1
element Polygon, and every Curve in the boundary of an element  
Polygon is in the boundary of the
MultiPolygon.


It might look quite verbose but it all comes down to very simple fact:

1. What we call Multipolygon is just a Polygon
2. Multipolygon is a collection of Polygons


Shouldn't we be calling MultiPolygon  Polygon?

Artem





More information about the dev mailing list