【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.pswp.cn/news/162829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162829.shtml
英文地址,請注明出處:http://en.pswp.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-…