使用gdal讀取shp及filegdb文件

一、使用qgis開源工具構建兩個文件,分別是filegdb和shp,每個文件包含一個圖層,圖層內容只包含一個字段:id,有兩個數據行,圖層幾何為多邊形,圖層都是如下的效果。

在這里插入圖片描述

二、使用rust讀取上述文件

  • rust依賴
[dependencies]
gdal = "0.17.1"
  • 讀取shp
let source = "E:/a.shp";
let data = gdal::Dataset::open(source).unwrap();
let layer = data.layer(0).unwrap();
println!("layer_count:{}",layer.feature_count());
let start = 0;
let end = layer.feature_count();
for i in start..end{match layer.feature(i){Some(feature) => {let filed_id= &feature.field_as_integer_by_name("id").unwrap();println!("++數據索引:{}++字段內容:{:?}++幾何:{:?}",i,filed_id,feature.geometry());},None => {println!("++{}++None",i);},};
}

讀取結果:

layer_count:2
++數據索引:0++字段內容:Some(1)++幾何:Some(POLYGON ((-0.518043358996392 0.521232057117657,4.73046834618934 0.672511281341224,5.00976830389323 -2.57346955999557,-0.808980814937951 -2.73621961134104,-0.518043358996392 0.521232057117657),(0.925006422473741 -0.235197478165903,0.622431468294519 -1.95716715064606,3.67145600656206 -1.66637545113517,3.63654351184907 -0.188647804914247,0.925006422473741 -0.235197478165903),(-0.180555910104184 -0.561039123478221,0.215119029976337 0.044101814636796,-0.192193408341846 -0.060635653828846,-0.180555910104184 -0.561039123478221),(-0.285293394243145 -1.67800799341694,-0.366755881906781 -2.29442185095562,0.57588147534387 -2.34093376312268,-0.285293394243145 -1.67800799341694),(4.34643090434648 -1.49187934036916,3.69473100303738 -2.35256150119173,4.43953089024778 -2.35256150119173,4.61409336381271 -1.86411893486817,4.742105844427 -1.44534463965808,4.47444338496076 -1.22429231197673,4.48608088319843 -0.700680602759594,4.71883084795167 -0.700680602759594,4.1835059290192 -0.654133864500525,4.34643090434648 -1.49187934036916)))
++數據索引:1++字段內容:Some(2)++幾何:Some(POLYGON ((0.749541894170621 -3.51691666514472,3.61879402562659 -5.06406242230235,0.81986670131415 -5.02186753801624,0.749541894170621 -3.51691666514472)))

從結果看到,讀取shp文件的數據行索引是從 0 開始的

  • 讀取filegdb
let source = "E:/a_gdb.gdb";
let data = Dataset::open(source).unwrap();
let mut layer = data.layer_by_name("a").unwrap();
println!("layer_count:{}",layer.feature_count());let start = 1;
let end = layer.feature_count()+1;
for i in start..end{match layer.feature(i){Some(feature) => {let filed_id= &feature.field_as_integer_by_name("id").unwrap();println!("++數據索引:{}++字段內容:{:?}++幾何:{:?}",i,filed_id,feature.geometry());},None => {println!("++{}++None",i);},};
}

讀取結果:

layer_count:2
++數據索引:1++字段內容:Some(1)++幾何:Some(MULTIPOLYGON (((-0.518043358999989 0.52123205700002,4.73046834600001 0.672511281000027,5.00976830399998 -2.57346955999998,-0.808980814999984 -2.73621961100002,-0.518043358999989 0.52123205700002),(0.925006422000024 -0.235197477999975,0.622431468 -1.95716715100002,3.67145600700002 -1.66637545100002,3.636543512 -0.188647805000016,0.925006422000024 -0.235197477999975),(-0.18055591000001 -0.561039123,0.215119029999983 0.044101814999976,-0.19219340799998 -0.060635654,-0.18055591000001 -0.561039123),(-0.285293394 -1.67800799299999,-0.366755882 -2.29442185099998,0.575881475000017
-2.34093376300001,-0.285293394 -1.67800799299999),(4.34643090399999 -1.49187934000003,3.69473100300002 -2.35256150100003,4.43953089000001 -2.35256150100003,4.61409336399998 -1.86411893500002,4.74210584399998 -1.44534463999997,4.47444338499997 -1.22429231199999,4.486080883 -0.700680603000023,4.71883084799998 -0.700680603000023,4.18350592899998 -0.654133865,4.34643090399999
-1.49187934000003))))
++數據索引:2++字段內容:Some(2)++幾何:Some(MULTIPOLYGON (((0.749541894 -3.516916665,3.61879402599999 -5.06406242200001,0.819866701000024 -5.02186753799998,0.749541894 -3.516916665))))

