ArcGIS Pro SDK 002 对数据文件的读取和操作
做系统开发或者数据处理的时候,我一般还是喜欢使用文件数据源,例如矢量用.shp文件存储,栅格数据用.tif或者.img文件存储。ArcGIS Pro SDK中对数据源操作的API和ArcObjects SDK中差别还是比较大的。
1、打开数据文件
打开文件数据的步骤如下。
(1)使用Shape文件所在的目录,创建FileSystemConnectionPath对象,该对象是文件系统连接路径对象。
(2)使用FileSystemConnectionPath对象创建FileSystemDatastore,该对象是文件系统数据存储器对象。
(3)使用FileSystemDatastore,打开指定数据名称的数据源。打开数据源函数是一个模板函数,如果是Shape文件,则返回FeatureClass,如果是栅格数据,返回RasterDataset,如果是dbf数据,则返回Table。
代码如下。
string myFileName = System.IO.Path.GetFileName(pShapeFile);
var myFileSystemConnectionPath = new FileSystemConnectionPath(new Uri(myFolderPath), FileSystemDatastoreType.Shapefile); FileSystemDatastore myFileSystemDatastore = null;
FeatureClass myFeatureClass = null;
try
{
await Task.Run(() =>
{
myFileSystemDatastore = new FileSystemDatastore(myFileSystemConnectionPath);
myFeatureClass = myFileSystemDatastore.OpenDataset<FeatureClass>(myFileName);
});
myFileSystemDatastore?.Dispose();
}
catch (Exception ex)
{
myFileSystemDatastore?.Dispose();
throw new ArgumentException("打开文件失败。" + pShapeFile + "," + ex.Message);
}
return myFeatureClass;
需要注意的是,ArcGIS Pro SDK中,很多函数都是异步函数,需要添加到await Task.Run(() =>{}里面执行。开发的时候,把鼠标放到函数上,会有提示。如下图所示。

如果要打开栅格数据,代码思路是一样的,只是在初始化FileSystemConnectionPath的时候,传入Raster,知识在OpenDataset的时候,传入RasterDataset即可。代码如下所示。
string myFileName = System.IO.Path.GetFileName(pRasterFile);
var myFileSystemConnectionPath = new FileSystemConnectionPath(new Uri(myFolderPath), FileSystemDatastoreType.Raster);
FileSystemDatastore myFileSystemDatastore = null;
RasterDataset myRasterDataset = null;
try
{
await Task.Run(() =>
{
myFileSystemDatastore = new FileSystemDatastore(myFileSystemConnectionPath);
myRasterDataset = myFileSystemDatastore.OpenDataset<RasterDataset>(myFileName);
});
myFileSystemDatastore?.Dispose();
}
catch (Exception ex)
{
myFileSystemDatastore?.Dispose();
throw new ArgumentException("打开文件失败。" + pRasterFile + "," + ex.Message);
}
return myRasterDataset;
打开dbf的时候,FileSystemConnectionPath还是使用FileSystemDatastoreType.Shapefile,在Open的时候,返回Table。代码如下所示。
myTable = myFileSystemDatastore.OpenDataset<Table>(myFileName);
2、读取FeatureClass
得到FeatureClass后,我们可以遍历里面要要素,读取其中的信息。方法和ArcObjects SDK中的流程类似,也是使用了Search方法,返回Cursor变量。具体使用方法如下面代码所示。
await Task.Run(() =>
{
var myDefinition = myFeatureClass.GetDefinition();
this._SpatialReference = myDefinition.GetSpatialReference();
int my_gridcode_FileIndex = myDefinition.FindField("gridcode");
RowCursor myRowCursor = myFeatureClass.Search(null, true);
while (myRowCursor.MoveNext())
{
Feature myFeature = myRowCursor.Current as Feature;
DraExtBasin myNewBasin = new DraExtBasin
{
FID = myFeature.GetObjectID(),
SnapPourPointFID = Convert.ToInt64(myFeature.GetOriginalValue(my_gridcode_FileIndex)),
Polygon = PolygonBuilderEx.CreatePolygon(myFeature.GetShape() as Polygon)
};
myFeature.Dispose();
myBasinList.Add(myNewBasin);
}
myRowCursor.Dispose();
});
我们通过FeatureClass.GetDefinition()函数,得到FeatureClass的一些定义信息,通过定义信息,可以获取数据的空间参考、字段等,这点和ArcObjects SDK中差别还是挺大的。
3、添加和编辑Feature
添加Feature和ArcObjects SDK类似,也是使用RowBuffer进行添加,代码如下所示。
await Task.Run(() =>
{
var myDefinition = myFeatureClass.GetDefinition();
int my_P_FID_FI = myDefinition.FindField("P_FID");
int my_D_Length_FI = myDefinition.FindField("D_Length");
int my_P_Dis_FI = myDefinition.FindField("P_Dis");
RowBuffer myRowBuffer = myFeatureClass.CreateRowBuffer();
foreach (DraExtFullBasin myFullBasin in pFullBasinList)
{
double myDLength = 0;
double myPDis = 0;
if (myMainDrainageD.ContainsKey(myFullBasin.SnapPourPointFID))
{
var myDraExtMainDrainage = myMainDrainageD[myFullBasin.SnapPourPointFID];
myDLength = myDraExtMainDrainage.DrainageLength;
myPDis = myDraExtMainDrainage.SnapPourPointDistance;
}
myRowBuffer[1] = myFullBasin.Polygon;
myRowBuffer[my_P_FID_FI] = myFullBasin.SnapPourPointFID;
myRowBuffer[my_D_Length_FI] = myDLength;
myRowBuffer[my_P_Dis_FI] = myPDis;
myFeatureClass.CreateRow(myRowBuffer);
}
myRowBuffer.Dispose();
});
编辑的话,就是获取Row或者Feature之后,修改信息,最后调用对象的Store()函数即可。
ArcGIS Pro SDK 002 对数据文件的读取和操作的更多相关文章
- ArcGIS Pro Add-In插件开发[ArcGIS Pro SDK for .NET]
本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5 开发和撰写. 目录 开发环境配置 获取ArcGIS Pro 安装VS2019 ...
- db file sequential read (数据文件顺序读取)
转载:http://www.dbtan.com/2010/04/db-file-sequential-read.html db file sequential read (数据文件顺序读取): db ...
- Tableau学习Step2一数据文件的读取与统计图、表的概述
Tableau学习Step2一数据文件的读取与统计图.表的概述 本文首发于博客冰山一树Sankey,去博客浏览效果更好. 一. 前言 本教程通过一个案例从浅到深来学习Tableau知识 案例概述: 二 ...
- Python文件的读取写入操作
一.打开文件.关闭文件操作 想要读取文件或是写入文件,第一步便是打开文件,最后一步便是关闭文件.这里介绍两种打开(关闭)文件的方式: 1.open()方法 f=open(file_name[,acce ...
- ArcGIS Pro 简明教程(2)基础操作和简单制图
ArcGIS Pro 简明教程(2)基础操作和简单制图 By 李远祥 本章主要介绍ArcGIS Pro如何加载数据并进行简单的地图制作,以基本的操作为主. 上一章节介绍过,ArcGIS Pro是可以直 ...
- ArcGIS Pro 二次开发
本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5.22081 开发和撰写. 目录 开发环境配置 获取ArcGIS Pro 安装V ...
- 模拟主库创建数据文件,dg备库空间不足时问题处理
本篇文档测试目的: 模拟实际环境中,主库对表空间添加数据文件,备库空间不足,最终导致MRP进程自动断开,处理方式. 1.问题环境模拟 1)正常情况下的dg 主库创建数据文件,备库接受日志,自动创建表空 ...
- Oracle数据文件和临时文件的管理
一.数据文件概述在Oracle数据库中,SYSTEM和SYSAUX表空间至少需要包含一个数据文件,此外还将包含多个其他表空间及与其相关的数据文件和临时文件.Oracle的数据文件和临时文件是操作系统文 ...
- ORACLE体系结构一 (物理结构)- 数据文件、日志文件、控制文件和参数文件
一.物理结构Oracle物理结构包含了数据文件.日志文件.控制文件和参数文件 1.数据文件每一个ORACLE数据库有一个或多个物理的数据文件(data file).一个数据库的数据文件包含全部数据库数 ...
- 数据驱动 - 不同数据源的读取方式(ddt、数据文件、mysql)
1. ddt 装饰器传参 2. ddt 读取数据文件 3. 读取 txt 文件 4. 读取 excel 文件 5. 连接 mysql 1. ddt 装饰器传参 python 的数据驱动模块 ddt 安 ...
随机推荐
- Navicat mysql创建数据库、用户、授权、连接
一.数据库的创建 调出命令窗口并创建数据库: create database itcast_oa default character set utf8;----创建数据库 二.数案件用户 create ...
- 数电第六周周结_by_yc
时序逻辑电路的设计要点: ①只有时钟信号和复位信号可以放在敏感列表里: ②使用非阻塞赋值,即使用"<="; ③无需对所有分支进行描述,对于未描述的分支,变量将保持 ...
- Mybatis04:延迟加载、一二级缓存、注解开发
今日内容 mybatis中的延迟加载 延迟加载的概念 立即加载的概念 如果实现延迟加载 Mybatis中的缓存 什么是缓存 为什么使用缓存 什么数据可以使用缓存,什么样的数据不能使用缓存 Mybati ...
- go-carbon 1.5.3 版本发布, 修复已知 bug 和新增俄罗斯语翻译文件
carbon 是一个轻量级.语义化.对开发者友好的golang时间处理库,支持链式调用. 目前已被 awesome-go 收录,如果您觉得不错,请给个star吧 github.com/golang-m ...
- IOS移动端 -webkit-overflow-scrollin属性造成的问题
-webkit-overflow-scrolling带来的相关问题. -webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效果. 其具有两个属性: auto: ...
- 痞子衡嵌入式:存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是存储器大厂Micron的NOR Flash芯片特殊丝印设计(FBGA代码). 痞子衡之前写过一篇文章 <J-Flash在Micron ...
- Python中open()文件操作/OS目录操作
File对象测试数据的读写与操作 #def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, ...
- 安装node.js与webpack创建vue2项目
本文为博主原创,转载请注明出处: 1.安装node.js 下载地址:http://nodejs.cn/download/ (可查看历史版本) node.js 中文网:http://nodejs.cn/ ...
- [图像处理] YUV图像处理入门5
12 yuv420转换为rgb(opencv mat) yuv格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式,而且自己造轮子工作量太大.因此通常都会将yuv转换为rgb, ...
- python之路 57 linux 基础 命令与执行效果
虚拟环境的安装与配置 1.VMware软件安装 这里有一个15版本和一个16版本的 链接:https://pan.baidu.com/s/1vkNxxQ6NS9q7XYJ6qiVMaQ 提取码:t3l ...