OGR Layer 常用方法手册

from osgeo import ogr

# 打开SHP文件
driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.Open("example.shp", 1)
layer = data_source.GetLayer()

OGR Layer 常用方法手册

  1. 图层信息获取
# 获取图层名称
print(layer.GetName())

# 获取要素总数
count = layer.GetFeatureCount()

# 获取地理范围(minX, maxX, minY, maxY)
extent = layer.GetExtent()

# 获取空间参考坐标系
spatial_ref = layer.GetSpatialRef()
print(spatial_ref.ExportToWkt())

# 获取字段定义
layer_defn = layer.GetLayerDefn()
for i in range(layer_defn.GetFieldCount()):
    field_defn = layer_defn.GetFieldDefn(i)
    print(field_defn.GetName())

image-20250303155017050

  1. 字段操作
# 创建新字段
field_defn = ogr.FieldDefn("new_segment", ogr.OFTInteger)
layer.CreateField(field_defn)

# 删除字段(按索引)
layer.DeleteField(0)  # 删除第一个字段
  1. 要素操作
# 按FID获取要素
feature = layer.GetFeature(1)

# 遍历要素
layer.ResetReading()
while (feature := layer.GetNextFeature()):
    print(feature.GetFID())

# 更新要素
feature.SetField("SizeClass", "Large")
layer.SetFeature(feature)

# 新建要素
new_feature = ogr.Feature(layer.GetLayerDefn())
new_feature.SetField("SizeClass", "New")
layer.CreateFeature(new_feature)

# 删除要素
layer.DeleteFeature(1)
  1. 数据过滤
# 属性过滤
layer.SetAttributeFilter("SizeClass = 'Large'")
# ...处理过滤结果...
layer.SetAttributeFilter(None)  # 清除过滤

# 空间过滤
geom = ogr.CreateGeometryFromWkt("POINT (10 20)")
layer.SetSpatialFilter(geom)
# ...处理过滤结果...
layer.SetSpatialFilter(None)
  1. 其他功能
# 提交更改
layer.SyncToDisk()

# 能力检测
if layer.TestCapability(ogr.OLCCreateField):
    print("支持字段创建")