AE中加载个人数据库GDB方法探讨

下面对AE中加载个人数据库的方法做一个总结:

个人数据库是保存在Access中的数据库。其加载方式有两种:通过名字和通过属性加载(也许不只这两种,AE中实现同一功能可以有多种方式)。

A、通过设置属性加载个人数据库。

首先通过IPropertySet接口定义要连接数据库的一些相关属性,在个人数据库中为数据库的路径,例如:

IPropertySet  Propset = new PropertySetClass();

Propset.SetProperty("DATABASE",@"D:\test\Ao\data\sh\MapData.mdb" );

当定义完属性并设置属性后就可以进行打开数据库的操作了,在ArcEngine开发中存在IWorkspaceFactory、IFeatureWorkspace、IFeatureClass、IFeatureLayer等几个常用的用于打开和操作数据空间地物的接口。IWorkspaceFactory是一个用于创建和打开工作空间的接口,它是一个抽象的接口,我们在具体应用时要用对应的工作空间实例化它,如下:

IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass ();

如果我们打开的是SDE数据库就要用SdeWorkspaceFactoryClass实例化Fact。当我们完成了工作空间的实例化后就可以根据上边设置的属性打开对应的Access数据库了。打开方式如下:

IFeatureWorkspace Workspace = Fact.Open(Propset,0) as IFeatureWorkspace;

打开Access工作空间后接下来的事情是做什么了,很简单,找到对应的地物类,赋给相应的层,通过MapControl控件添加对应的层,然后刷新地图。以下为添加某一层的代码:

IFeatureClass Fcls = Workspace.OpenFeatureClass("District");

IFeatureLayer Fly = new FeatureLayerClass();

Fly.FeatureClass = Fcls;

MapCtr.Map.AddLayer (Fly);

MapCtr.ActiveView.Refresh();

其中District为地物类的名字,MapCtr为AE中MapControl的对象。上边的通过属性设置加载数据空间的方式还可以用于SDE数据库,在SDE数据库加载时会介绍。

以下为通过设置属性加载Access数据库的完整C#代码:

public void AddAccessDBByPro()

{

IPropertySet  Propset = new PropertySetClass();

Propset.SetProperty("DATABASE",@"D:\test\Ao\data\sh\MapData.mdb" );

IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass ();

IFeatureWorkspace Workspace = Fact.Open(Propset,0) as IFeatureWorkspace;

IFeatureClass Fcls = Workspace.OpenFeatureClass ("District");

IFeatureLayer Fly = new FeatureLayerClass();

Fly.FeatureClass = Fcls;

MapCtr.Map.AddLayer(Fly);

MapCtr.ActiveView.Refresh();

}

B、通过数据库名字加载个人数据库

在这我先把完整的代码写出来,让您先跟上边的代码做个对比。以下为完整的代码:

public void AddAccessDBByName()

{

IWorkspaceName  pWorkspaceName = new WorkspaceNameClass() ;

pWorkspaceName.WorkspaceFactoryProgID ="esriDataSourcesGDB.AccessWorkspaceFactory";

pWorkspaceName.PathName = @"D:\test\Ao\data\sh\MapData.mdb";

IName n = pWorkspaceName as IName ;

IFeatureWorkspace Workspace = n.Open() as IFeatureWorkspace;

IFeatureClass Fcls = Workspace.OpenFeatureClass ("District");

IFeatureLayer Fly = new FeatureLayerClass();

Fly.FeatureClass = Fcls;

MapCtr.Map.AddLayer (Fly);

MapCtr.ActiveView.Refresh();

}

细心的人已经注意到,打开Access工作空间后接下来的代码是一样的,都是找到对应的地物类,赋给相应的层,通过MapControl控件添加对应的层,然后刷新地图。现在讲解一下上边的代码,首先是创建一个个人数据库工作空间名,在指定工作空间名的ProgID,以确定打开的是什么类型的工作空间,例如在打开Access个人数据库时使用的是下边的代码:

IWorkspaceName  pWorkspaceName = new WorkspaceNameClass() ;

pWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesGDB.AccessWorkspaceFactory";

pWorkspaceName.PathName = @"D:\test\Ao\data\sh\MapData.mdb";

属性WorkspaceFactoryProgID可以确保工作空间是AccessWorkspaceFactory,即个人数据库,同时指定要打开数据库的路径。为了打开数据库,我们通过AE的类图可以发现打开工作空间必须使用IName接口(个人认为,不一定正确,可以思考一下看有其他办法没有),所以接着定义IName对象,并把工作空间名转换成IName类型并赋值给IName对象,然后通过IName对象的Open()方法打开相应的工作空间,代码如下:

IName n = pWorkspaceName as IName ;

IFeatureWorkspace Workspace = n.Open () as IFeatureWorkspace;

C.直接用路径访问数据库

