使用 GDALOGR 提取矢量文件唯一字段值

使用 GDALOGR 提取矢量文件唯一字段值
ytkz在 GIS 开发中,我们经常需要从 Shapefile 或其他矢量文件中提取属性表的唯一值。今天分享一个简单的 Python 函数,使用 GDAL 的 OGR 模块来实现这个功能。
函数 get_names_from_vector 接收矢量文件路径和字段名作为参数。它首先打开文件,检查字段是否存在,然后遍历所有要素,收集唯一值到集合中。代码中加入了打印语句,便于调试。
这个小工具特别适合批量处理地理数据,比如提取行政区划名称列表。
from osgeo import ogr
def get_names_from_vector(vector_path, name_field):
"""
读取矢量文件属性表指定列的所有唯一值
"""
print(f"正在读取矢量文件: {vector_path}")
ogr.RegisterAll()
ds = ogr.Open(vector_path, 0)
if ds is None:
raise IOError(f"无法打开文件: {vector_path}")
layer = ds.GetLayer()
if layer is None:
raise IOError(f"无法获取图层: {vector_path}")
names = set()
layer_defn = layer.GetLayerDefn()
field_index = layer_defn.GetFieldIndex(name_field)
if field_index < 0:
raise ValueError(f"字段 '{name_field}' 在矢量文件中不存在")
feature_count = layer.GetFeatureCount()
print(f"发现 {feature_count} 个要素,正在提取 '{name_field}' 字段值...")
for feature in layer:
val = feature.GetField(name_field)
if val:
names.add(str(val))
print(f"共提取到 {len(names)} 个唯一名称")
return names
上面的代码逻辑如下:
使用示例:names = get_names_from_vector(‘china.shp’, ‘NAME’)。






