python中gdal操作矢量文件

8 篇文章 1 订阅


参考教程
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)  #为图层创建字段

4、给不同的属性字段添加属性

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值