diff --git a/src/core/qgsgeometry.cpp b/src/core/qgsgeometry.cpp index b4c7e26e4e7f..f3137bd99e6c 100644 --- a/src/core/qgsgeometry.cpp +++ b/src/core/qgsgeometry.cpp @@ -2076,9 +2076,17 @@ bool QgsGeometry::intersects(QgsRect* r) const rectwkt+="))"; geos::Geometry *geosRect = wktReader->read( qstrdup(rectwkt) ); - if(geosGeom->intersects(geosRect)) + try // geos might throw exception on error { - returnval=true; + if(geosGeom->intersects(geosRect)) + { + returnval=true; + } + } + catch (geos::TopologyException* e) + { + QString error = e->toString().c_str(); + QgsLogger::warning("GEOS: " + error); } delete geosGeom; @@ -2121,9 +2129,17 @@ bool QgsGeometry::fast_intersects(const QgsRect* r) const geos::WKTReader *wktReader = new geos::WKTReader(gf); geos::Geometry *geosRect = wktReader->read( qstrdup(rectwkt) ); - if(geosGeom->intersects(geosRect)) + try // geos might throw exception on error + { + if(geosGeom->intersects(geosRect)) + { + returnval=true; + } + } + catch (geos::TopologyException* e) { - returnval=true; + QString error = e->toString().c_str(); + QgsLogger::warning("GEOS: " + error); } delete geosGeom; diff --git a/src/providers/ogr/qgsogrprovider.cpp b/src/providers/ogr/qgsogrprovider.cpp index a8693df1095e..d7730d6e25c0 100644 --- a/src/providers/ogr/qgsogrprovider.cpp +++ b/src/providers/ogr/qgsogrprovider.cpp @@ -423,7 +423,20 @@ QgsFeature *QgsOgrProvider::getNextFeature(bool fetchAttributes) mSelectionRectangle->exportToWkt(&sWkt); geos::Geometry *geosRect = wktReader->read(sWkt); assert(geosRect != 0); - if(geosGeom->intersects(geosRect)) + bool intersection = false; + + try // geos might throw exception on error + { + if(geosGeom->intersects(geosRect)) + intersection = true; + } + catch (geos::TopologyException* e) + { + QString error = e->toString().c_str(); + QgsLogger::warning("GEOS: " + error); + } + + if (intersection) { QgsDebugMsg("intersection found"); delete[] sWkt;