中工信融网站建设,网页前端框架,seo网络推广课程,网站的推广和宣传工作如何做今天有些不一样#xff0c;发这篇文章并不是项目需要。单纯的想到有这个功能没使用Python实现#xff0c;所以就去研究了一下#xff0c;第一时间就和大家分享。如何使用Python的osgeo库实现面矢量数据与线矢量数据的互相转换。 一、导入所需库
import os
from osgeo impor… 今天有些不一样发这篇文章并不是项目需要。单纯的想到有这个功能没使用Python实现所以就去研究了一下第一时间就和大家分享。如何使用Python的osgeo库实现面矢量数据与线矢量数据的互相转换。 一、导入所需库
import os
from osgeo import ogr
二、面转线 代码中注释都给了就不讲解了。入参就是输入面矢量的路径输出线矢量的路径。有一个小问题就是这段代码只适用于多个单面即一个面为一个要素的情况。如果多个面合并成一个面的也能转换不过要素会缺失
# -*- coding: utf-8 -*-Time 2023/11/21 11:02
Auth RS迷途小书童
File Vector Face To Line.py
IDE PyCharm
Purpose面矢量、线矢量相互转换
def face_to_line(int_path, out_path)::param int_path: 输入面矢量路径:param out_path: 输出线矢量路径:return: Nonedriver ogr.GetDriverByName(ESRI Shapefile)ds ogr.Open(int_path, 0)layer ds.GetLayer()# 打开面矢量数据并获取其图层src_proj layer.GetSpatialRef()# 获取其源坐标信息if os.path.exists(out_path):driver.DeleteDataSource(out_path)# 如果目标文件已存在则删除它ds_result driver.CreateDataSource(out_path)layer_result ds_result.CreateLayer(out_path, srssrc_proj, geom_typeogr.wkbLineString)defn_result layer_result.GetLayerDefn()# 创建目标资源、目标图层、目标要素for feature in layer:# 遍历面矢量中的所有要素geom feature.GetGeometryRef()# 获取该要素的地理空间范围line_geom geom.GetGeometryRef(0)# 获取线格式地理空间范围feature_result ogr.Feature(defn_result)# 创建一个新的要素。要素是Shapefile中的数据实体它们有几何形状和属性。feature_result.SetGeometry(line_geom)# 将图形赋值到要素上layer_result.CreateFeature(feature_result)# 创建该要素写入layer_result Noneif __name__ __main__:os.chdir(rG:\彭俊喜)face_to_line(1.shp, 样本_line.shp)# 参数输入面矢量输出线矢量
三、线转面 这里的逻辑就和面转线不一样不能够直接读取要素范围然后写入只能通过线的范围创建wkt格式的面数据再写入。同样入参为线矢量路径和面矢量路径。
# -*- coding: utf-8 -*-Time 2023/11/21 11:02
Auth RS迷途小书童
File Vector Face To Line.py
IDE PyCharm
Purpose面矢量、线矢量相互转换
def line_to_face(int_path, out_path)::param int_path: 输入线矢量路径:param out_path: 输出面矢量路径:return: Nonedriver ogr.GetDriverByName(ESRI Shapefile)ds ogr.Open(int_path, 0)layer ds.GetLayer()# 打开面矢量数据并获取其图层src_proj layer.GetSpatialRef()# 获取其源坐标信息if os.path.exists(out_path):driver.DeleteDataSource(out_path)# 如果目标文件已存在则删除它ds_result driver.CreateDataSource(out_path)layer_result ds_result.CreateLayer(out_path, srssrc_proj, geom_typeogr.wkbPolygon)# 创建一个数据资源格式为面矢量坐标系为src_projdefn_result layer_result.GetLayerDefn()# 创建目标资源、目标图层、目标要素for feature in layer:# 遍历面矢量中的所有要素geom feature.GetGeometryRef()# 获取该要素的地理空间范围feature_result ogr.Feature(defn_result)# 创建一个新的要素。要素是Shapefile中的数据实体它们有几何形状和属性。polygon ogr.CreateGeometryFromWkt(Polygon(%s) % str(geom)[str(geom).find(():])# print(Polygonstr(geom)[11:])feature_result.SetGeometry(polygon)# 将图形赋值到要素上layer_result.CreateFeature(feature_result)# 创建该要素写入layer_result Noneif __name__ __main__:os.chdir(rG:\彭俊喜)line_to_face(样本_line.shp, 123312.shp)# 参数输入线矢量输出面矢量四、总结 网上貌似还没有线转面的教程我应该算是首发了。当然我说的是使用osgeo库arcpy除外毕竟这玩意相当于ARCGIS一样太变态了。 本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分借鉴了前人以及官网的教程如有侵权请联系作者删除大家有问题可以随时留言交流博主会及时回复。