從讀取結果中看出,filegdb的數據行索引是從 1 開始的

三、總結

讀取這兩種不同的數據源,方法總體上是差不多的,需要在遍歷數據的時候,注意數據行起始索引的區別。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914049.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914049.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914049.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從0開始學習R語言--Day44--LR檢驗

之前我們提到用LM檢驗的方式,來判斷數據在空間上是否受到鄰近數據及其殘差的影響,但是LM檢驗是采用直接計算的方式,只關注了數據的殘差平方和,沒有數據關于依賴項的考慮,容易被結果誤導。而LR檢驗雖然在結果上有時候跟…

openEuler 24.03 (LTS-SP1) 下私有鏡像倉庫部署與自簽 SSL 全流程目標

目錄 openEuler 24.03 (LTS-SP1) 下私有鏡像倉庫部署與自簽 SSL 全流程 1 創建根 CA 與服務器證書(修正版:SAN 寫法兼容所有 OpenSSL) 2 配置 Docker Compose 文件 3 客戶端節點信任 CA 3.1 Docker 3.2 containerd 4 推送 / 拉取測試 …

mysql的LIMIT 用法

常見用法1. 限制返回行數-- 返回前5條記錄 SELECT * FROM products LIMIT 5;2. 分頁查詢(帶偏移量)-- 跳過前10條,返回接下來的5條記錄(第11-15條) SELECT * FROM products LIMIT 10, 5;-- MySQL 8.0 也支持這種語法 S…

maven 發布到中央倉庫之持續集成-03

maven 系列 maven-01-發布到中央倉庫概覽 maven-02-發布到中央倉庫常用腳本 maven-03-發布到中央倉庫之持續集成 maven-04-發布到中央倉庫之 Ignore Licence maven-05-maven 配置進階學習 maven-06-maven 中央倉庫 OSSRH 停止服務,Central Publishing Portal …

(補充)RS422

RS4221. 基本定義與定位 官方名稱: EIA/TIA-422(電子工業協會/電信工業協會標準422)。類型: 一種定義了電氣特性的 平衡式差分 串行通信標準。目的: 克服 RS-232 在傳輸距離、速率和抗干擾能力上的嚴重局限性。核心思想…

自建ELK vs 云商日志服務:成本對比分析

在當今數據驅動的時代,日志管理已成為企業IT基礎設施中不可或缺的一部分。面對日益增長的日志數據,許多團隊都在糾結:是自建ELK(Elasticsearch、Logstash、Kibana)堆棧,還是直接使用云服務商提供的日志服務…

Eigen 幾何模塊深拆:Isometry3d vs Affine3d + 變換矩陣本質詳解

文章目錄0 寫在前面1 數學背景對比2 Eigen 實現差異3 Isometry3d 是不是 4 4 矩陣?4 核心 API 速查5 實戰示例5.1 SLAM 位姿鏈:相機點 → 世界點5.2 體素濾波:各向異性縮放(X/Y → 5 cm,Z → 10 cm)5.3 把…

python的病例管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具:Navicat/SQLyog等都可以 隨著醫療…

博客系統開發全流程解析(前端+后端+數據庫)與 AI 協作初體驗

一、前言:為什么選擇博客系統作為全棧入門? 對于初入編程世界的開發者來說,“全棧” 似乎是一個龐大而遙遠的概念。前端、后端、數據庫、部署運維… 知識體系繁雜,令人望而生畏。選擇一個目標明確、功能完整且貼近實際應用的項目…

Xavier公式的原理

