Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第6章
目录:
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第1章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第2章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第3章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第4章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第5章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第6章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第7章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料--第8章
Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料中文PPT下载
这一章我们探讨如何利用要素服务进行创建、更改和删除要素。
一个要素类(Feature Class)中包含一个或多个要素,每个要素都有一个Geometry的字段用来保存点线面等空间实体。要素通常还会有其他属性字段用来存储额外的属性信息。要素类就像数据库中的表一样的结构,包含了一列的property,也就相当于数据库中的字段或者列。这些property可以是geometry type, data type, raster type 或者 object type,当然最常用的就是Geometry类型和各种Data 类型,比如int, string等等。
MgClassDefinition or MgPropertyDefinition 用来定义要素类的结构,也就相当于数据库表的结构。要创建一个要素类feature class,当然要首先定义他的结构,首先要创建一个MgClassDefinition 然后按照需要的类型生成各个property definition即字段定义。把这些MgPropertyDefinition添加到MgClassDefinition的属性定义集合MgPropertyDefinitionCollection 中,这个集合可以通过MgClassDefinition.GetProperties() 方法获得。然后要创建MgFeatureSchema ,相当于数据库概念中的database,当然还要让这个东西真正落地,要指定某种数据格式。AIMS API现在支持文件型的格式,比如SDF SHP文件或者SQLite文件等。
创建好结构就可以往里面添加数据了,我们有MgInsertFeatures/MgDeleteFeatures/MgUpdateFeatures 这样几个命令类用来添加 删除 和更新数据。添加和更新时的数据记录用MgPropertyCollection 来表现,相当于数据表里面的一行,既然这是个集合,那就包含一系列的MgProperty,这个MgProperty和上面的MgPropertyDefinition不同,MgPropertyDefinition表示的是结构信息,比如字段名,这个字段的数据类型,是否允许为空,小数点几位等等;而MgProperty则表示那个字段上面的值,比如 河流名 = “长江”。 我们可以组织好这样的MgPropertyCollection 以便使用MgInsertFeatures/MgDeleteFeatures/MgUpdateFeatures插入或者更新到数据源中。 注意要使更改生效最后一定要调用MgFeatureService.UpdateFeatures() 来执行前面提到的(insert/delete/update)命令,否则全是无用功。
我们考虑这样一个场景,用户在浏览器上用鼠标画了一下点 线 面并输入他们的属性信息,我们需要把这些要素保存到数据源中。属性信息好办,从form中读取数据就行了,关键是空间实体的信息。首先我们要知道用户到底画了什么东西,比如一条线那么我们就要知道各个拐点的坐标。这个过程叫数字化,Ajax Viewer和Fusion Viewer都有对应的API。Ajax Viewer API的使用第2章我们讨论过了,Fusion Viewer API来做数字化可以参考峻祁连的这个博客。我们得到各个坐标值之后即可以利用MgGeometryFactory 来生成对应的MgGeometry对象。
如果你看API,发现前面提到的MgInsertFeatures/MgDeleteFeatures/MgUpdateFeatures 这几个命令中的MgProperty需要的是MgByteReader类型的geometry,而不是MgGeometry,这该怎么办呢? 其实在AIMS API中,Geometry有3中表现形式:
- MgGeometry 和他的子类,可以由 MgGeometryFactory生成,可以获取更多详细信息和进行空间操作;
- MyByteReader, 用于上面提到的要素操作;
- AGF(Autodesk Geometry Format) 文本表示, it is a superset of WKT(Well known text);
这3种形式的转换关系可以用下图表示,其中用到工具类 MgAgfReaderWriter or MgWktReaderWriter:
好了,为更好的理解这个过程,请仔细阅读API参考中的这个图,从下往上看。一定要仔细看,相信你会有收获。