Dim pWorkspaceFactory As IWorkspaceFactory
              Dim pSWorkspace As IWorkspace
  
              Set pWorkspaceFactory = New AccessWorkspaceFactory
              Set pWorkspace = pWorkspaceFactory.OpenFromFile("D:\data\redarrow.mdb", 0)

ITable pTable=(pworksapce as IfeatrurWorkspace).open

接下来的事情就是上边提到.

转载于:https://www.cnblogs.com/supersyg/archive/2007/06/06/773309.html

AE中加载个人数据库GDB方法探讨相关推荐

  1. 基于 GoogleMap 离线 API 源码在内网中加载卫星地图的方法

    1. 概述 我们之前为大家分享过在三维地球开源平台离线加载卫星影像的方法,主要包括基于桌面端的OsgEarth开源三维地球和基于Web端的Cesium开源三维地球等平台的局域网离线加载. 另外,也为大 ...

  2. ios加载本地html懒加载图片方案,IOS开发中加载大量网络图片优化方法

    IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着 ...

  3. 在ASP.NET MVC中加载部分视图的方法及差别

    在视图里有多种方法可以加载部分视图,包括Partial() .Action().RenderPartial().RenderAction().RenderPage()方法.下面说明一下这些方法的差别. ...

  4. div中加载其他网页的方法

    有两种这种需求: 第一种是加载自己站点的网页.那么可以用jquery的load函数. 类似: $("#div").load("me.jsp"); 第二种是家在其 ...

  5. 两种在CAD中加载在线卫星影像的方法

    概述 经常使用CAD的朋友应该会有这样的一个烦恼,就是当加载卫星图到CAD中进行绘图的时候,由于CAD本身的限制和电脑性能等原因,往往不能加载太大的地图图片到CAD内,这里给大家介绍两种在CAD内加载 ...

  6. web高德地图怎么加载离线地图_基于 QGIS 在内网中离线加载卫星地图的方法

    1. 概述 我们之前为大家分享过在三维地球开源平台离线加载卫星影像的方法,主要包括基于桌面端的OsgEarth开源三维地球和基于Web端的Cesium开源三维地球等平台的局域网离线影像加载. 另外,也 ...

  7. 基于 QGIS 在内网中离线加载卫星地图的方法

    1. 概述 我们之前为大家分享过在三维地球开源平台离线加载卫星影像的方法,主要包括基于桌面端的OsgEarth开源三维地球和基于Web端的Cesium开源三维地球等平台的局域网离线影像加载. 另外,也 ...

  8. excel2007无法加载mysql_Excel2007中进行无法安装加载项的解决方法

    最近在学数学模型,用规划求解来计算.以前用Excel XP,知道在工具中加载相关的宏,然后很顺利地就能求解.但是用Excel 2007就找不到北了,今天,学习啦小编就教大家在Excel2007中进行无 ...

  9. springmvc中获取request对象,加载biz(service)的方法

    获取request对象: 首先配置web.xml文件--> [html] view plaincopy <listener> <listener-class> org.s ...

最新文章

  1. Unity初步 基本拼图实现
  2. tensorflow gpu python3.5_Win10+Anaconda3下tensorflow-gpu环境配置
  3. 给初级拍摄者的十条好建议
  4. 815 计算机专业基础综合,2018年华东理工大学信息科学与工程学院815计算机专业基础综合之计算机操作系统考研基础五套测试题...
  5. 免疫优化算法 matlab,基于人工免疫克隆选择算法的调度优化MATLAB源码
  6. [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)
  7. leetcode题库221-- 最大正方形
  8. 响应头中content-type常用的类型有哪些?
  9. 基于 Electron 做视频会议的两种实现方式
  10. 擅长C(DAY 70)
  11. 计算机应用程序错误怎么办 6,WinXP电脑应用程序错误怎么办?
  12. 集成电路产业的芯片设计、芯片制造、封装测试
  13. 如何获取Android应用签名?
  14. 怎样设计访谈提纲_如何设计调查问卷与访谈提纲要点分析.ppt
  15. 从0到1教你画原型图
  16. vim 保存出错 E45: readonly option is set (add ! to override)
  17. 入门爬虫二三记(一):爬取酷狗音乐榜单Top500
  18. 三国史诗——三国官制(二)
  19. 拼字游戏 html5,拼字游戏攻略
  20. Ubuntu下tar命令使用详解 .tar解压、.tar压缩

热门文章

  1. 简易方法判断浏览器的类型和版本
  2. oracle的一些常见问题及处理
  3. 太大如何翻页固定表头_外行学 Python 爬虫 第六篇 动态翻页
  4. Spring Data Jpa使用@Query时 报错Validation failed for query for method public abstract
  5. android测距传感器,测距测量仪(专业测量软件)
  6. screw ---- 数据库转文档
  7. java中math的方法_Java Math所有方法
  8. python字典弱引用_python 自身遍历及弱引用的简单示例
  9. linux下mysql解压包安装
  10. SpringBoot注解验证参数