一、GDAL简介
GDAL是Geospatial Data Abstraction Library的缩写,是一个开源的、独立的数据转换库,支持多种空间数据格式的读写、投影变换和简单的数据编辑操作。GDAL不仅支持矢量数据格式,还支持栅格数据格式。它能读取的格式,如下表:
格式 | 读写 | 备注 |
---|---|---|
ESRI Shapefile | 部分支持 | 仅支持点、线和面要素 |
GeoJSON | 是 | |
GML | 部分支持 | 只支持点、线和面要素 |
KML | 是 | |
MapInfo File | 部分支持 | 只支持点、线和面要素 |
GDB | 是 | |
PostgreSQL/PostGIS | 是 | |
MySQL | 是 | |
SQLite/Spatialite | 是 | |
CSV | 是 | |
DXF | 是 | |
DWG | 是 | |
... |
二、GDAL矢量属性数据的修改方式
GDAL提供了多种修改矢量属性数据的方式,以下是其中两种方法:
1.使用Feature类
Feature类是GDAL中操作矢量数据的重要类,在Feature类中,支持添加、修改、删除属性数据等操作。Example1就是一个修改Shapefile文件中属性数据的示例代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from osgeo import ogr
# 打开Shapefile文件
shp_ds = ogr.Open("test.shp", 1)
if shp_ds is None:
print("开启Shapefile文件失败!")
exit()
# 获取第一个图层
layer = shp_ds.GetLayer()
# 获取图层中的要素个数
num_features = layer.GetFeatureCount()
# 遍历每一个要素
for i in range(num_features):
feature = layer.GetFeature(i)
# 获取要素属性数据
area = feature.GetField("AREA")
# 修改属性数据值
feature.SetField("AREA", area * 10)
# 更新要素和图层
layer.SetFeature(feature)
# 释放要素内存
feature = None
# 释放资源
shp_ds = None
2.使用SQL语句
在GDAL中,打开shapefile文件时,可以通过SQL语句来获取符合条件的要素。这种方法可以用来筛选需要修改的要素。Example2代码示例中,首先根据SQL条件查询符合要求的地理要素,然后打印这些要素的属性值,并修改它的属性值,最后将要素保存到新的shapfile文件中。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from osgeo import ogr
# 打开Shapefile文件
shp_ds = ogr.Open("test.shp", 0)
if shp_ds is None:
print("开启Shapefile文件失败!")
exit()
# 获取第一个图层
layer = shp_ds.GetLayer()
# 构造SQL查询条件
# 例如:查询AREA值大于5000的所有要素
sql = "SELECT * FROM test WHERE AREA > 5000"
# 获取符合条件的要素
selection = layer.ExecuteSQL(sql)
# 打印要素属性值
for feature in selection:
area = feature.GetField("AREA")
print(area)
# 修改属性数据值
feature.SetField("AREA", area * 2)
# 创建新的Shapefile文件,并保存要素
driver = ogr.GetDriverByName("ESRI Shapefile")
new_shp = driver.CreateDataSource("new_test.shp")
new_layer = new_shp.CreateLayer("new_test", layer.GetSpatialRef(), layer.GetGeomType())
new_layer.CreateFields(layer.schema)
new_layer.CreateGeomField(layer.geomType())
for feature in selection:
new_layer.CreateFeature(feature)
# 释放资源
new_layer = None
new_shp = None
layer = None
shp_ds = None
以上示例代码中都是围绕修改Shapefile文件中要素的属性数据展开。只要根据需要更改要素的属性数据即可。同时,这两种方式修改其他格式的矢量属性数据也是差不多的,具体使用方法可查看GDAL相关文档和示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GDAL 矢量属性数据修改方式(python) - Python技术站