def export(in_layer: Layer,
           out_layer: Layer,
           styler: Optional[Callable[[Feature], str]] = None) -> None:
    """Generate the output dataset from the input -- the difference being the style of the features"""
    for in_feature in in_layer:
        out_feature: Feature = ogr.Feature(out_layer.GetLayerDefn())
        out_feature.SetFrom(in_feature)

        if styler is not None:
            style: str = styler(in_feature)
            out_feature.SetStyleString(style)

        out_layer.CreateFeature(out_feature)
        in_feature.Destroy()
        out_feature.Destroy()
Exemple #2
0
def convert_dataset(
    path: Path,
    sndg_layer: ogr.Layer,
) -> None:
    file = ogr.Open(str(path))
    layer = file.GetLayer()
    defn = sndg_layer.GetLayerDefn()
    for feature in layer:
        if not feature.GetFieldAsString('VALSOU'):
            # VALSOU is not set; feature has no sounding
            continue

        new = ogr.Feature(defn)
        new.SetField('RCID', feature.GetField('RCID'))
        new.SetField('DEPTH', feature.GetField('VALSOU'))
        new.SetGeometry(feature.GetGeometryRef().Centroid())
        sndg_layer.CreateFeature(new)
def get_features_from_layer(source_layer: ogr.Layer,
                            destination_layer: ogr.Layer,
                            title_provider: Callable[[ogr.Feature],
                                                     str], x_min: float,
                            y_min: float, x_max: float, y_max: float) -> None:
    memory_driver = ogr.GetDriverByName("Memory")
    clip_datasource = memory_driver.CreateDataSource("")
    clip_layer = clip_datasource.CreateLayer("clip_layer",
                                             geom_type=ogr.wkbPolygon)
    clip_geom = ogr.CreateGeometryFromWkt(
        f"POLYGON (({x_min} {y_min}, {x_max} {y_min}, {x_max} {y_max}, {x_min} {y_max}, {x_min} {y_min}))"
    )
    clip_srs = osr.SpatialReference()
    clip_srs.SetFromUserInput(bbox_crs)
    clip_geom.AssignSpatialReference(clip_srs)
    feature_defn = clip_layer.GetLayerDefn()
    feature = ogr.Feature(feature_defn)
    feature.SetGeometry(clip_geom)
    clip_layer.CreateFeature(feature)

    result_datasource = memory_driver.CreateDataSource("")
    result_layer = result_datasource.CreateLayer(
        "result_layer", geom_type=ogr.wkbMultiLineString)
    ogr.Layer.Clip(source_layer, clip_layer, result_layer)

    id_field = ogr.FieldDefn(id_field_name, ogr.OFTInteger64)
    title_field = ogr.FieldDefn(title_field_name, ogr.OFTString)
    title_field.SetWidth(title_field_width)
    destination_layer.CreateField(id_field)
    destination_layer.CreateField(title_field)
    feature = result_layer.GetNextFeature()
    while feature is not None:
        geometry_ref = feature.GetGeometryRef()
        new_geometry = geometry_ref.Clone()
        new_feature = ogr.Feature(destination_layer.GetLayerDefn())
        new_feature.SetGeometryDirectly(new_geometry)
        new_feature.SetField(id_field_name, feature.GetFID())
        new_feature.SetField(title_field_name,
                             title_provider(feature)[0:title_field_width])
        destination_layer.CreateFeature(new_feature)
        feature = result_layer.GetNextFeature()