2024年2月27日发(作者:)

Geospatial Platform API

是AutoCAD Map 3D 2008新推出的程序开发接口,主要用于管理图形中的空间数据,该API和Autodesk MapGuide (企业版以及开源版本)共用一些模块,所以定制的程序经过简单修改在它们之间可以共用。

Geospatial Platform API目前只提供.NET语言的开发接口,而且是作为技术预览版本发布的,所以我们在该书中只做简单的介绍。需要说明一点,虽然Geospatial Platform API使用当前模式进行设计和API开发,但是可能在将来的版本中有一些细微的改变。

9.1 和Mapguide的关系

Geospatial Platform API 是基于FDO API之上的如图9-1所示,其中FDO 用于访问空间数据,是MapGuide 和Geospatial Platform API的基础,Mapguide和Map 3D共享的部分分为共享代码和共享接口两个层次,其中共享代码在Mapguide和Map 3D(Geospatial

Platform API)中有同一代码和接口,而共享的接口只是接口一致,在Mapguide和Map 3D中分别有不同的代码来实现。

图 9-1 和Mapguide的关系图

由于AutoCAD Map 3D和Mapguide在产品上有很大的区别,这就影响了API 的提供方式:MapGuide API 是为网络环境设计的,API以PHP、Java和.NET语言接口发布的,而AutoCAD Map 3D是为桌面环境设计的,仅提供.NET API,另外AutoCAD Map 3D可以将资源信息直接保存在DWG文件中,而MapGuide则使用外部的仓储来存储资源。

MapGuide程序中的所有数据的读写都是通过FDO实现的,这就意味着数据是实时更新的,而AutoCAD Map 3D即处理存储在DWG文件中数据,也处理FDO连接的要素源的数据,依靠选用的方法,在AutoCAD Map 3D程序中更新时,可能只更新了内存缓冲区中的数据而没有直接更新要素源的数据。

AutoCAD Map 3D包含一系列扩展的API类,例如Geospatial Platform API包含一个MgLayerBase类,AutoCAD Map 3D基于此类在AcMapLayer类中做了扩展,Geospatial

Platform API中的所有类以Mg作为前缀,而AutoCAD Map 3D 中使用的扩展类以前缀AcMap开始。

9.2 开发环境

Geospatial Platform API需要.NET 2.0环境,可以使用Microsoft Visual Studio 2005作为开发平台,假设你已经知道如何在AutoCAD使用C#开发开发应用程序,要在程序中使用Geospatial Platform API,需要在工程中添加对的引用,该文件位于AutoCAD Map 3D的安装目录。

另外,可能还需要使用AutoCAD组件,如命令注册等,还需要添加AutoCAD的引用文件:和,它们位于AutoCAD Map 3D 安装目录。

由于Geospatial Platform API 是基于FDO API的,所以还要引用FDO的命名空间文件,如、等,这些文件位于AutoCAD Map 3D 安装目录的FDObin 子目录下。FDO是一种用于定义、查询和操作地理空间信息的数据访问技术,是Autodesk地理空间产品(例如Map 3D,MapGuide Enterprise 和Topobase)访问和共享空间/非空间的数据的途径,另外为了帮助开发人员更容易的扩展FDO 数据访问技术的能力,Autodesk 已将FDO 数据访问技术作为开源地理空间基金会(OSGeo, Open Source

Geospatial Foundation)之下的一个开源项目发布。FDO 数据访问技术的开源版本可从OSGeo 网站下载 /,也可以访问该网站获取关于FDO更多的知识。

添加完上面的引用文件后,需要在工程中使用using关键字导入命名空间,参考下面的代码:

// AutoCAD API 命名空间

using Input;

using ationServices;

using e;

// Platform API命名空间

using de;

// FDO API 命名空间

using ;

using ;

using Services;

using tions;

using ds;

using ore;

using lContext;

using ;

using e;

完成以上步骤即可在程序中使用Geospatial Platform API。

9.3 Geospatial Platform API 的功能

9.3.1 管理资源

资源服务(Resource Service)用于管理资源,可以通过该服务管理资源文件和地图或层的配置信息,这与MapGuide的资源服务的作用一样的,所不同的是资源服务要通过服务厂对象( AcMapServiceFactory)创建,并且该服务带有关联事件处理函数,所以可以监控要素的创

建、编辑或删除操作。

通过资源服务API可以创建资源,所谓资源就是Geospatial Platform API处理的各种对象,通过创建要素源定义并使用要素源的资源ID将其保存到仓储中来定义矢量数据的要素源。

创建要素源定义有多种方法,其中一种就是通过Visual Studio 工具基于

文件生成的类,FeatureSourceType和 NameValuePairType 类就是用该方法生成的,Geospatial Platform API的示例程序中也采用该方法。

下面代码基于SDF 文件创建要素源,假定SDF文件可用。

// 导入 Platform API命名空间

MgResourceService rs;

rs = vice(ceService)

as MgResourceService;

MgFeatureService fs;

fs = vice(eService)

as MgFeatureService;

MgResourceIdentifier fsId =

new MgResourceIdentifier("Library://eSource");

// 创建要素源定义

string xmlString;

FeatureSourceType fsType = new FeatureSourceType();

er = @".3.2";

NameValuePairType param = new NameValuePairType();

= "File";

= PolygonSdfFile;

NameValuePairType param2 = new NameValuePairType();

= "ReadOnly";

= @"false";

ter = new NameValuePairType[] { param, param2 };

// 序列化要素源对象模型为xml字符

using (StringWriter writer = new StringWriter())

{

XmlSerializer xs = new XmlSerializer(e());

ize(writer, fsType);

xmlString = ng();

}

//

byte[] unicodeBytes = es(xmlString);

byte[] utf8Bytes = t(e,

8, unicodeBytes);

// 保存资源

MgByteSource xmlSource = new MgByteSource(utf8Bytes, );

ource(fsId, der(), null);

9.3.2 处理要素

要素源表示一个FDO连接,通过 FDO可以读写多种格式的空间数据。要素服务是构建在FDO之上的服务,提供用于读写要素数据基本的API,不同的要素源具有不同的性能,这和MapGuide中的描述是一样的,另外要素服务类是MapGuide API中MgFeatureService 类的扩展,在AutoCAD Map 3D中, 一个要素类对应有一个地图层,一个层不能包含多个要素类,另外包含要素类的层不能包含AutoCAD实体对象。要素服务通过服务厂对象( AcMapServiceFactory)创建:

MgFeatureService fs;

fs = vice(eService)

as MgFeatureService;

通过要素服务我们可以实现以下任务: