[OSM-dev] Polygons and Multipolygons

Fri Feb 8 11:54:58 GMT 2008

```On 8 Feb 2008, at 11:46, Andy Robinson ((blackadder)) wrote:

> Artem Pavlenko wrote:
>> Sent: 08 February 2008 11:42 AM
>> To: talk Openstreetmap
>> Cc: OSM-Dev Openstreetmap
>> Subject: [OSM-dev] Polygons and Multipolygons
>>
>> 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?
>>
>
> Mostly I suspect so. Perhaps the issue came to light when people
> started to
> refer to islands in lakes where there are two polygons, one inside the
> other.
>

Yes, I can see that. I guess this won't be a problem if we use, say
'SuperPolygon' or something (I'm not suggesting this)

> Cheers
>
> Andy
>
Artem

```