Haciendo un análisis topológico en GDAL/OGR devuelve un resultado inesperado. Cuando me puse a investigar, parece posible que el método Intersects() está mal implementado. Específicamente, los puntos a lo largo de un polígono del límite devuelve False, cuando debería devolver True:
from osgeo import ogr
poly = ogr.Geometry(ogr.wkbPolygon)
ring = ogr.Geometry(ogr.wkbLinearRing)
ring.AddPoint(0, 0)
ring.AddPoint(5, 5)
ring.AddPoint(10, 0)
ring.CloseRings()
poly.AddGeometry(ring)
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(10, 0)
poly.Intersects(point)
>>> False
poly.Disjoint(point)
>>> False
No sólo el punto correctamente cruzan el polígono, se Cruza y la Desunión debe ser contrario a la subconjuntos, y nunca devuelven el mismo valor. Por otra parte, la Intersección() método, que sólo debe trabajar cuando geometrías se cruzan, funciona normalmente:
inter = poly.Intersection(point)
inter.ExportToWkt()
>>> 'POINT (10 0 0)'
Me gustaría saber si tal vez yo no soy entender esto correctamente, o si mi GDAL compilación es problemático, o si es GDAL sí que tiene un error.
Info: GDAL 2.2.1 de 64 bits, Tamas Szekeres' VS2008 versión.