AE开发中对GDB以及shapefile的读取、对FeatureClass的相关操作
读取gdb方法
private void btn_Click(object sender, EventArgs e)
{
FolderBrowserDialog dlg = new FolderBrowserDialog();
dlg.Description = "打开GDB文件夹";
if (DialogResult.OK == dlg.ShowDialog())
{
if (Directory.Exists(dlg.SelectedPath))
{
if(dlg.SelectedPath.ToUpper().Contains(".GDB"))
{
GDBTextBox.Text = dlg.SelectedPath;
}
}
}
}
#region 直接获取FeatureClass
string filePath = GDBTextBox.Text;
FileGDBWorkspaceFactoryClass fac=new FileGDBWorkspaceFactoryClass();
IFeatureWorkspace space = (IFeatureWorkspace)fac.OpenFromFile(filePath, 0);
IFeatureClass pPointFClass = space.OpenFeatureClass("zhongxindian"); //获取FeatureClass
#endregion
#region 添加到comboBox里面、获取FeatureClass
IWorkspaceFactory m_pWorkspaceFactory = new FileGDBWorkspaceFactoryClass();
IWorkspace pWorkspace = m_pWorkspaceFactory.OpenFromFile(GDBTextBox.Text, 0);
IFeatureWorkspace m_pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
IEnumDatasetName FeatureEnumDatasetName = pWorkspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
if (FeatureEnumDatasetName == null) return;
FeatureEnumDatasetName.Reset();
IDatasetName pDatasetName = FeatureEnumDatasetName.Next();
while (pDatasetName != null)
{
tcCombox.Items.Add(pDatasetName.Name);//添加到comboBox里面
pDatasetName = FeatureEnumDatasetName.Next();
}
IFeatureClass m_pFeatureClass2=null;
private void tcCombox_SelectedIndexChanged(object sender, EventArgs e)
{
m_pFeatureClass2 = m_pFeatureWorkspace.OpenFeatureClass(tcCombox.Text);//comboBox里选择图层,获取FeatureClass
}
#endregion
#region 遍历GDB
IWorkspace pCarWorkspace = m_pWorkspaceFactory.OpenFromFile(GDBTextBox.Text, 0);
IEnumDataset FeatureEnumDataset = pCarWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass);
if (FeatureEnumDataset == null) return;
FeatureEnumDataset.Reset();
IDataset pDataset = FeatureEnumDataset.Next();
while (pDataset != null)
{
IFeatureClass fc = pDataset as IFeatureClass;//获取FeatureClass
//对FeatureClass的操作
//比如给FeatureClass添加字段、代码如下
if (pPolygonFClass.Fields.FindField("字段") > -1) return;//如果存在字段
IClass pTable = pPolygonFClass as IClass;
IFieldEdit pFieldEdit = new FieldClass();
pFieldEdit.Name_2 = "字段";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
pTable.AddField((IField)pFieldEdit);
int countIndex = pPolygonFClass.Fields.FindField("字段");//获取字段索引
pDataset = FeatureEnumDataset.Next();
}
#endregion
#region 遍历FeatureClass
IFeatureCursor Cur = fc.Search(null, false);//null可替换为QueryFilter
IFeature pFeature = Cur.NextFeature();
while (pFeature != null)
{
//对Feature进行操作
pFeature = Cur.NextFeature();
}
读取shapefile
private void btn_Click(object sender, EventArgs e)
{
OpenFileDialog fileDlg = new OpenFileDialog();
fileDlg.Filter = "Shape File | *.shp";
fileDlg.Multiselect = false;
if (fileDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
try
{
IWorkspaceFactory pWorkSpaceFactory = new ShapefileWorkspaceFactory();
IWorkspace pWorkSpace = pWorkSpaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(fileDlg.FileName), 0);
IFeatureWorkspace pFeatureWorkspace = pWorkSpace as IFeatureWorkspace;
IFeatureClass layPolygon = pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(fileDlg.FileName));//获取FeatureClass
//_rowCount = (layPolygon as ITable).RowCount(null);//获取FeatureClass数量
shapefileTextBox.Text = fileDlg.FileName;//在TextBox中显示
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
}
AE开发中对GDB以及shapefile的读取、对FeatureClass的相关操作的更多相关文章
- 【转】.NET+AE开发中常见几种非托管对象的释放
尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 今天在开发时遇到一个问题:" 未处理 System.AccessViolationException Message="尝试 ...
- AE开发中栅格图层实现分级渲染
GP工具IDW执行后,生成的栅格图层是黑白二色,需要手动进行分级渲染,似乎不是所有栅格图层都可以进行分级渲染,注意异常处理.注意ARCMAP中是有颜色的,无需自己处理. IRasterClassify ...
- AE开发中关于 “无法嵌入互操作类型.........请改用适用的接口”问题的解决方法
最近开始使用VS2010,在引用COM组件的时候,出现了“无法嵌入互操作类型……,请改用适用的接口”的错误提示. 查阅资料,找到解决方案,记录如下: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌 ...
- AE开发中实现Control中的各种图形工具的方法(转)
Controls中的工具基本可以分为两类: 第一类:点击工具图标或按钮后,当前axMapControl的工具即为所点击的工具命令. 前面有Controls 后面有tool的工具都可以用同一类的代码实现 ...
- AE开发中添加EngineOrDesktop后仍然有错误
.AO是32位原生组件,一般认为不支持64位系统(道听途说),所以只能在32位环境下进行编译. 在配置管理器中,新建x86后问题解决了
- AE开发使用内存图层
AE开发中,有时需要从磁盘中读取一些文件信息如坐标点转为图层并进行分析,此过程并不需要坐标点入库之类的操作,就可以创建一个内存图层解决问题.创建内存图层需要用到InMemoryWorkspaceFac ...
- AE开发能否实现TOC Control里添加多个Data Frame
问题: 在ArcMap中,菜单Insert下Data Frame,可以在TOC中增加Data Frame,在MapControl或者PageLayoutControl下都可以正常显示多个Data Fr ...
- Web 开发中应用 HTML5 技术的10个实例教程
HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...
- iOS开发UI篇—iOS开发中三种简单的动画设置
iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...
随机推荐
- 【51Nod 1622】【算法马拉松 19C】集合对
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...
- 将DataTable中的数据导出到Excel
public static void Export(System.Data.DataTable dt,NPOI.HSSF.UserModel.HSSFWorkbook workbook,string ...
- Level Of Management Protocols - SNMP Tutorial
30.2 The Level Of Management Protocols Originally, many wide area networks included management proto ...
- How to use FTP
Forward from: https://www.server-world.info/en/note?os=CentOS_7&p=ftp&f=2 Thanks for your sh ...
- js获取当前坐标
<script type="text/javascript"> var position_option = {enableHighAccuracy: false,max ...
- SDL简介(网络汇总)
摄像头视频播放采用sdl,下面简单介绍下.不保证正确及网址永远有效.后面文章采用tao框架http://sourceforge.net/projects/taoframework/ SDL. ...
- C#汉字字母数字正则
http://novell.me/master-diary/2014-11-15/regular-express-csharp-example.html https://msdn.microsoft. ...
- 安装MariaDB和简单配置
1.安装MariaDB 安装命令 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start maria ...
- java ssh 框架下 利用junit4 spring-test进行单元测试
ssh框架下 由于bean实列 都交给spring 管理,要做单元测试就比较苦难,junit4 引入注解方便很多: 1. 加入依赖包 使用Spring的测试框架需要加入以下依赖包: JUnit 4 ...
- tyvj1097 mm不哭
背景 Bless all rp++.. 描述 在一个数轴上,有n个MM(绝非恐龙!)在哭泣(5555~一直哭). tcboy也在这个数轴上,并恰好看到了这一幕,由于每个MM哭都会让tcboy损失一定的 ...