首页 > 代码库 > ArcGIS Engine开发之地图基本操作(3)
ArcGIS Engine开发之地图基本操作(3)
地图数据的加载
一、加载Shapefile数据
Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式。加载Shapefile数据的方式有两种:①通过工作空间加载。②通过MapControl控件的AddShapefile方法加载。
1、通过工作空间加载Shapefile文件
通过工作空间加载Shapefile文件主要用到IMap、ILayer、IFeatureLayer和IFeatureClass四个接口。
1)IMap接口
IMap接口是对地图进行操作的起点,主要用于管理Map对象中的图层对象、要素选择集和空间参考等对象。使用IMap接口,可以获取Map对象中的图层个数,对图层进行添加、删除,还可以利用IMap接口实现查询的高亮的显示。
2)ILayer接口
ILayer接口是图层对象的通用接口,它提供了操作图层的属性和方法,可用于所有的图层,如要素图层(FeatureLayer)、栅格图层(RasterLayer)和图形图层集合(CompositeGraphicsLayer)等
3)IFeatureLayer
IFeatureLayer接口继承自ILayer接口,提供了访问基于矢量数据图层的属性和方法,图层的数据可以是GeoDatabase、ShapeFile或者Coverage数据。如果使用FeatureLayer组件类,还可以通过IGeoFeatureLayer接口获取更多的属性和方法。IGeoFeatureLayer接口除了完全包含IFeatureLayer接口的属性和方法外,还提供了更多的控制要素图层的属性和方法,如注记属性(AnnotationPropperties)、注记显示设置(DisplayAnnotation)等。
4)IFeatureClass接口
IFeatureClass接口是获取和设置要素类属性的主要接口。如获取要素类的类型,得到满足某个查询条件的要素个数,或在要素类中创建一个新的功能等。
注意事项:Map、Layer、FeatureLayer三者之间的关系如下:Map是很多图层的集合,就像ArcMap的MXD文档一样,可以很多Layer;Layer是图层对象,是数据的外壳,必须建立在数据的基础上才有意义;FeatureLayer是具体的要素图层,需要经过Layer添加到Map中进行显示。
FeatureLayer、FeatureClass之间的区别:
1)FeatureLayer是加载在地图文档中的矢量数据层,只是要素类的表现形式。FeaturClass是一组空间实体的集合,在数据表中存储了统一的属性和行为,每一个FeatureClass都有一个Geometry类型。
2)FeatureLayer接口继承自ILayer接口,IFeatureClass接口继承自IClass接口。
3)FeatureLayer可以创建自己的对象,而FeatureClass不行;FeatureLayer、FeatureClass的获取方法如下:
IFeatureLayer pFeatureLayer=mainMapControl.get_layer(0) as IFeatureLayer;
IFeatureClass pFeatureClass=pFeatureLayer.FeatureClass;
具体的代码展示:
OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.CheckFileExists = true;//值检查 pOpenFileDialog.Title = "打开Shape文件"; pOpenFileDialog.Filter = "Shape文件(*.Shp)|*.shp"; pOpenFileDialog.ShowDialog(); //获取文件路径 //分别实例化接口对象 IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatureLayer; string pFullPath = pOpenFileDialog.FileName;// if (pFullPath == "") return; int pIndex = pFullPath.LastIndexOf("\\"); string pFilePath = pFullPath.Substring(0, pIndex);//文件路径 string pFileName = pFullPath.Substring(pIndex + 1);//文件名 //实例化ShapefileWorkspaceFactory工作空间,打开Shapefile文件 pWorkspaceFactory = new ShapefileWorkspaceFactory(); pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(pFilePath, 0); //创建实例化要素集 IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pFileName); pFeatureLayer = new FeatureLayer(); pFeatureLayer.FeatureClass = pFeatureClass; pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName; ClearAllData();//删除所有已加载的数据 mainMapControl.Map.AddLayer(pFeatureLayer); mainMapControl.ActiveView.Refresh();//进行地图的刷新 //同步鹰眼 // SynchronizeEye();
2.通过MapControl的AddShapefile方法加载Shapefile文件
用MapControl控件的AddShapefile方法同样可加载Shapefile文件,这样省去了建立工作空间、数据集等步骤。调用该方法需要传入两个参数,分别是文件路径和不带扩展名的文件名。调用方法如下:
mainMapControl.AddShapefile(string Path,string filename);
二、加载栅格数据
ArcGIS Engine开发之地图基本操作(3)