参考教程
https://blog.csdn.net/summer_dew/article/details/87930241 添加链接描述
国内外教程合集
OSGeo中国
开放地理实验室-来源于犹他州立大学
GDAL文档
GDAL子例合集
GDAL官方API
0、ogr中的数据结构
驱动(driver):载入一个驱动,即初始化一个对象,让代码“知道”这是哪种种数据结构
数据源(datasource):即目标矢量文件。ogr中将目标矢量文件看做数据源。
图层:即layer,ESRI中,每个矢量只用一个图层。但是并不是所有的矢量文件都只有一个图层。图层有自己的属性,如名称、空间坐标系等,这些统称为layerdef。
要素(feature):图层中包含要素,如一个图层中有点、线、面等多种要素。每种要素也有自己的属性、形状等。
1、读取数据
import os
import gdal
from osgeo import ogr
import geopandas
import pandas as pd
#0 利用geopandas可视化矢量
path = r'F:\2020新疆甘肃采样材料\2019年新疆甘肃样本\2019年甘肃样本'
file = os.path.join(path,"2019GLX_LZQ_YCX32648.shp")
city = geopandas.read_file(file)
city.plot()
#1使用ogr读取矢量
driver = ogr.GetDriverByName("ESRI Shapefile") #载入驱动
datasource = driver.Open(file,1) #读取矢量数据源0代表只读,1代表可写
lyr = datasource.GetLayer(0) #读取数据层,一般ESRI的shapefile都是填0的,如果不填的话默认也是0
proj = lyr.GetSpatialRef() #图层的坐标参考系统
extend = lyr.GetExtent() #坐标范围
lyr_num = lyr.GetFeatureCount() #查看图层中有多少个要素
#查看图层中要素的属性以及属性类型、属性个数
attribute_num = 0
for feat in lyr.schema:
attribute_name = feat.GetName() #获取字段名称
attribute_type = feat.GetTypeName() #字段类型
print('字段名称:%s ,字段类型:%s'% (attribute_name,attribute_type))
attribute_num += 1
print("该图层有",attribute_num,"个属性字段")
2、查看图层中前五条要素的所有属性
for feat_ten in lyr:
pt = feat_ten.geometry() #获取要素的几何形状
ten_buondary = pt.GetBoundary() #查看每个要素的边界位置
name = feat_ten.GetField("Name") #获取Name的属性值
typecode = feat_ten.GetField("typecode") #获取typecode的属性值
fid = feat_ten.GetFID() #获取FID的属性值
all_attribute = feat_ten.items()#所有属性
print('FID:%s,作物类型:%s, 编码: %s,traincode:%s'% (fid,name,typecode,feat_ten.GetField(fieldIndex1)))
print('坐标',ten_buondary)
print(all_attribute)
print("================================================================================================")
i = i + 1
if i == 5:
break
3、给图层新建属性字段
ogr.UseExceptions()
train_info = ogr.FieldDefn('traincode',ogr.OFTInteger) #定义新的属性字段:traincode,该字段的类型为Integer
lyr.CreateField(train_info) #为图层创建字段