def load_ogr_datasource(datasource, where=None): """ Loads polygons from any OGR datasource. Returns a list of Shapely Polygons. """ from mapproxy.util.ogr import OGRShapeReader, OGRShapeReaderError polygons = [] try: with closing(OGRShapeReader(datasource)) as reader: for wkt in reader.wkts(where): try: geom = shapely.wkt.loads(wkt.decode()) except ReadingError as ex: raise GeometryError(ex) if geom.type == 'Polygon': polygons.append(geom) elif geom.type == 'MultiPolygon': for p in geom: polygons.append(p) else: log_config.warn( 'skipping %s geometry from %s: not a Polygon/MultiPolygon', geom.type, datasource) except OGRShapeReaderError as ex: raise CoverageReadError(ex) return polygons
class TestOGRShapeReader(object): def setup(self): self.reader = OGRShapeReader(polygon_file) def test_read_all(self): wkts = list(self.reader.wkts()) eq_(len(wkts), 3) for wkt in wkts: assert wkt.startswith(b'POLYGON ('), 'unexpected WKT: %s' % wkt def test_read_filter(self): wkts = list(self.reader.wkts(where='name = "germany"')) eq_(len(wkts), 2) for wkt in wkts: assert wkt.startswith(b'POLYGON ('), 'unexpected WKT: %s' % wkt def test_read_filter_no_match(self): wkts = list(self.reader.wkts(where='name = "foo"')) eq_(len(wkts), 0)
def load_datasource(datasource, where=None): """ Loads polygons from any OGR datasource. Returns the bbox and a Shapely MultiPolygon with the loaded geometries. """ from mapproxy.util.ogr import OGRShapeReader polygons = [] for wkt in OGRShapeReader(datasource).wkts(where): geom = shapely.wkt.loads(wkt) if geom.type == 'Polygon': polygons.append(geom) elif geom.type == 'MultiPolygon': for p in geom: polygons.append(p) else: log_config.warn('skipping %s geometry from %s: not a Polygon/MultiPolygon', geom.type, datasource) return polygons
def load_ogr_datasource(datasource, where=None): """ Loads polygons from any OGR datasource. Returns a list of Shapely Polygons. """ from mapproxy.util.ogr import OGRShapeReader polygons = [] with closing(OGRShapeReader(datasource)) as reader: for wkt in reader.wkts(where): geom = shapely.wkt.loads(wkt) if geom.type == 'Polygon': polygons.append(geom) elif geom.type == 'MultiPolygon': for p in geom: polygons.append(p) else: log_config.warn( 'skipping %s geometry from %s: not a Polygon/MultiPolygon', geom.type, datasource) return polygons
def setup(self): self.reader = OGRShapeReader(polygon_file)