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

来源:互联网 发布:第三方javascript编程 编辑:程序博客网 时间:2024/05/16 14:29

1地理信息系统常识

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

 

 

1 与矢量图关联文件

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

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

在图2中需要注意的是,在ArcGISlayer即图层是一个很重要的概念,通过获取图层可以对这个图层做一系列操作,如根据设置的条件在矢量图层的数据中进行查找,一些几何图形加入矢量图层中,查看矢量图层的中几何体的一些属性。这些都是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. 开发地理信息系统,数据的获取很重要,一切都是围绕数据而来,并且数据所占的空间还比较大,对机器的性能有比较高的要求。

 

 

 

 

原创粉丝点击