1、 数据加载问题:
任何系统都离不开数据的加载,下边就AE中几种常用的数据加载做一个列举。以便查阅:
1、加载个人数据库
个人数据库是保存在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;
接下来的事情就是上边提到。
2、加载SDE数据库
什么是SDE数据库?这个问题要详细地讲解将花费大量的时间,但我可以告诉你SDE数据数据库可以是任何关系数据库。ESRI公司为了使空间数据能保存在关系数据库中,并且能很好的查询相关的空间属性而开发的一个中间件,使用SDE能很好的将空间数据保存在关系数据库中。如Orcale SQL Server 等。SDE具体细节的了解请查找相关的资料,这里只介绍怎么连接SDE数据库。SDE数据库的联机分为直接连接和通过SDE连接。当服务器的性能比较好的时候可以采用SDE连接,否则采用直接连接,这样可以减轻服务器的任务。建议采用直接连接,其实,SDE连接方式和直接连接的方式只是一个属性参数设置的问题。跟个人数据库采用属性连接的方式一样,先定义一个属性对象,然后设置属性参数,接着定义一个工作空间并用SdeWorkspaceFactoryClass()实例化它,接着加在加载图层,至于加载图层的代码,与加载个人数据库中图层的方法一样,其实不只加载这两种数据类型,加载其他类型的数据时也是采用相同的方法加载图层,只是工作空间采用不同的实例而已,下边为完整的对吗”//”后的为注析:
public void AddSDELayer(bool ChkSdeLinkModle)
{
//定义一个属性
IPropertySet Propset = new PropertySetClass();
if (ChkSdeLinkModle==true) // 采用SDE连接
{
//设置数据库服务器名
Propset.SetProperty ("SERVER", "zhpzh");
//设置SDE的端口,这是安装时指定的,默认安装时"port:5151"
Propset.SetProperty ("INSTANCE", "port:5151");
//SDE的用户名
Propset.SetProperty ("USER", "sa");
//密码
Propset.SetProperty ("PASSWORD", "sa");
//设置数据库的名字,只有SQL Server Informix 数据库才需要设置
Propset.SetProperty ("DATABASE", "sde");
//SDE的版本,在这为默认版本
Propset.SetProperty ("VERSION", "SDE.DEFAULT");
}
else // 直接连接
{
//设置数据库服务器名,如果是本机可以用"sde:sqlserver:."
Propset.SetProperty ("INSTANCE", "sde:sqlserver:zhpzh");
//SDE的用户名
Propset.SetProperty ("USER", "sa");
//密码
Propset.SetProperty ("PASSWORD", "sa");
//设置数据库的名字,只有SQL Server Informix 数据库才需要设置 Propset.SetProperty ("DATABASE", "sde");
//SDE的版本,在这为默认版本
Propset.SetProperty ("VERSION", "SDE.DEFAULT");
}
//定义一个工作空间,并实力化为SDE的工作空间
IWorkspaceFactory Fact = new SdeWorkspaceFactoryClass();
//打开SDE工作空间,并转化为地物工作空间
IFeatureWorkspace Workspace = (IFeatureWorkspace )Fact.Open(Propset,0);
/*定义一个地物类,并打开SDE中的管点地物类,写的时候一定要写全.如SDE中有一个管点层,你不能写成IFeatureClass Fcls = Workspace.OpenFeatureClass ("管点");这样,一定要写成下边的样子.*/
IFeatureClass Fcls = Workspace.OpenFeatureClass ("sde.dbo.管点");
IFeatureLayer Fly = new FeatureLayerClass ();
Fly.FeatureClass = Fcls;
MapCtr.Map.AddLayer (Fly);
MapCtr.ActiveView.Refresh ();
}
不知道注意到了没有,直接连接跟SDE连接的最大的不同是直接连接不要设置端口,同时他们的参数设置也不一样,好好注意参数的设置。
3、加载CAD图层
CAD图层的加载可以分为:分图层加载和整幅图加载
A、 分图层加载
我们可以把CAD图分为点线面标注加载到MapControl中,跟加载其他数据一样,首先要定义一个工作空间,并用CadWorkspaceFactoryClass()实例化它,当得到了工作空间后就可以打开相应的工作空间,然后再打开指定的层类型。下边为完整的代码:
public void AddCADByLayer()
{
//定义工作空间,并用CadWorkspaceFactoryClass()实例化它
IWorkspaceFactory Fact = new CadWorkspaceFactoryClass();
//打开相应的工作空间,并赋值给要素空间,OpenFromFile()
//中的参数为CAD文件夹的路径
IFeatureWorkspace Workspace = Fact.OpenFromFile(@"I:/test/",0) as IFeatureWorkspace;
/*打开线要素类,如果要打开点类型的要素,需要把下边的代码该成:
IFeatureClass Fcls = Workspace.OpenFeatureClass ("modle.dwg:point");
由此可见modle.dwg为CAD图的名字,后边加上要打开的要素类的类型,中间用冒号 隔开,大家可以想想多边形和标注是怎么打开的。 */
IFeatureClass Fcls = Workspace.OpenFeatureClass ("modle.dwg:polyline");
IFeatureLayer Fly = new FeatureLayerClass ();
Fly.FeatureClass = Fcls;
MapCtr.Map.AddLayer (Fly);
MapCtr.ActiveView.Refresh ();
}
B、 整幅CAD图的加载
当我们要加载整幅CAD图时,需要使用下边的代码,这跟加载地物类有一定的区别,详细地介绍请看代码中的注析:
public void AddWholeCAD()
{
/*下边的两行代码是定义一个CAD工作空间,然后打开它,但这次不是赋值给
IFeatureWorkspace对象,而是赋值给IWorkspace定义的对象*/
IWorkspaceFactory Fact = new CadWorkspaceFactoryClass();
IWorkspace Workspace = Fact.OpenFromFile(@"I:/test/",0);
//定义一个CAD画图空间,并把上边打开的工作空间赋给它
ICadDrawingWorkspace dw = Workspace as ICadDrawingWorkspace;
//定义一个CAD的画图数据集,并且打开上边指定的工作空间中一幅CAD图
//然后赋值给CAD数据集
ICadDrawingDataset ds = dw.OpenCadDrawingDataset ("modle.DWG");
//通过ICadLayer类,把上边得到的CAD数据局赋值给ICadLayer类对象的
//CadDrawingDataset属性
ICadLayer CadLayer = new CadLayerClass();
CadLayer.CadDrawingDataset = ds;
//利用MapControl加载CAD层
MapCtr.Map.AddLayer (CadLayer);
MapCtr.ActiveView.Refresh ();
}
通过上边的代码和相关的解析,大家可能对整幅CAD图的加载有一个了解,但要具体搞清楚它的含义,也不那么容易。这留给大家去慢慢体会,在这我谈谈我自己的体会,但不一定正确。要打开数据集,首先要打开它的工作空间,至于什么是工作空间,我也说不太明白,但我的理解是,如果数据是保存在文件中的,工作空间大概就是它对应的文件夹,如果是数据库中的数据,我想大概就是对应的数据库。打开数据空间后,在这因为是整幅CAD图加载,所以跟以前的有点不同,这也就是相当整个CAD图就是一个数据集,所以要转到CAD画图的工作空间,然后把CAD图作为CAD数据集打开。为了在MapControl中加载CAD层,必须使用ICadLayer控件的对象,因为MapCtr.Map.AddLayer ()方法中只能是ICadLayer的对象。
分享到:
相关推荐
### 矢量数据加载:Shapefile (.shp) Shapefile是一种流行的矢量数据存储格式,常用于地理信息系统中。在C#中,通过ArcGIS Engine SDK,可以利用`ShapefileWorkspaceFactory`类来打开并访问.shp文件。代码片段中...
本节将重点探讨"AE+c#二次开发之加载数据"这一主题,特别是如何加载SHAPEFILE和RASTER数据。 SHAPEFILE是一种常见的地理信息系统(GIS)数据格式,用于存储矢量地理数据,如点、线和多边形。在AE+C#的环境中,我们...
在PPT中,加载动画通常用于表示数据加载、进程等待或者过渡效果,它可以帮助用户理解当前操作的状态,提高交互体验。这个特效模板包含了多种不同的状态注水效果,这意味着用户可以根据实际需求选择适合的动画样式,...
### AE 加载Shapefile、栅格、CAD、PersonGDB、SDE数据 #### 一、概述 ...通过上述步骤,可以有效地将各种不同类型的数据加载到AE中进行分析和展示。这对于GIS开发者来说是非常实用且必要的技能。
标题所述内容涉及的是使用ArcGIS的组件库ArcEngine来加载和展示地理空间数据。本文将详细说明如何使用ArcEngine加载Shapefile、栅格、CAD、Personal Geodatabase(PersonGDB)以及Spatial Database Engine(SDE)...
加载Shapefile到AE的关键在于将这些地理数据转换为AE可以理解和显示的格式。AE本身并不直接支持地理数据,但可以通过插件或者自定义脚本来实现。一种可能的方法是先用ArcGIS将Shapefile转换为图像序列,然后在AE中...
根据给定的信息,本文将详细解释在ArcGIS Engine(简称AE)中几种常用的数据加载方法。这主要包括如何加载shapefile (.shp) 文件以及个人地理数据库 (personal geodatabase) 文件。 ### 一、加载 shapefile 文件 ...
本话题主要探讨如何使用C#编程语言,让AE的MapControl直接加载Oracle数据库中的地理数据,而且无需安装SDE(Spatial Database Extensions,空间数据库扩展)或Oracle客户端。 首先,Oracle数据库存储了大量结构化的...
(1)利用AE和C++实现三维数据的基本操作(缩放、漫游等),打开sxd工作空间文档。 (2)shapefile;tin;featureclass,rasterdataset数据的加载。 (3)自行调用AO实现ArcToolbox部分功能,由点生成TIN,由TIN生成...
总的来说,C#结合AE能实现复杂的GIS应用,提供地图的加载、显示、保存以及各种地图操作和数据管理功能。开发者可以根据具体需求,利用AE的丰富API和C#的编程灵活性,构建满足用户需求的定制化GIS系统。
使用AE技术操作栅格数据的方法 在 GIS 领域中,栅格数据是一种常见的数据格式,用于存储和表示地理空间信息。...本文详细介绍了使用 AE 技术操作栅格数据的方法,包括栅格数据的加载、保存、读取属性和遍历等操作。
在C#应用中,这些数据需要被解析并加载到AE的三维环境中进行显示。 **4. TIN (不规则三角网)** TIN是一种用三角形网络表示地形表面的方法,常用于地形建模和分析。在C#程序中,通过AE的控件,TIN数据可以被转换为三...
本压缩包“AE加载谷歌和搜狗地图.zip”提供了一个关于如何在ArcEngine应用中集成谷歌地图和搜狗地图的教程或示例。以下是对这个主题的详细讲解: 首先,ArcEngine自身提供了丰富的地图服务功能,包括加载各种类型的...
在IT领域,尤其是在地理信息系统(GIS)中,"AE数据和代码.zip_AE有源数据吗_a0000001gdbtable_ae_ae书签_gdbtable"这个标题和描述揭示了一些关键概念。让我们逐一解析这些知识点。 首先,"AE"通常指的是Adobe ...
要将栅格数据加载到SDE(Spatial Database Enterprise,Esri的分布式GIS解决方案),我们需要遵循以下步骤: 1. **连接到数据库**:使用VB.NET的ADO.NET库建立与数据库的连接。这包括提供数据库服务器的名称、端口...
鹰眼是GIS软件中的一个必备的功能。主要作用就是在GIS软件中有一个鹰眼视图和一个主视图,鹰眼视图用一个框来“框起来”,当拖动这个框的...代码中也包含了打开Arcgis中打开多种数据格式的方式,如MXD、shapeFile文件等
在AE(Adobe After Effects)开发实习的过程中,连接数据是一个关键环节,它涉及到如何将外部数据源与AE项目相结合,以实现动态可视化或者自动化的工作流程。本文将深入探讨这个主题,帮助你理解并掌握在AE中链接...
例如,当CAD数据加载失败时,应提供适当的错误提示;完成操作后,要记得释放所有打开的资源,防止内存泄漏。 总的来说,"C#+ArcEngine:加载打开CAD数据"这个主题涵盖了C#编程、ArcGIS API使用、CAD数据集成以及...