品牌网站建设知名大蝌蚪,wordpress文章不显示作者,网站建设百度搜不到,那里有做像美团的网站的ogr库是一个处理地理空间矢量数据的开源库。它可以读取多种数据格式#xff0c;进行地理处理、属性表操作、数据分析等操作。目前ogr和osr库已集成到GDAL库中#xff0c;可以对栅格数据、矢量数据进行处理分析#xff0c;被3S的研究人员广泛应用。感兴趣的可以自己去了解一下… ogr库是一个处理地理空间矢量数据的开源库。它可以读取多种数据格式进行地理处理、属性表操作、数据分析等操作。目前ogr和osr库已集成到GDAL库中可以对栅格数据、矢量数据进行处理分析被3S的研究人员广泛应用。感兴趣的可以自己去了解一下不懂得可以一起交流 最近发现之前写的代码都快不认识了所以及时做笔记真的很重要。今天给大家分享下如何使用Python对矢量数据进行编辑顺便自己也复习一下。 一、安装库 osgeo这个库真的非常强大大家可以自己去了解一下。矢量数据分为datasourcelayerfeature三个层次
from osgeo import gdal, osr, ogr
二、查询矢量数据
1.打开矢量数据
def Open_Vector(path_shp):ds ogr.Open(path_shp, True)# True表示以读写方式打开layer ds.GetLayer(0)# 获取图层,图层
2.获取字段属性
def Get_Data(layer):feature_count layer.GetFeatureCount()# 获取要素的数量feature layer.GetFeature(1)# 获取shp中第一个要素field_count layer.GetLayerDefn().GetFieldCount()# 获取要素的字段数field_data feature.GetField(1)# 获取字段“1”的值
3.获取字段的值
def Get_field(layer):for feature in layer:# feature的意义就是GIS中泛指的要素一个shp中包含多少个面field_data feature.GetField(1)# 获取字段“1”的值print(field_data)# 获取要素的字段值
4.获取图层地理范围
def Get_Spatial(layer):left, right, down, up layer.GetExtent()print(left, right, down, up)# 获取图层的地理范围
5.获取某一要素的地理范围
def Get_feature_Spatial(layer):feature layer.GetFeature(0)geom feature.GetGeometryRef()# 获取该要素的地理空间范围left, right, down, up geom.GetEnvelope()# 获取四个角点的坐标
三、修改矢量数据
1.修改要素的字段值
def Repair_field(layer):feature layer.GetFeature(1)# 获取shp中第一个要素feature.SetField(Id, 3)# 将当前要素的Id字段值改为3layer.SetFeature(feature)# 修改要素的字段值
四、创建新矢量
1.创建新字段
def Create_field(layer):# layer.CreateField(ogr.FieldDefn(name, ogr.OFTString)) # ogr.OFTString表示字符型new_field ogr.FieldDefn(value, ogr.OFTReal) # 给目标shp文件添加一个字段new_field.SetWidth(32)new_field.SetPrecision(16)layer.CreateField(new_field)# 创建新的字段
2.创建新的矢量文件shp
def Create_shp(shp):target_proj osr.SpatialReference()# 初始化osr.SpatialReference对象以形成一个合法的坐标系统target_proj.ImportFromEPSG(4326)driver ogr.GetDriverByName(ESRI Shapefile)polygon driver.CreateDataSource(shp) # 创建数据资源layer_polygon polygon.CreateLayer(Shp, srstarget_proj, geom_typeogr.wkbMultiPolygon)# 创建图层定义多面new_field ogr.FieldDefn(value, ogr.OFTReal)layer_polygon.CreateField(new_field)# 给目标shp文件添加一个字段layer_defn layer_polygon.GetLayerDefn()# 定义图层feature ogr.Feature(layer_defn)# 创建要素feature.SetField(value, 5)# 给该要素的value字段定义为5geom ogr.CreateGeometryFromWkt(POLYGON ((0 0,20 0,10 15,0 0)))# 定义一个空间图形feature.SetGeometry(geom)# 将图形赋值到要素上layer_polygon.CreateFeature(feature)# 创建该要素写入layer_polygon None
五、删除矢量数据
1.删除字段
def Delete_field(layer):field_name 2field_count layer.GetLayerDefn().GetFieldCount()# 获取要素的字段数for i in range(field_count):# 循环该要素的所有字段if field_name layer.GetLayerDefn().GetFieldDefn(i).GetName():# 判断字段名是否等于输入的字段名如果是返回它的索引值layer.DeleteField(i)# 删除索引为i的字段# 删除字段
2.删除要素
def Delete_feature(layer):feature_count layer.GetFeatureCount()# 获取要素的数量for i in range(0, feature_count):if layer.GetFeature(i).GetField(1) 0:layer.DeleteFeature(i)for feat in layer:if feat.GetField(Area) 20 or feat.GetField(Area) 3000:layer.DeleteFeature(feat.GetFID())# 删除要素 由于我代码中已给详细的解释所以就不单独加以文字说明了。本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分借鉴了前人以及官网的教程如有侵权请联系作者删除大家有问题可以随时留言交流博主会及时回复。