Exemple #1
0
    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
Exemple #2
0
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)