數學原理: (1) 前向傳播的方差一致性 假設輸入 x 的均值為 0,方差為 σx2σ_x^2σx2?,權重 W的均值為 0,方差為 σW2σ_W^2σW2?,則輸出 zWxzWxzWx的方差為: Var(z)nin?Var(W)?Var(x) Var(z)n_{in}?Va…

pytorch學習筆記(二)-- pytorch模型開發步驟詳解

簡介: 本章主要是針對Pytorch神經網絡的開發步驟做一個詳細的總結,對每一步的前世今生做一個了解,下面先列一下開發需要的步驟有哪些: 模型構建,主要是前向傳遞函數的確認確認損失函數以及學習步頻(learni…

consul 的安裝與服務發現

1. helm 安裝 consul 到 k8s 安裝放在這里了:https://github.com/lianan2/installation/tree/master/consul-helm consul 的常用命令: # 查看集群狀態 kubectl -n consul exec -it consul-server-0 -- consul operator raft list-peers kubectl -n con…

ros topic和service的使用

在做ldiar slam的時候&#xff0c;最常用的當屬topic&#xff0c;偶爾也會用一下service&#xff0c;action則很少使用。現在一塊來看一下topic的使用。一、topic的使用topic的消息訂閱和發布#include<ros/ros.h> #include<rosbag/bag.h> #include<rosbag/view.…

【TCP/IP】18. 因特網服務質量

18. 因特網服務質量18. 因特網服務質量18.1 服務質量&#xff08;QoS&#xff09;18.2 實時傳輸協議&#xff08;RTP&#xff09;18.3 實時傳輸控制協議&#xff08;RTCP&#xff09;18.4 集成業務&#xff08;IntServ&#xff09;18.5 區分業務&#xff08;DiffServ&#xff0…

數據集相關類代碼回顧理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter

【PyTorch】圖像多分類項目 目錄 StratifiedShuffleSplit transforms.ToTensor Counter StratifiedShuffleSplit sss StratifiedShuffleSplit(n_splits1, test_size0.2, random_state0) 創建StratifiedShuffleSplit對象&#xff0c;用于將數據集劃分為訓練集和測試集。 …

【環境配置】KAG - Windows 安裝部署

前言 本博客將介紹如何在 Windows 系統上 部署運行 KAG 項目&#xff0c;將使用 WSL 和 Docker 和 Vscode 幫助我們之后利用 KAG 開發個人知識庫問答項目。 KAG&#xff08;Knowledge-Augmented Generation&#xff09;知識增強生成系統 是一個融合知識圖譜與大語言模型能力的…

《探索電腦麥克風聲音采集多窗口實時可視化技術》

引言在當今數字化信息飛速發展的時代&#xff0c;聲音作為一種重要的信息載體&#xff0c;其處理和分析技術日益受到廣泛關注。聲音可視化技術&#xff0c;作為聲音處理領域的關鍵技術之一&#xff0c;具有極為重要的價值。它能夠將抽象的聲音信號轉化為直觀的視覺圖像&#xf…

加工進化論:SPL 一鍵加速日志轉指標

作者&#xff1a;勞貴泓&#xff08;泓逸&#xff09; 1. 背景 日志服務的 SPL&#xff08;Search Processing Language&#xff09;自推出以來&#xff0c;憑借其強大的數據處理能力&#xff0c;已經成為眾多開發者和企業實現高效數據分析的首選工具。隨著業務場景的不斷拓展…

Web 應用防火墻:守護應用安全的核心屏障

當你在調試 Web 應用時&#xff0c;是否遇到過這樣的情況&#xff1a;剛修復的 XSS 漏洞又被繞過&#xff0c;數據庫日志里突然出現詭異的 SQL 語句&#xff0c;或者用戶反饋登錄后信息被篡改&#xff1f;這些問題的背后&#xff0c;往往是 Web 應用面臨的持續安全威脅。據 OWA…

Python 網絡爬蟲的基本流程及 robots 協議詳解

數據驅動的時代,網絡爬蟲作為高效獲取互聯網信息的工具,其規范化開發離不開對基本流程的掌握和對 robots 協議的遵守。本文將系統梳理 Python 網絡爬蟲的核心流程,并深入解讀 robots 協議的重要性及實踐規范。 一、Python 網絡爬蟲的基本流程 Python 網絡爬蟲的工作過程可…