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()
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()