当前位置: 首页 > news >正文

使用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.lryc.cn/news/584818.html

相关文章:

  • 通过ETL工具,高效完成达梦数据库数据同步至数仓Oracle的具体实现
  • Primer Premier 5分子生物学引物设计软件 PCR引物设计工具
  • Swift 解 LeetCode 324:一步步实现摆动排序 II,掌握数组重排的节奏感
  • 智能文本抽取在合同管理实战应用
  • P1484 种树,特殊情形下的 WQS 二分转化。
  • 【9】PostgreSQL 之 vacuum 死元组清理
  • 从语音识别到智能助手:Voice Agent 的技术进化与交互变革丨Voice Agent 学习笔记
  • 如何将 iPhone 文件传到 Mac?
  • 模型训练的常用方法及llama-factory支持的数据训练格式
  • 微服务引擎 MSE 及云原生 API 网关 2025 年 6 月产品动态
  • 力扣热门算法题 204.计数质数,207.课程表,213.打家劫舍II
  • uniapp语音播报天气预报微信小程序
  • Axios之核心语法详解
  • CSS3的核心功能介绍及实战使用示例
  • string模拟实现
  • 【Linux】C++项目分层架构:核心三层与关键辅助
  • iOS 数组如何设计线程安全
  • 速学 RocketMQ
  • 较为深入的了解c++中的string类(2)
  • Vue集成MarkDown
  • 在 React Three Fiber 中实现 3D 模型点击扩散波效果
  • CSS和CSS3区别对比
  • 【深度学习新浪潮】什么是AI个性化医疗?
  • 黑马点评系列问题之P55优惠券秒杀 快捷键问题 Ctrl+D显示不出来老师给的界面
  • 【数据结构】8. 二叉树
  • FastAPI + SQLAlchemy (异步版)连接数据库时,对数据进行加密
  • React Three Fiber 实现 3D 模型点击高亮交互的核心技巧
  • Gin 中常见参数解析方法
  • 用TensorFlow进行逻辑回归(二)
  • 闲庭信步使用图像验证平台加速FPGA的开发:第九课——图像插值的FPGA实现