^ 关注我,带你一起学GIS ^
前言
❝
矢量数据的读写效率是决定生产质量的关键指标,如何选择高效且准确的的方法需要开发者根据实际需求进行选择。
由于本文由一些前置知识,在正式开始之前,需要你掌握一定的Python开发基础和GDAL的基本概念。在之前的文章中讲解了如何使用GDAL或者ogr2ogr工具将txt以及csv文本数据转换为Shp格式,可以作为基础入门学习。本篇教程在之前一系列文章的基础上讲解如何使用GDAL 创建矢量图层的两种方式。
如果你还没有看过,建议从以上内容开始。
1. 开发环境
本文使用如下开发环境,以供参考。
时间:2025年
系统:Windows 11
Python:3.11.7
GDAL:3.11.1
2. 要素结构创建
根据要素结构创建这种方式,在获取到属性域之后直接根据字段定义创建字段结构。使用图层方法CreateField写入属性字段。
ini
# 获取源数据结构
featureDefn = sourceLayer.GetLayerDefn()
# 获取源数据字段数量
fieldCount = featureDefn.GetFieldCount()
# 添加属性结构
for i in range(fieldCount):
fieldDefn = featureDefn.GetFieldDefn(i)
# 添加字段
targetLayer.CreateField(fieldDefn)
之后遍历图层要素,使用图层方法CreateFeature写入要素数据。
yaml
# 添加要素
for feature in sourceLayer:
targetLayer.CreateFeature(feature)
3. 遍历属性创建
直接遍历属性这种方式的话,首先需要根据源数据属性域使用ogr.Feature(featureDefn)方法创建一个空要素,然后向该目标要素写入几何对象和属性字段以及对应的属性值。要素对象方法SetGeometry可用于赋值几何对象,SetField方法用于添加属性字段,该方法的第一个参数具有两种形式,可以传入字段索引值或者字段名称。最后调用图层方法CreateFeature创建要素。
ini
# 获取源数据结构
featureDefn = sourceLayer.GetLayerDefn()
# 获取源数据字段数量
fieldCount = featureDefn.GetFieldCount()
# 写入图层数据
for feature in sourceLayer:
# 创建投影要素
tarFeature = ogr.Feature(featureDefn)
# 添加几何对象
geom = feature.GetGeometryRef()
tarFeature.SetGeometry(geom)
# 添加属性字段
for i in range(fieldCount):
# 获取字段信
fieldDefn = featureDefn.GetFieldDefn(i)
fieldName = fieldDefn.GetName()
fieldValue = feature.GetField(i)
# print(f"字段域:{fieldDefn}")
# print(f"字段名:{fieldName}")
# print(f"字段值:{fieldValue}")
# 写入字段对象
# tarFeature.SetField(i,fieldValue)
tarFeature.SetField(fieldName,value)
targetLayer.CreateFeature(tarFeature)
4. 注意事项
在windows开发环境中同时安装GDAL与PostGIS,其中投影库PROJ的环境变量指向PostGIS的安装路径,在运行GDAL程序时,涉及到要素、几何与投影操作时会导致异常。
具体意思为GDAL不支持PostGIS插件中的投影库版本,需要更换投影库或者升级版本。
RuntimeError: PROJ: proj_identify: D:Program FilesPostgreSQL13sharecontribpostgis-3.5projproj.db contains DATABASE.LAYOUT.VERSION.MINOR = 2 whereas a number >= 5 is expected. It comes from another PROJ installation.
解决办法为修改PROJ的环境变量到GDAL支持的版本或者在GDAL程序开头添加以下代码:
python
os.environ['PROJ_LIB'] = r'D:\Programs\Python\Python311\Libsite-packages\osgeo\data\proj'

❝
OpenLayers示例数据下载,请在公众号后台回复:ol数据
全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试
❝GIS之路 公众号已经接入了智能 助手,可以在对话框进行提问,也可以直接搜索历史文章进行查看。
都看到这了,不要忘记点赞、收藏 + 关注 哦 !
本号不定时更新有关 GIS开发 相关内容,欢迎关注 


