OGR Layer 常用方法手册

OGR Layer 常用方法手册
ytkzfrom osgeo import ogr
# 打开SHP文件
driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.Open("example.shp", 1)
layer = data_source.GetLayer()
OGR Layer 常用方法手册
- 图层信息获取
# 获取图层名称
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())
- 字段操作
# 创建新字段
field_defn = ogr.FieldDefn("new_segment", ogr.OFTInteger)
layer.CreateField(field_defn)
# 删除字段(按索引)
layer.DeleteField(0) # 删除第一个字段
- 要素操作
# 按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)
- 数据过滤
# 属性过滤
layer.SetAttributeFilter("SizeClass = 'Large'")
# ...处理过滤结果...
layer.SetAttributeFilter(None) # 清除过滤
# 空间过滤
geom = ogr.CreateGeometryFromWkt("POINT (10 20)")
layer.SetSpatialFilter(geom)
# ...处理过滤结果...
layer.SetSpatialFilter(None)
- 其他功能
# 提交更改
layer.SyncToDisk()
# 能力检测
if layer.TestCapability(ogr.OLCCreateField):
print("支持字段创建")