利用ArcGIS开发地理信息系统入门

1 地理信息系统常识

         项目开发过程中主要使用 ESRI 公司的产品 ArcGIS ArcGIS 类似于 Microsoft office 套件,有许多组成部分: ArcMap, ArcCatalog, ArcGIS Engine 等。其中 ArcMap 主要用来处理地图数据,包括:矢量图和栅格图。矢量图通常由数学公式计算得出,放大之后不会失真,而栅格图则由一个个像素点组成,放大之后容易失真。另外,在地理信息系统中,矢量图中通常会储存一些数据信息。例如,一幅关于城市街道轮廓的矢量图,其中可能就含有每条街道的名称等信息。在 ArcGIS 中,一般矢量图有 6 个文件与之关联,具体如图 1 所示。其中, dbf 文件存储了矢量图中的数据。

 

 

1  与矢量图关联文件

栅格图与矢量图相比,没有存储相关的数据,大部分情况下是作为矢量图的底图,以丰富地理信息系统,增强真实感。不过地理信息系统往往需要高分辨率的栅格图作为地图,怎么获取是一个难题,并且高分辨率的栅格图通常体积比较大,一幅图片往往有上百 M 甚至上 G 的大小。这对处理这些图片的计算机提出了很高的要求。

ArcMap 当中,我们使用一个 mxd 工程文件将系统中所有需要的矢量图和栅格图包含进来,具体效果见图 2 所示(见下页)。

在图 2 中需要注意的是,在 ArcGIS layer 即图层是一个很重要的概念,通过获取图层可以对这个图层做一系列操作,如根据设置的条件在矢量图层的数据中进行查找,一些几何图形加入矢量图层中,查看矢量图层的中几何体的一些属性。这些都是 ArcMap 中比较基本的功能,所以,需要对 ArcMap 的基本功能有一个清楚的认识。利用 ArcGIS Engine 开发地理信息系统属于二次开发,即 ArcMap 中具有的功能一般可以通过 ArcGIS Engine 所提供的库来实现。这样开发出来的地理信息系统是 ArcMap 的一个定制子集,并且在某些功能方面比起 ArcMap 更加易用。以上是在开发地理信息系统的过程中需要了解的一些常识。

2   mxd 工程文件目录

2 熟悉 ArcGIS Engine 开发库

         要掌握地理信息系统开发,首先需要熟悉 ArcGIS Engine 中的一些类和接口的用法。这就需要经常查看帮助文档 和一些相关的例子。在 AE(ArcGIS Engine) 中有着数量众多的接口,至于为什么需要使用接口,记得在以前看过一篇文章,文中提到这与粒度有关。如果使用类,假如类中的方法很多,那么对于方法的选择也许是令开发者头大的一个问题,而利用接口来实现对类中方法的分门别类以简化问题。总之,就是将一个原本乱七八糟的事情梳理成一个个井然有序的模块。具体的解释可以参考 http://www.cnblogs.com/lauer0246/archive/2008/04/14/1152252.html 转载的《为什么使用接口编程》一文。接下来介绍一些 ArcGIS Enginne 开发中经常需要用到的接口。

 

1)   IMapControl 接口,是AE 中比较重要的接口之一,通过它可以获取图层,加载在ArcMap 中处理好的mxd 文件到程序中,获取鼠标在图上的位置,更多的功能可以查看帮助手册;

 

2)   ILayer 接口主要提供了设置图层属性的一些操作,例如控制图层的显隐、设置图层名等等,可以通过axMapControl1.get_Layer() 来获取图层;

 

3)   IFeatureLayer 接口提供了操作基于矢量数据图层的一些属性和方法。必要时,可以将ILayer 对象转化为IFeatureLayer

 

4)   IFeatureClass 接口通过IFeatureLayerfeatureClass 属性获得,可以操作图层中属性表,例如根据条件查询、向属性表中添加字段等;

 

5)   IQueryFilter 接口是查询过滤器,通过它设置查询过滤条件即可返回一系列符合条件的结果集;

 

6)   IFeature 接口包含对图层中的一个要素(即一条记录)进行各种操作,例如删除、获取要素的包络(envelope )等;

 

7)   IFeatureCursor 接口存储IFeatureClass 在执行查询后的游标,这与数据库的查询类似;

 

8)   IEnvelope 接口可以获取矢量图层多边形的属性,同时还能够控制多边形,如将多边形缩放,在AEIEnvelope 这类的几何图形接口比较常用,类似的还有IPolygonIPoint ,分别为矢量图层中线和点接口;

 

9)   ISpatialFilter 接口可以实现通过空间查属性,例如根据鼠标拉框的区域,查找出包含于其中的要素。

上述是暂时能够想起的一些重要接口,在实际运用 AE 开发时,需要多看帮助文档熟悉接口中的方法。另外,通过开发这个项目,有几点比较深的体会。

  1. 永远不要认为程序会正常运行,在调用对象变量的方法之前,应该检查它是否为NULL ,尽量考虑全面各种条件,加上try{…} catch{…} 语句;
  2. AE 开发属于二次开发,严重依赖于库,开发的C/S 模式程序安装前必须要安装ArcGIS Runtime ,我认为这是AE 的一个缺陷,所以觉得利用AE 开发B/S 模式程序更有意义;
  3. 开发 地理信息系统,数据的获取很重要,一切都是围绕数据而来,并且数据所占的空间还比较大,对机器的性能有比较高的要求。

 

 

 

 

你可能感兴趣的:(利用ArcGIS开发地理信息系统入门)