[Python]GDALOGR操作⽮量数据(shp、GeoJSON)[Python] GDAL/OGR操作⽮量数据(shp、GeoJSON)
GeoDoer 2019-12-30 12:17:51  2196  收藏 15
分类专栏: # GIS|Python
版权
GDAL项⽬旨于地理数据抽象模型对地理数据⽂件进⾏读写管理;⽽其项⽬下有两⼤类模块:GDAL和OGR
OGR提供操作⽮量数据的API,GDAL模块提供栅格数据的API
【相关链接】
1.GDAL/OGR例⼦合集
2.GDAL官⽹API
3.⽹上的学习笔记,教程来⾃于犹他州⽴⼤学
4.中国OSGeo教程
⽂章⽬录
OGR中的数据结构
driver解析数据的驱动
datasource管理数据源
layer管理图层
feature管理要素类
从Layer中获得feature
更新要素
删除要素
关闭要素
创建要素
geometry管理要素的⼏何属性
Geometry的⼏何属性
从Feature获取Geometry
常⽤⽅法
创建Geometry
field管理要素的属性字段
创建字段
更改属性定义
其他
经验
wkt
查询
属性查询
空间查询
SQL查询
其他
设置编码
⽰例
打开shp
删除数据
遍历所有属性值
创建
创建点状数据集
创建线状数据集
创建多边形数据集
创建属性
创建点Geometry
创建线Geometry
创建多边形Geometry 拷贝
datasource层次的拷贝layer层次的拷贝feature层次的拷贝OGR中的数据结构driver解析数据的驱动
# 【⽅法⼀】从已有数据源中获取驱动变量
ds = ogr.open(r'D:\....\...shp')
driver = ds.GetDriver()
# 【⽅法⼆】通过名称获取
json_driver = ogr.GetDrverByName('GeoJSON')
# 获得驱动名的两种⽅法
# 1. OGR⽹站上有介绍,通过GDAL/ORG⾃带的ogrinfo
# 2. 代码中提供的print_drivers函数来获取驱动程序的名字
1
2
3
4
5
resultset 遍历
6
7
8
datasource管理数据源
(1)创建数据源
有了驱动程序之后,提供数据源名称来使⽤它创建⼀个空的数据源。新创建的数据源会⾃动打开等待写⼊
# 创建⼀个功能齐全的SpatialLite数据源,⽽不是使⽤SQLite
fn = "filename"
driver = ogr.GetDriverByName("SQLite")
# 创建新的数据源时,不能覆盖现有的数据源。如果你的代码可能会覆盖现有数据,那么在创建新数据之前需要删除旧数据if ists(fn):
driver.DeleteDataSource(fn)
ds= driver.CreateDataSource(fn,
options=[ #创建选项:传递⼀个字符串列表(参数在OGR⽹站上有⽂档介绍)
'SPATIALITE=yes'
]
)
if ds is None:
#【注意】如果数据源没有创建成功,那么CreateDataSource函数会返回为空。如果为空对象,之后使⽤会报AttributeError错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(2)删除数据源
datasource.Destory() #关闭
del datasource # 删除datasource
""" 删除ds变量强制关闭⽂件,并将所有的编辑成果写⼊磁盘中
【注意】删除图层变量并不会触发这个操作,必须关闭数据源才⾏
【备注】如果想保持数据源打开的话,可以通过图层对象或者数据源对象调⽤ds.SyncToDisk()
【警告】为了使你的编辑写⼊到磁盘中,必须关闭⽂件或者调⽤SyncToDisk函数。如果没有这么做,并且在交互环境中还打开数据源,那么你会很失望地发现创建了⼀个空的数据集
"""
1
2
3
4
5
6
7
layer管理图层
layer = datasource.GetLayer(0) #根据下标来获取图层(对于shp⽽⾔只有⼀个图层)layer.GetGeomType() #图层⼏何类型
n = layer.GetFeatureCount() #要素数量
extent = layer.GetExtent() #上下左右边界
readedNum = GetFeaturesRead() #已经读取多少条Feature
layer.ResetReading() #重置内部feature指针,指向FID=0的要素
layer.GetSpatialRef() #使⽤wkt⽂本表⽰空间参考系统的实例
layer.schema #获取FieldDefn对象列表(属性名)
1
2
3
4
5
6
7
8
feature管理要素类
从Layer中获得feature
# 1. 【获得图层中的要素】
feature = layer.GetFeature(0)
# 2. 【获取图层中所有要素】
feat = layer.GetNextFeature()
while feat:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。