对于不同类型的要素源有不同的能力,例如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命令的一个子集,例如FdoICreateSpatialContext、FdoIDestroyDataStore、FdoIDestroySchema等。如果要素源不支持某些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命令和要素服务方法的对应关系