使用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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 网络爬虫的工作过程可…