获取要素源的能力

本文介绍了一种检测地理信息系统中要素源支持的命令方法,并提供了具体的实现代码。通过这些方法可以了解不同类型的要素源(如SDF)所支持的功能,如执行SQL语句等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于不同类型的要素源有不同的能力,例如SDF要素源不支持执行SQL语句,要素源能力可以分为如下的类型:

l  连接(Connection)

l  模式(Schema)

l  命令(Commands)

l  表达式(Expressions)

l  过滤条件(Filters)

l  栅格数据(Raster)

l  拓扑(Topology)

调用方法MgFeatureService::GetCapabilities(…)可以得到以XML格式表示的要素源的能力,这样我们可以按照要素源的能力有条件地执行某些代码,该方法的签名如下所示,参数providerName用于指定FDO Provider的名称,这个名称不包含版本号,例如“OSGeo.SDF”。

MgByteReader GetCapabilities(string providerName);

下面的代码创建了一个方法,用于检测指定的FDO Provider是否支持指定名称的命令,例如调用SupportCommand("OSGeo.SDF", "SQLCommand")会返回值FALSE,因为SDF不支持FdoISQLCommand命令。

function SupportCommand ($providerName, $commandName)

{

$featureService = $siteConnection->CreateService(MgServiceType::FeatureService);

$byteReader = $featureService->GetCapabilities($providerName);

  $doc = new DOMDocument();

  $byteSink = new MgByteSink($byteReader);

  $filePath = "temp_byte_reader_file.$providerName";

  $byteSink->ToFile($filePath);

  $doc->load($filePath);

  $xpath = new DOMXPath($doc);

  $domNodeList = $xpath->query("

//FeatureProviderCapabilities/Command/SupportedCommands/Name");

  $count = $domNodeList->length;

  for($i=0; $i<$count; $i++) {

    $domNode = $domNodeList->item($i);

    $value = $domNode->nodeValue;

    If ($value == $commandName) return TRUE;

  }

  return FALSE;

}

要素服务中的大多数方法都是对FDO命令的包装,FDO命令和要素服务方法的对应关系如表8-2所示,从表8-2可以看到要素服务仅仅包含了FDO命令的一个子集,例如FdoICreateSpatialContextFdoIDestroyDataStoreFdoIDestroySchema等。如果要素源不支持某些FDO命令,仍然调用要素服务中对应的方法会导致抛出一个异常,例如SDF不支持FdoISQLCommand命令,所以针对SDF要素源调用方法MgFeatureService::ExecuteSqlQuery(…)会抛出一个异常。

命令名称

FDO命令

要素服务方法

CreateStore

ApplySchema

DescribeSchema

CreateSpatialContext

FdoICreateStore

FdoIApplySchema

FdoIDescribeSchema

FdoICreateSpatialContext

CreateFeatureSource

DescirbeSchema

FdoIDescirbeSchema

DescribeSchema

DescribeSchemaAsXml

GetClassDefinition

GetClasses

GetSchema

ListDataStores

FdoIListDataStores

EnumerateDataStores

SQLCommand

FdoISQLCommand

ExecuteSqlQuery

ExecuteSqlNoQuery

GetLongTransactions

FdoIGetLongTransactions

GetLongTransaction

SetLongTransaction

DescribeSchemaMapping

FdoIDescribeSchemaMapping

GetSchemaMapping

GetSpatialContexts

FdoIGetSpatialContexts

GetSpatialContexts

Select

FdoISelect

SelectFeatures

SelectAggregate

FdoISelectAggregate

SelectAggregate

Delete

Insert

Update

AcquireLock

ReleaseLock

FdoIDelete

FdoIInsert

FdoIUpdate

FdoIAcquireLock

FdoIReleaseLock

UpdateFeatures

8-2 FDO命令和要素服务方法的对应关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值