樱木 原文 AE开发之概念辨析2AE开发涉及相关概念AE开发相关概念

1 AE中的类库

AE总共包括了21个子库,分别是SYSTEM,SYSTEMUI,GEOMETRYDISPLAY,SERVER,OUTPUT,GEODATABASE,GISCLIENT,DATASOURCEFILE,DATASOURCEGDB,DATASOURCEOLEDB,DATASOURCERASTER,GEODATABASEDISTRIBUTED, CARTO, LOCATION, NETWORKANALYSIS, CONTROLS,GEOANALYST, 3DANALYST,GLOBECORE和SPATIALANALYST。从这些库的名字上就能看出来基本上他们主要能实现的功能。特别是当你对于ArcGIS的应用和地理空间分析理论很熟悉的话,搞懂这些库的功能更加是易如反掌。

下面分别就上面黑体字的库做进一步的描述:

GEOMETRY:主要对几何对象的处理,重要的几何对象包括Point,MultiPoint,PolyLine, PolyGon, 还有Segment,Path和Ring。所有这些几何对象都有Z,M和IDs属性值,并且支持Buffer,Clip的操作。

DISPLAY:显示GIS数据的对象,还有控制对象显示的符号和色彩对象。

GEODATABASE:提供了对于所有ArcGIS支持的数据类型的统一编程API。

CARTO:控制地图的建立和及其附属显示的对象,例如指北针、图例等。重要的两个对象是Map和PageLayout,他们分别对应ArcMap中的data
view和layout
view。同时该库还对地图注记和动态注释提供支持。

CONTROLS:封装了几个重要的对象,对开发者开发图形用户界面的应用程序帮助很大,从此也进一步断送了MO的发展前途(我的人为:))。

GEOANALYST:对空间分析支持核心的分析功能,同样的功能可以在3D和Spatial库中找到。主要功能包括将点插值成Raster,其他格式转换成Raster或Vice
versa类型,执行表面分析(坡度,坡向等)和Raster的重分类。

SPATIALANALYST:提供了一整套完整的工具使model
development对象可以和Raster Data
Object(RDO)更紧密地工作。

容易疑惑地方:

Net中的类比AO中的类多了class后缀

比如AO中是Point类,而.NET中却多了个PointClass类,等等

其实简化理解就可以了。Point类是基于COM的纯AO类,而PointClass是AO类经.Net封装后形成的类。仅此而已,两者在使用中没有区别。

ArcGIS
Engine中的AxMapControl是什么类,与MapControl什么关系

AxMapControl非AO类,它是AO的MapControl经.NET封装后形成的,因此在ArcObjects的帮助文档中查无此类。欲知AxMapControl的属性和方法,查询ArcObjects帮助中的IMapControl相应接口,基本相当。

其实,出现AxMapControl的本质在于:Engine多是创建.NET窗体程序,MapControl对象虽为Map控件,但它并不能直接添加在.NET的Form中显示。只有将MapControl封装为.NET的控件,即AxMapControl,才可以在Form程序中运行显示。

2 GIS中的几个概念的理解

2.1 要素、要素类

  要素(feature):就是能代表物理实体的,具有几何形状的地图元素。地图中主要包括点,线,面三要素。是空间数据中最基本,不可分割的单位。每个要素和属性表中记录(行)存在一一对应关系。主要用来查询,分析。
  要素类(feature class):具有相同几何特征(形状)的同类要素的集合(即点图层中的点,线图层中的线,面图层中的面)。一个要素类一般和一个属性表相对应。事实上,某一要素或者是某类要素是通过TOC中的图层来表现的。

1、使用AE创建要素过程

(1)打开编辑空间(IWorkspaceEdit)

(2)创建Feature(FeatureClass.CreateFeature())

(3) 设置Feature的属性

(4)保存Feature(Feature.Store())

(5) 关闭编辑空间

2、对要素(Feature)的任何编辑操作都必须在“编辑空间打开的阶段”完成

3、如果打开了编辑状态,就一定要调用feature.store,或则调用discard。不然会有时抛出异常。

3、FeatureClass实际上都相当于一个容器,真正的实体分别是Feature(一些形状,比如点,线或者面等),它就是这个容器中的一个记录,就如同二维表中的某一行一样,代表了具体的实体;使用IFeatureClass的CreateFeature方法和ITable的CreateRow方法效果一样,只不过CreateFeature方法返回的是CreateRow方法创建的Feature的引用。

4、Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式。一个Shapefile文件包括一个主文件(*.shp),一个索引文件(*.shx)和一个dBASE表文件(*.dbf),要注意的是Shapefile只能存储一种要素(点状或线状或面状)。而gdb里边可以存放很多要素集(feature dataset),每个要素集里边又能存放很多要素类。

