广义地来讲,要素源是存储了要素的数据源,例如Oracle空间数据库、SHP文件等。在MapGuide中,要素源是一种存储在资源库中的资源,它定义了连接到某一种FDO Provider的参数、要素的空间参考系等信息。要素源资源的模式如图10‑14所示,表10‑6列出了要素源定义的一些主要元素。
名称 | 描述 |
Provider | 用于指定要素源使用的FDO Provider的类型和版本号。 |
Parameter | 用于指定连接到指定FDO Provider的连接参数。 |
ConfigurationDocument | 用于指定连接到FDO Provider使用的FDO配置文件。 |
LongTransaction | 用于指定连接到FDO Provider使用的长事务。 |
SupplementalSpatialContextInfo | 用于指定一个补充坐标系,在要素类的坐标系未知或希望覆盖掉要素类已有坐标系的时候用到。 |
Extinsion | 用于扩展要素源中的一个要素类,为此要素类增加额外的属性,目前共支持两种扩展:联接和计算属性。 |
表 10‑6 要素源定义的一些主要元素
图 10‑14 要素源的XML模式
下面的XML定义了一个SHP文件类型的要素源,“Provider”元素用于指定FDO Provider的类型和版本号。由于MapGuide总是忽略FDO Provider的版本号,使用当前安装在MapGuide中的FDO Provider,所以在下面的要素源定义中也可以将“Autodesk.Shp.3.4”替换为“Autodesk.Shp”。
<?xml version="1.0" encoding="UTF-8"?> <FeatureSource version="1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xsi:noNamespaceSchemaLocation="FeatureSource-1.0.0.xsd"> <Provider>OSGeo.SHP.3.4</Provider> <Parameter> <Name>DefaultFileLocation</Name> <Value>%MG_DATA_FILE_PATH%</Value> </Parameter> </FeatureSource> |
与其它类型的资源类系,要素源既资源库中,使用资源ID加以标识,资源ID使用如下格式的URL来指定要素源在资源库中的位置。
Library:://.../<featureSourceName>.FeatureSource |
其中,“…”表示要素源在资源库中的位置,“< featureSourceName >”为要素源的名称,“FeatureSource”表示资源类型为要素源,例如下面的URL是一个完整的要素源URL。
Library://FeatureService/PointsMDB.FeatureSource |
在要素服务中几乎所有方法的第一个参数要求传入一个MgResourceIdentifier对象,用于指定一个操作的要素源。
1.1.1 覆盖坐标系
调用方法MgGeometricPropertyDefinition::GetSpatialContextAssociation()可以得到某个要素类中要素所关联的空间上下文(Spatial Context),然后调用方法MgSpatialContextReader:: GetCoordinateSystem()或MgSpatialContextReader::GetCoordinateSystemWkt()可以根据给定的空间上下文得到要素所使用的坐标系,所以默认情况下MapGuide会自动获取要素所关联的坐标系。但是,如果要素所使用的坐标系是未知的或错误的,那么我们就希望能够覆盖要素所关联的坐标系,要素源定义中的元素SupplementalSpatialContextInfo正是为了解决这样的问题,它的子元素Name用于指定一个需要覆盖坐标系的空间上下文,子元素CoordinateSystem用于指定覆盖后的坐标系。
假设栅格文件g-01.sid的坐标系是未知的,即它所关联的空间上下文“Default”中的坐标系名称和坐标系的WKT都为空,