利用ArcGIS开发地理信息系统入门
来源:互联网 发布:第三方javascript编程 编辑:程序博客网 时间:2024/05/16 14:29
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接口通过IFeatureLayer中featureClass属性获得,可以操作图层中属性表,例如根据条件查询、向属性表中添加字段等;
5) IQueryFilter接口是查询过滤器,通过它设置查询过滤条件即可返回一系列符合条件的结果集;
6) IFeature接口包含对图层中的一个要素(即一条记录)进行各种操作,例如删除、获取要素的包络(envelope)等;
7) IFeatureCursor接口存储IFeatureClass在执行查询后的游标,这与数据库的查询类似;
8) IEnvelope接口可以获取矢量图层多边形的属性,同时还能够控制多边形,如将多边形缩放,在AE中IEnvelope这类的几何图形接口比较常用,类似的还有IPolygon,IPoint,分别为矢量图层中线和点接口;
9) ISpatialFilter接口可以实现通过空间查属性,例如根据鼠标拉框的区域,查找出包含于其中的要素。
上述是暂时能够想起的一些重要接口,在实际运用AE开发时,需要多看帮助文档熟悉接口中的方法。另外,通过开发这个项目,有几点比较深的体会。
- 永远不要认为程序会正常运行,在调用对象变量的方法之前,应该检查它是否为NULL,尽量考虑全面各种条件,加上try{…} catch{…}语句;
- AE开发属于二次开发,严重依赖于库,开发的C/S模式程序安装前必须要安装ArcGIS Runtime,我认为这是AE的一个缺陷,所以觉得利用AE开发B/S模式程序更有意义;
- 开发地理信息系统,数据的获取很重要,一切都是围绕数据而来,并且数据所占的空间还比较大,对机器的性能有比较高的要求。
- 利用ArcGIS开发地理信息系统入门
- ArcGIS支持实时地理信息系统
- ArcGIS支持实时地理信息系统
- ARCGIS地理信息系统学习笔记001--认识ARCGIS
- 企业GIS地理信息系统开发
- Android Arcgis入门(一) Arcgis开发配置
- ArcGIS Server支持的REST地理信息系统服务
- arcgis server开发入门基础
- 地理信息系统设计与开发读书笔记
- Java Web GIS 地理信息系统开发
- WPF & ArcGIS Engine三维开发入门攻略
- ArcGIS API for Silverlight开发入门准备
- Arcgis Add-In开发入门实例
- ArcGIS API for Javascript 应用开发入门
- ArcGIS API for Javascript 应用开发入门
- Arcgis Add-In开发入门实例
- ArcGis Server开发入门(转载)
- ArcGIS API for Javascript 应用开发入门
- qt no such file or directory 编译
- 并口定义及其编程基础之四:IIC调试工具的命令解析及使用
- 使用表达式树动态构建Linq查询条件来实现单个实体动态查询
- HttpClient浅尝-小试牛刀
- MySQL攻击部分代码
- 利用ArcGIS开发地理信息系统入门
- 用 awk命令 来保存记录CPU占有率
- IMF总裁之争白热化 法财长、墨央行行长忙拉票
- 内存整理的原理是什么?
- AndroidGUI21:ImageSwitcher常用技巧
- 002. EsayUI系列之easyui-menu
- 聚焦“钱流” 热钱流向古典家具
- webservice 笔记(小结) axis2 集成spring 发布服务
- IsPostBack深入探讨