5、Featureclass是个模型上的称呼,而shapefile做为一种文件格式,是Featureclass这种模型的表现形式。

6、图层(layer) 是依附于地图(Map)而存在的一个概念,FeatureClass是一系列Feature(形状)的集合,是一个存储数据的容器,当我们将FeatureClass放到Map中就成图层了,但如果要将数据存储到硬盘上怎么办呢??不能存储为Layer吧??这时我们是将它存在Shapefile文件中,像上面说的Shapefile是外在表现形式,是具体的,而像Featureclass、Layer之类的是抽象的概念。

2.2 数据容器

图层(layer):每一图层是由同一类型的要素组成,其数据来自某个要素类。因此图层可以看成是要素类在TOC中的表现形式。其对应的表存放了该图层中所有要素对应的记录。
(table/attribute table):由若干行和列组成。列表示属性或者字段,行代表记录。当然也有和图层或要素不直接对应,相对独立的属性表,在需要的时候和其他的表建立连接,实现表的扩展。其中的记录对应了
数据框(data frame):将多个图层,属性表聚集在一起。框架有图层的名称,图例,说明,当前显示状态和独立的属性表等等。
数据源(data source):不经转换而被arcmap直接使用的空间数据,属性数据。各种要素类和表,是最常用的数据源。
图形元素(element):使用drawing工具条画出的图形元素。其存放在地图文档中,不能被别的文档使用,与属性表无关联。要注意与feature是不同的概念。Feature与表有关联,可以被别的文档使用。该元素仅用来辅助表达,注记。

地理数据库(geodatabase):包括要素类和要素集,是Arcgis应用程序用来管理地理信息的。它实现了一个面向对象的Gis数据模型,地理数据库将每一个要素以行的形式存储在表中,要素的段中,属性数据存储在其他字段中,每个表存储一个要素。除了存储矢量数据外,地理数据库还可以存储栅格数据,数据表,以及其他数据表的参考。可以将所有的空间数据存储在一个地方。地理数据库的优点是其中的要素含有内建行外,要素完全存储在单一的数据库中,数据量大的地理数据库可以实现不分块,无缝存储。
数据模型:ArcGis可以用多种格式来管理和存储地理数据。ArcGis采用的三种基本数据格式有:vector矢量,raster栅格,不规则三角网 tin。此外也可以将表格数据导入到ArcGis中。可以用三种不同的矢量模型表示地理数据要素,分别是 shapefile, coverage和地理数据库(geodatabase)。栅格数据包括影像和格网。其中矢量模型适合于表达离散要素,栅格模型适合表达连续要素。
Coverages:是一种传统的格式,可以用于进行复杂的地理处理、建立高质量的地理数据集和进行复杂的空间分析。Coverages包括三种要素类型:基本(primary)要素、复合(composite)要素和辅助(secondary)要素。Coverages的基本要素有标注点(label
point)、弧(arc)和多边形(polygon)。复合要素有路径(route)、段(section)和区域(region),它们是建立在基本要素之上的。 Coverages也可能包括辅助要素:控制点(tics)、链接(links)和注记(annotation)。控制点和链接不代表具体的地理实体,而是用于管理Coverage。注记用来为地图上的地理要素提供文本。

2.3 拓扑相关

拓扑(topoloyg):地理要素的相互连接和扩展。是明确定义和使用要素几何中内在空间关系的过程。Coverage有上中拓扑关系:连通性(conectivity),区域定义(area defination),邻接性(contiguity).coverage通过记录一列构成每个多边形边界的相连接的弧来定义区域(area),成为多边形-弧拓扑。Coverage通过记录一列弧的左边多边形和右边多边形来存储邻接信息,成为左-右拓扑。
悬结点(Dangle Node):在拓扑结构中,仅和一个线要素相连,孤立的结点。
伪结点(Pseudo Node):在拓扑结构中,两个线要素相连,共享一个结点。
普通结点(Node):在拓扑结构中,三个或者三个以上的线要素交汇,共享的一个结点。
脏区(Dirty Area):建立拓扑关系后,又被编辑过的空间范围,该范围很可能存在不符合拓扑规则的要素。

3 AE的功能层次

1、AE从功能层次上分为五部分:基本服务(Base Services)、数据存取(Data Access)、地图表达(Map Presentation)、开发组件(Developer Components)和运行时选项(Runtime Options)。

2、Abstract Class(抽象类),OMD中每个抽象类至少有一个子类,OMD符号为二维的内部有阴影的矩形。

3、Coclass(Component classes)可创建类或组件类:用New关键字创建对象或者从别的对象获得运行实例。OMD符号为带阴影的3D矩形符号。

