【PythonGIS】基于Python面矢量转换线矢量

        今天有些不一样,发这篇文章并不是项目需要。单纯的想到有这个功能没使用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: None"""driver = 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, srs=src_proj, geom_type=ogr.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(r'G:\彭俊喜')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: None"""driver = 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, srs=src_proj, geom_type=ogr.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("Polygon"+str(geom)[11:])feature_result.SetGeometry(polygon)# 将图形赋值到要素上layer_result.CreateFeature(feature_result)# 创建该要素,写入layer_result = Noneif __name__ == '__main__':os.chdir(r'G:\彭俊喜')line_to_face('样本_line.shp', '123312.shp')# 参数:输入线矢量,输出面矢量

四、总结

        网上貌似还没有线转面的教程,我应该算是首发了。当然我说的是使用osgeo库,arcpy除外,毕竟这玩意相当于ARCGIS一样太变态了。

        本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分借鉴了前人以及官网的教程,如有侵权请联系作者删除,大家有问题可以随时留言交流,博主会及时回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/162829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文速读《DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection》

概括主要内容 文章《DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection》提出了两种创新技术,以改善多模态3D检测模型的性能,通过更有效地融合相机和激光雷达传感器数据来提高对象检测的准确性,尤其是在行人检测方面…

自动化提交git

1.前要 这里只是讲解如何在Windows上创建自动化脚本/程序来达到自动pull、commit、push,减少冗余的仓库更新工作,避免在多平台下合作造成版本冲突等。 2.原理 使用Windows下默认的cmd/bat脚本编写代码。 只需要在网络上查询一些相关的语法&#xff0…

2023亚太杯数学建模C题思路 - 我国新能源电动汽车的发展趋势

1 赛题 问题C 我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源( 非常规汽车燃料指汽油、柴油以外的燃料),将先进技术进行汽车动力控制和驱动相结 合的汽车。新能源汽车主要包括四种类型&#x…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 6

1、明明买了一个扫地机器人,可以通过以下指令控制机器人运动: F:向前走 10 个单位长度 L:原地左转 90 度 R:原地右转 90 度 机器人初始方向向右,需要按顺序执行以下那条指令,才能打扫完下图中的道路 A、F-L-F-R-F-F-R-F-L-F B、F-R-F-L-F-F…

h5如何使用navigateBack回退到微信小程序页面并携带参数

前言 在h5中使用navigateBack回退到微信小程序页面很常见,但是有一种交互需要在回退之后的页面可以得到通知,拿到标识之后,进行某些操作,这样的话,由于微信官方并没有直接提供这样的api,就需要我们开动脑筋…

视频剪辑有妙招:批量置入封面,轻松提升视频效果

随着社交媒体的兴起,视频已经成为分享和交流的重要方式。无论是专业的内容创作者还是普通的社交媒体用户,都要在视频剪辑上下一番功夫,才能让视频更具吸引力。而一个吸引的封面往往能在一瞬间抓住眼球,提高点击率。还在因如何选择…

【SpringBoot】Redisson 分布式锁注解和 @Transactional 注解一起使用问题

一、前言 平时使用切面去加分布式锁,是先开启事务还是先尝试获得锁?这两者有啥区别? 业务中怎么控制切面的顺序?切面的顺序对事务的影响怎么避免? 下面程序分析: OverrideTransactionalpublic ReceiveH5…

uni-app - 弹出框

目录 1.基本介绍 2.原生uinapp 通过uni.showActionSheet实现 3.使用组件 Popup 弹出层 ③效果展示 1.基本介绍 弹出框让我们在需要时在屏幕底部弹出一个菜单,它通常用于在各种应用程序中进行选择操作。Uniapp为我们提供了基本的底部弹出框组件,但它也有…

OpenSearch开发环境安装Docker和Docker-Compose两种方式

文章目录 简介常用请求创建映射写入数据查询数据其他 安装Docker方式安装OpenSearch安装OpenSearchDashboard Docker-Compose方式Docker-Compose安装1.设置主机环境2.下载docker-compose.yml文件3.启动docker-compose4.验证 问题问题1:IPv4 forwarding is disabled.…

如何搭建Zblog网站并通过内网穿透将个人博客发布到公网

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…

Altium Designer学习笔记11

画一个LED的封装: 使用这个SMD5050的封装。 我们先看下这个芯片的功能说明: 5050贴片式发光二极管: XL-5050 是单线传输的三通道LED驱动控制芯片,采用的是单极性归零码协议。 数据再生模块的功能,自动将级联输出的数…

CSGO搬砖干货,全网最详细教学!

CSGO游戏搬砖全套操作流程及注意事项(第一课) 在电竞游戏中,CSGO(Counter-Strike: Global Offensive)被广大玩家誉为经典之作。然而,除了在游戏中展现个人实力和团队合作外,有些玩家还将CSGO作为…

Java之API(上)

前言: 这一次内容主要是围绕Java开发中的一些常用类,然后主要是去学习这些类里面的方法。 一、高级API: (1)介绍:API指的是应用程序编程接口,API可以让编程变得更加方便简单。Java也提供了大量API供程序开发者使用&…

如何使用Google My Business来提升您的内容和SEO?

如果您的企业有实体店,那么使用Google My Business(GMB)来改善您的本地SEO并增强您的在线形象至关重要。Google My Business (GMB) 是 Google 提供的补充工具,使企业能够控制其在 Google 搜索和地图上的数字…

大数据基础设施搭建 - Flume

文章目录 一、上传压缩包二、解压压缩包三、监控本地文件(file to kafka)3.1 编写配置文件3.2 自定义拦截器3.2.1 开发拦截器jar包(1)创建maven项目(2)开发拦截器类(3)开发pom文件&a…

【数字化转型方法论读书笔记】-数据中台角色解读

一千个读者,就有一千个哈姆雷特。同样,数据中台对于企业内部不同角色的价值也不同,下面分别从董事长、CEO、 CTO/CIO、IT 架构师、数据分析师这 5 个角色的视角详细解读数据中台。 1、董事长视角下的数据中台 在数字经济时代,企业…

RTT打印在分区跳转后无法打印问题

场景: RTT打印仅占用JLINK的带宽,比串口传输更快更简洁,同时RTT可以使用jscope对代码里面的变量实时绘图显示波形,而采用串口打印波形无法实时打印。同时可以保存原始数据到本地进行分析,RTT在各方面完胜串口。 问题描…

PTA-城市间紧急救援

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的…

采样概率 假设检验推导数组最大值的方法与可行性

当需要寻找大量数据中的最大值的时候,比如从 2G 个 float16 中寻找其中的最大值,是一件耗时的操作。 现计划通过小样本来发掘数据的规律,对最大值进行预测。 方案: step1,从2G个float16 中截取64段float16&#xff…

【Vue入门篇】基础篇—Vue指令,Vue生命周期

🎊专栏【JavaSE】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🍔Vue概述🎄快速入门🌺Vue指令⭐v-…