要素服务之空间上下文

一般情况下,如果一个要素类包含一个几何属性,那么它就有一个相关联的空间上下文(Spatial Context),通过这个关联的空间上下文,可以得知要素类中每个几何属性所使用的坐标系信息,例如坐标系名称、坐标的容差值、范围、范围类型等信息,如下的代码展示了如何获得一个要素类所关联的空间上下文名称。

function getSpatialContextName($classDef)

{

    $spatialContextName = “Unknown”;

$props = $classDef->GetProperties();

$propCount = $props->GetCount();

for($i=0; $i<$propCount; $i++)

{

$propDef = $props->GetItem($i);

$propertyType = $propDef->GetPropertyType();

        if ($propertyType = MgPropertyType::Feature)

{

    $spatialContextName = $propDef->SetSpatialContextAssociation();

            break;

        }

}

return $spatialContextName;

}

当知道空间上下文的名称之后,如何得到该空间上下文的信息,例如坐标系名称、坐标的容差值、范围、范围类型等,这就需要调用方法MgFeatureService::GetSpatialContexts(…)来描述空间上下文,该方法的签名如下所示。

MgSpatialContextReader GetSpatialContexts(

MgResourceIdentifier resource,

bool bActiveOnly);

参数resource用于指定一个要素源,参数bActiveOnlyTrue的话,只返回要素源中活动的空间上下文,如果为False,那么返回要素源中所有的空间上下文。该方法的返回值是一个MgSpatialContextReader对象,通过这个空间上下文读取器对象可以得到空间上下文的坐标系名称、坐标的容差值、范围、范围类型等,类MgSpatialContextReader的主要方法及其描述如1018所示。

 

方法

描述

string GetCoordinateSystem();

获得当前空间上下文的坐标系名称。

string GetCoordinateSystemWkt();

获得当前空间上下文WKT格式的坐标系名称。

string GetDescription();

获得当前空间上下文的描述信息。

MgByteReader GetExtent();

获取当前空间上下文的范围。

int GetExtentType();

获取当前空间上下文的范围类型,范围类型可以为:

l  MgSpatialContextExtentType::scDynamic:动态的

l  MgSpatialContextExtentType::scStatic:静态的

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

string GetName();

获取当前空间上下文的名称。

double GetXYTolerance();

获取当前空间上下文的X坐标值的容差值。

double GetZTolerance();

获取当前空间上下文的Y坐标值的容差值。

bool IsActive();

检验当前空间上下文是否为活动的空间上下文。

1018 MgSpatialContextReader的主要方法及其描述

 

下面的代码展示了将MgSpatialContextReader对象中所有空间上下文的信息输出到一个文件。

function printSpatialContextReader($spatialContextReader)

{

   global $agfReaderWriter;

   global $logFileHandle;

   while ($spatialContextReader->ReadNext())

   {

      $name = $spatialContextReader->GetName();

      if ($name == NULL)

          $name = "null";

 

      fwrite($logFileHandle, "Spatial Context Name: "$name"n");

      $description = $spatialContextReader->GetDescription();

      if ($description == NULL)

          $description = "null";

 

      fwrite($logFileHandle, "Description: "$description"n");

      $coordSysName = $spatialContextReader->GetCoordinateSystem();

      if ($coordSysName == NULL)

          $coordSysName = "null";

 

      fwrite($logFileHandle, "Coordinate System Name: "$coordSysName"n");

      $coordSysWkt = $spatialContextReader->GetCoordinateSystemWkt();

      if ($coordSysWkt == NULL)

          $coordSysWkt = "null";

 

      fwrite($logFileHandle, "Coordinate System WKT: "$coordSysWkt"n");

      $extentType = $spatialContextReader->GetExtentType();

      fwrite($logFileHandle, "Extent Type: " . printExtentType($extentType) . "n");

      $extentByteReader = $spatialContextReader->GetExtent();

      if ($extentByteReader == NULL)

      {

         fwrite($logFileHandle,

"MgSpatialContextReader::GetExtent() returned a NULL objectn");

      }

      else

      {

         $extentGeometry = $agfReaderWriter->Read($extentByteReader);

         printAGeometry($extentGeometry);

      }

      $XYTolerance = $spatialContextReader->GetXYTolerance();

      fwrite($logFileHandle, "XY Tolerance: $XYTolerancen");

      $ZTolerance = $spatialContextReader->GetZTolerance();

      fwrite($logFileHandle, "Z Tolerance: $ZTolerancen");

      $isActive = $spatialContextReader->IsActive();

      fwrite($logFileHandle, "Is Active: " . prtBool($isActive) . "n");

   }

}

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值