[gdal-dev] Layer intersection: two polygons with a common point

Jukka Rahkonen jukka.rahkonen at maanmittauslaitos.fi
Thu Apr 28 03:03:55 PDT 2016


Even Rouault <even.rouault <at> spatialys.com> writes:

> 
> Le jeudi 28 avril 2016 08:50:46, Ari Jolma a écrit :
> > Jukka pointed out this
> > 
> > http://gis.stackexchange.com/questions/191336/gdal-ogr-ogr-layer-intersecti
> > on-producing-points-from-linestrings
> > 
> > to me.
> > 
> > It is true that intersecting two layers, where one contains
> > 
> > 'POLYGON (( 140 360, 140 480, 220 480, 220 360, 140 360 ))'
> > 
> > and the other
> > 
> > 'POLYGON (( 220 260, 220 360, 300 360, 300 260, 220 260 ))'
> > 
> > produces an empty layer. The reason is a check
> > 
> > (z_geom->IsEmpty() ||
> >    (x_geom->getDimension() == 2 &&
> >     y_geom->getDimension() == 2 &&
> >     z_geom->getDimension() < 2))
> > 
> > (x and y are the polygons and z is the intersection, a point in this
> > case), which leads to discarding the point.
> > 
> > I believe this check was introduced as a result of ticket 4772
> > 
> > https://trac.osgeo.org/gdal/ticket/4772
> > 
> > in changeset 25427, where it is stated that "when intersecting 2
> > polygons, do not consider a point or linear intersection as a valid one".
> 
> Oh I see we are both involved in this  The advantage of the current 
> behaviour is that it is compatible with most popular output formats that
don't 
> like mixing geometry types in the same layer (think of shapefiles, and 
> generally postgis, spatialite when layer geometry type is not unknown, ...). 
> Perhaps one possible approach would be to check the output layer geometry
type 
> : if it is wkbUnknown, keep all non empty geometries, otherwise only keep 
> those compatible of the geometry type. And perhaps combine that default 
> behaviour with an option to the method "KEEP_LOWER_DIMENSION_GEOMETRIES" 
> (would be honoured only if output layer geometry type == wkbUnknown) ?
Since I 
> feel that in most cases and in real-life, intersection of polygons resulting 
> in points or lines should not happen.
> 


Hi,

I would say that the current behaviour is OK but it should not be called as
"Intersection" because it is so clearly against the OGC Simple Feature
Access - SQL option. There is even a conformity test number 47 on page 63
that takes a linestring and a polygon as inputs and requires a point as an
output. PostGIS, Spatialite and Oracle are also all returning point for this
query.

The test in the standard is:

T47 Intersection(g1 Geometry, g2Geometry) : Geometry
For this test, we will determine the intersection between 
Cam Stream and Blue Lake.
The answer must be 'POINT( 52 18 )'

Instead of adding a new weird configuration options, how about having an OGC
compliant function "Intersects" and our our extension "IntersectsProperly"
like there is ContainsProperly in PosGIS
http://postgis.net/docs/ST_ContainsProperly.html

-Jukka Rahkonen-







More information about the gdal-dev mailing list