4、Class实例化类或普通类:不能直接创建新对象,只能从其它类接口的属性函数或者其它类的方法创建,OMD符号为3D矩形内部没有阴影。

5、PageLayout与Map都是视图对象,能够显示地图,都实现了IActiveView接口;同时它们都是图形元素的容器,能存储图形元素(Graphics Element),都实现了IGraphicContainer接口。

6、ArcGis中可以显示在视图上的图形可分为两种,地理数据和元素(Element)数据。元素是一个地图中除去要素数据外的部分,即在一幅地图中,除了保存在数据库中的地理数据外,其余的对象全部是元素,Map只能保存图形元素(Graphic Element),而PageLayout能保存图形元素和框架元素(Frame Element)。

AE开发概念辨析的更多相关文章

  1. AE开发使用内存图层

    AE开发中,有时需要从磁盘中读取一些文件信息如坐标点转为图层并进行分析,此过程并不需要坐标点入库之类的操作,就可以创建一个内存图层解决问题.创建内存图层需要用到InMemoryWorkspaceFac ...

  2. AE开发能否实现TOC Control里添加多个Data Frame

    问题: 在ArcMap中,菜单Insert下Data Frame,可以在TOC中增加Data Frame,在MapControl或者PageLayoutControl下都可以正常显示多个Data Fr ...

  3. 高并发应用中客户端等待、响应时间的推算,及RT/QPS概念辨析

    高并发应用中客户端等待.响应时间的推算,及RT/QPS概念辨析 对于一个网站,已知服务端的服务线程数和处理单个请求所需的时间时,该如何算出高并发时用户从点击链接到收到响应的时间?注意这个时间并不等于服 ...

  4. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  5. 【转】.NET+AE开发中常见几种非托管对象的释放

    尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 今天在开发时遇到一个问题:" 未处理 System.AccessViolationException Message="尝试 ...

  6. Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode

    Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode 不个网页title保存成个个文件的时候儿有无效字符的问题... 通常两个处理方式 ...

  7. Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php

    Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php 1. RFC2396标准 including HTML 4.01 section  ...

  8. atitit.软件开发概念--过滤和投影 数据操作

    atitit.软件开发概念--过滤和投影 数据操作 投影的本质及扩展 物体在太阳光的照射下形成的影子(简称日影)就是平行投影.日影的方向可以反映时间 投影还比喻此物通过彼物表现出来的迹象. 作者::老 ...

  9. Python类型转换+序列操作+基本概念辨析速查手册

     第一部分是Python语言中基础中的基础,根据网上资料,合并如下:       1.类型转换     int(x [,base])  将x转换为一个整数     long(x [,base]) 将x ...

随机推荐

  1. require和import的使用

    一.前言 ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引 ...

  2. 【Python学习】爬虫报错处理bs4.FeatureNotFound

    [BUG回顾] 在学习Python爬虫时,运Pycharm中的文件出现了这样的报错: bs4.FeatureNotFound: Couldn’t find a tree builder with th ...

  3. 03010_防止SQL注入

    1.预处理对象 (1)使用PreparedStatement预处理对象时,建议每条sql语句所有的实际参数,都使用逗号分隔: String sql = "insert into sort(s ...

  4. Java Reflection - Getters and Setters

    原文链接:http://tutorials.jenkov.com/java-reflection/getters-setters.html 通过使用 Java 反射,我们能够在程序执行时观察 clas ...

  5. 企业网管软件之SOLARWINDS实战-基于浏览器的网络流量监控

    本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  6. .NET Entity Framework入门操作

    Entity Framework是微软借鉴ORM思想开发自己的一个ORM框架. ORM就是将数据库表与实体对象(相当于三层中的Model类)相互映射的一种思想. 最大的优点就是非常方便的跨数据库平台. ...

  7. BZOJ3674可持久化并查集(模板)

    没什么可说的,就是一个可持久化线段树维护一个数组fa以及deep按秩合并好了 注意一下强制在线 蒟蒻的我搞了好长时间QAQ 贴代码: #include<cstdio> #include&l ...

  8. Keil 编译环境之在线仿真调试问题

    一.问题现象: 这几天刚开始上手STM32,使用Keil 环境进行编程,然后使用ULINK2进行在线仿真,在按键处理函数程序中设置断点,却发现按了按键程序没有停在设置的断点,程序正常运行,如下图所示, ...

  9. Spring学习总结(6)——Spring之核心容器bean

    一.Bean的基础知识 1.在xml配置文件中,bean的标识(id 和 name) id:指定在benafactory中管理该bean的唯一的标识.name可用来唯一标识bean 或给bean起别名 ...

  10. Stack switching mechanism in a computer system

    A method and mechanism for performing an unconditional stack switch in a processor. A processor incl ...