def get_geometry_type(self, layer: ogr.Layer) -> str: """Get geometry type human readable.""" try: logger.debug(ogr.GeometryTypeToName(layer.GetGeomType())) # if layer.GetGeomType(): # geom_type = layer.GetGeomType() # layer.ResetReading() # logger.error(geom_type) # return geom_type feat = layer.GetNextFeature() if not hasattr(feat, "GetGeometryRef"): logger.error("Unable to determine GeoMetryRef") return None layer_geom = feat.GetGeometryRef() if hasattr(layer_geom, "GetGeometryName"): return layer_geom.GetGeometryName() except Exception as err: logger.error( "Unable to retrieve geometry type for layer: {}. Trace: {}".format( layer.GetName(), err ) ) return None
def reproject(layer: ogr.Layer, srs: osr.SpatialReference): '''Reprojects an existing layer given a spatial reference''' layer_name = layer.GetName() logging.info(f'reprojecting {layer_name}') projection = layer.GetSpatialRef() if projection is None: raise baseException( f'layer: {layer_name} does not have a spatial reference.', baseException.ERR_INPUT_LEVEL) # no action needed if projection.IsSame(srs): logging.info('no reprojection required') return try: # transform coordTrans = osr.CoordinateTransformation(projection, srs) # copy features layer.ResetReading() for ft in layer: geom = ft.GetGeometryRef() geom.Transform(coordTrans) ft.SetGeometry(geom) except Exception as e: raise baseException(f'layer: {layer_name} could not be reprojected.', baseException.ERR_CODE_LEVEL, e)