深入FDO----管理空间上下文

 

空间上下文定义了存储和操作几何数据所需的属性,例如坐标系、坐标容差等。FDO定义了FdoIActivateSpatialContextFdoICreateSpatialContextFdoIDestroySpatialContextFdoIGetSpatialContexts四个命令分别用于设置当前活动的空间上下文、创建一个空间上下文、销毁一个空间上下文和获取空间上下文及其相关信息。目前,所有的Provider都支持FdoIGetSpatialContextsArcSDEMySQLOracleSQL Server支持FdoICreateSpatialContextFdoIDestroySpatialContext命令,SDF支持FdoICreateSpatialContext,但不支持FdoIDestroySpatialContext

一个空间上下文由以下内容组成:

l  名称

空间上下文的名称,用于标识数据源中一个空间上下文。

l  描述

空间上下文的描述信息。

l  坐标系

空间上下文所使用的坐标系的名称。一般情况下,这是一个Mentor格式的坐标系名称。

l  WKT格式坐标系:

空间上下文所使用的坐标系对应的WKT字符串。

l  范围

范围表示几何数据所在空间区域,它是一个矩形或立方体,由左下角坐标和右上角坐标两个坐标点所定义。

l  范围类型

范围类型有两种:动态范围和静态范围。动态范围会随着插入、修改、删除几何数据自动重新进行计算,而静态类型的范围必须在创建空间上下文之时指定,它不会随着要素数据的插入和删除发生变化。

l  容差

容差用于决定两个坐标点是否足够近,在进行计算的时候可以考虑为两个完全相同的坐标点。在FDO中,容差不是通过两个点间的直线距离来衡量的,而是通过比较坐标值在各个轴上的值来衡量的。在多数情况下,比较使用的是小于等于操作符,而不是小于操作符。假设X轴和Y轴的容差值都为0.05,坐标点B(1.0, 1.0)和坐标点A(0.96, 0.96)、坐标点A(1.04, 1.04)认为是等价的,而和坐标点D(0.96, 0.94)、坐标点E(1.04, 1.06)不是等价的。但是,这种关系不具有传递性。如果点AB是等价的,点BC是等价的,这并不意味着点AC是等价的。

如下的代码展示了如何获取空间上下文及其相关信息。

// 假设conn是一个已经打开的FDO连接对象

FdoPtr<FdoIGetSpatialContexts> gscCmd =

(FdoIGetSpatialContexts*)conn->CreateCommand(FdoCommandType_GetSpatialContexts);

// 如果只想得到当前活动的空间上下文,请不要注释下面的语句

// gscCmd->SetActiveOnly();

// 执行命令,得到空间上下文读取器

FdoPtr<FdoISpatialContextReader> reader = gscCmd->Execute();

// 遍历空间上下文读取器

while ( reader->ReadNext() ) {

FdoStringP name = reader->GetName();

FdoStringP desc = reader->GetDescription();

FdoStringP cs = reader->GetCoordinateSystem();

FdoStringP csWkt = reader->GetCoordinateSystemWkt();

FdoSpatialContextExtentType extentType = reader->GetExtentType();

FdoPtr<FdoByteArray> ext = reader->GetExtent();

double xyTol = reader->GetXYTolerance();

double zTol = reader->GetZTolerance();

bool isActive = reader->IsActive();

}

一般情况下,几何属性或栅格属性有一个关联的空间上下文,调用FdoGeometricPropertyDefinition:: GetSpatialContextAssociation()FdoRasterPropertyDefinition:: GetSpatialContextAssociation()可以得到关联空间上下文的名称。

给定一个几何属性,如下的代码展示了如何得到这个几何属性使用的坐标系名称。

// 假设geomPropDef是一个FdoGeometricPropertyDefinition实例

// 得到几何属性geomPropDef所关联的空间上下文的名称

FdoStringP scName = geomPropDef->GetSpatialContextAssociation();

// 创建FDO命令

FdoPtr<FdoIGetSpatialContexts> gscCmd =

(FdoIGetSpatialContexts*)conn->CreateCommand(FdoCommandType_GetSpatialContexts);

// 执行命令,得到空间上下文读取器

FdoPtr<FdoISpatialContextReader> reader = gscCmd->Execute();

// 遍历空间上下文读取器

while ( reader->ReadNext() ) {

if (scName == reader->GetName()) {

// 得到几何属性使用的坐标系名称

FdoStringP cs = reader->GetCoordinateSystem();

FdoStringP csWkt = reader->GetCoordinateSystemWkt();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值