深入FDO----模式覆盖

一般情况下,只有ODBCRasterWMS Provider需要使用模式覆盖,所以本节主要介绍如何为这三种Provider创建模式覆盖。

1.1.1        模式覆盖

使用模式覆盖,FDO应用程序就可以定制逻辑模式和物理存储之间的映射。由于不同的Provider用于支持的不同的数据,不同数据的物理存储格式差异很大,所以模式映射也因Provider而异,例如基于RDBMSProvider要提供要素类和数据库表、属性和数据库表中的列之间的映射,而某些Provider与数据库表和列毫无关系。当然,有些Provider并不支持模式覆盖,这时它总是使用默认的模式映射。

使用FdoIDescribeSchemaMapping命令可以描述当前FDO连接的模式映射,但是FDO并没有提供命令来修改或应用新的模式映射,即进行模式覆盖,但是用户可以通过如下两种方式之一实现模式覆盖。

1)  使用FdoIApplySchema命令

命令FdoIApplySchema不仅可以用来创建和修改模式,而且还可以为模式指定模式映射。FDO使用类FdoPhysicalSchemaMapping代表某个模式的模式映射,调用方法FdoIApplySchema::SetPhysicalMapping(...)就可以设置模式的模式映射。支持模式覆盖的Provider都提供了一些特有的API用于创建FdoPhysicalSchemaMapping的实例,事实上这些API正是Provider API最大的不同之处,调用方法FdoIApplySchema::SetPhysicalMapping(...)就可以设置模式的模式映射。

// 创建ApplySchema命令

FdoPtr<FdoIApplySchema> sampleApplySchema = (FdoIApplySchema *)

connection->CreateCommand(FdoCommandType_ApplySchema);

// 创建要素模式

FdoPtr<FdoFeatureSchema> sampleFeatureSchema =

FdoFeatureSchema::Create(L"SampleFeatureSchema", L"要素模式描述");

// 为此模式添加类和属性

......

// 创建模式映射,得到一个FdoPhysicalSchemaMapping的实例schemaMapping

......

sampleApplySchema->SetPhysicalMapping(schemaMapping);

// 执行命令,创建模式和模式映射

sampleApplySchema->Execute();

 

2)  使用FDO配置文件

创建一个XML格式的配置文件,在配置文件中指定模式映射,最后调用方法FdoIConnection::SetConfiguration(...)设置配置文件,从而应用新的模式映射。主要注意的是,调用方法FdoIConnection::SetConfiguration(...)FDO连接必须是关闭的。

给定一个配置文件“config.xml”,如下的代码展示了如何覆盖默认的模式映射。

// 读取文件config.xml

FdoIoFileStreamP fileStream = FdoIoFileStream::Create(L"config.xml", L"r");

// 设置模式映射

connection->SetConfiguration(fileStream);

// 打开FDO连接

connection->SetConnectionString(...);

connection->Open();

需要注意的是,配置文件中不仅包含了模式映射信息,而且还包含了空间上下文和模式信息,因为模式映射信息依赖于空间上下文和模式信息。

1.1.2        ODBC Provider的模式覆盖

ODBC Provider主要用于读取存储在RDBMS数据库中的点数据。默认情况下,ODBC Provider会将数据库中的一个表映射为FDO中一个同名的类,表中的每一列映射为FDO类中一个同名的属性。如果一个表中有名称为“X”、“Y”、“Z”的列或“Lon”、“Lan”的列,那么这些列会被映射为一个类型为点、名称为“Geometry”的几何属性。其中,列“Z”不是必需的。

默认的模式映射一般可以满足大部分的需求,但是如果想把表中名称不是“X”、“Y”、“Z”或“Lon”、“Lan”的列映射为一个点类型的几何属性,那么就需要使用模式覆盖。

给定RDBMS中的一个名称为“Cities”的表,这个表包含了四个列“CITY_ID”、“NAME”、“POS_X”和“POS_Y”,默认的模式映射不会将列“POS_X”和“POS_Y”映射为点类型的几何属性。通过应用如下的配置文件,可以将列“POS_X”和“POS_Y”映射为点类型的几何属性。

<?xml version="1.0" encoding="UTF-8"?>

<fdo:DataStore xmlns:xs=http://www.w3.org/2001/XMLSchema

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:fdo="http://fdo.osgeo.org/schemas" xmlns:fds="http://fdo.osgeo.org/schemas/fds">

  <gml:DerivedCRS gml:id="Default">

    <gml:metaDataProperty>

      <gml:GenericMetaData>

        <fdo:XYTolerance>0.001000</fdo:XYTolerance>

        <fdo:ZTolerance>0.001000</fdo:ZTolerance>

      </gml:GenericMetaData>

    </gml:metaDataProperty>

    <gml:remarks>Default Database Spatial Context</gml:remarks>

    <gml:srsName>Default</gml:srsName>

    <gml:validArea>

      <gml:boundingBox>

        <gml:pos>-2000000.000000 -2000000.000000</gml:pos>

        <gml:pos>2000000.000000 2000000.000000</gml:pos>

      </gml:boundingBox>

    </gml:validArea>

    <gml:baseCRS xlink:href="http://fdo.osgeo.org/crs#default_cartesian" />

<gml:definedByConversion

xlink:href="http://fdo.osgeo.org/coord_conversions#identity" />

<gml:derivedCRSType codeSpace="http://fdo.osgeo.org/crs_types">

geographic

</gml:derivedCRSType>

    <gml:usesCS xlink:href="http://fdo.osgeo.org/cs#default_cartesian" />

  </gml:DerivedCRS>

  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://fdo.osgeo.org/schemas/feature/Fdo"

xmlns:fdo="http://fdo.osgeo.org/schemas" xmlns:gml="http://www.opengis.net/gml"

xmlns:Fdo="http://fdo.osgeo.org/schemas/feature/Fdo" elementFormDefault="qualified"

attributeFormDefault="unqualified">

    <xs:annotation>

      <xs:documentation />

    </xs:annotation>

<xs:element name="Cities" type="Fdo:CitiesType" abstract="false"

substitutionGroup="gml:_Feature">

      <xs:key name="CitiesKey">

        <xs:selector xpath=".//Cities" />

        <xs:field xpath="CITY_ID" />

      </xs:key>

    </xs:element>

    <xs:complexType name="CitiesType" abstract="false" fdo:geometryName="Geometry">

      <xs:annotation>

        <xs:documentation />

      </xs:annotation>

      <xs:complexContent>

        <xs:extension base="gml:AbstractFeatureType">

          <xs:sequence>

            <xs:element name="CITY_ID" minOccurs="0">

              <xs:simpleType>

                <xs:restriction base="fdo:int16" />

              </xs:simpleType>

              <xs:annotation>

                <xs:documentation />

              </xs:annotation>

            </xs:element>

            <xs:element name="NAME" minOccurs="0">

              <xs:annotation>

                <xs:documentation />

              </xs:annotation>

              <xs:simpleType>

                <xs:restriction base="xs:string">

                  <xs:maxLength value="255" />

                </xs:restriction>

              </xs:simpleType>

            </xs:element>

            <xs:element name="Geometry" type="gml:AbstractGeometryType"

fdo:hasMeasure="false" fdo:hasElevation="false" fdo:srsName="Default"

fdo:geometricTypes="point " fdo:geometryTypes="point ">

              <xs:annotation>

                <xs:documentation />

              </xs:annotation>

            </xs:element>

          </xs:sequence>

        </xs:extension>

      </xs:complexContent>

    </xs:complexType>

  </xs:schema>

  <SchemaMapping xmlns:rdb=http://fdordbms.osgeo.org/schemas

xmlns="http://fdoodbc.osgeo.org/schemas" provider="OSGeo.ODBC.3.5" name="Fdo">

    <complexType name="CitiesType">

      <Table name="Cities" />

      <element name="CITY_ID">

        <Column name="CITY_ID" />

      </element>

      <element name="NAME">

        <Column name="NAME" />

      </element>

      <element name="Geometry" GeometricContentType="Ordinates"

xColumnName="POS_X" yColumnName="POS_Y" />

    </complexType>

  </SchemaMapping>

</fdo:DataStore>

配置文件中,元素<SchemaMapping>用于设置模式映射,它将表“Cities”映射为要素类“Cities”,将列“CITY_ID”、“NAME”映射为同名的属性,将列“POS_X”和“POS_Y”映射为名称为“Geometry”的几何属性。当然,在模式映射时,可以将表和列映射为不同名称的要素类和属性。

1.1.3        Raster Provider的模式覆盖

Raster Provider主要用于读取各种类型的栅格数据。默认情况下,如果连接到一个文件夹, Raster Provider会将文件夹下不同类型、不同坐标系的栅格图像映射到不同的类,第一个类的名称为“default”,其它类的名称为“defaultN”,其中“N”为一个递增的整数;如果连接到一个文件,Raster Provider会将此文件映射到一个名称为“default”的类。

默认的模式映射一般可以满足大部分的需求,但是如果图像中没有包含坐标系名称、图像的位置、X轴和Y轴的旋转角度,或需要将多张图像组成一张多通道的图像,那么就需要使用模式覆盖。

假设文件夹“C:/raster”下有一个JPG格式的栅格文件“Sunset.jpg ”,JPG格式的栅格文件不包含坐标系名称和图像位置信息,通过应用如下的配置文件,可以其映射为要素类“Sunset”中的一个要素,并且为这张图像指定了位置和旋转角度。

<?xml version="1.0" encoding="UTF-8"?>

<fdo:DataStore xmlns:xs=http://www.w3.org/2001/XMLSchema

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:fdo="http://fdo.osgeo.org/schemas" xmlns:fds="http://fdo.osgeo.org/schemas/fds">

  <gml:DerivedCRS gml:id="EPSG:26710">

    <gml:metaDataProperty>

      <gml:GenericMetaData>

        <fdo:XYTolerance>0.001000</fdo:XYTolerance>

        <fdo:ZTolerance>0.001000</fdo:ZTolerance>

      </gml:GenericMetaData>

    </gml:metaDataProperty>

    <gml:remarks>System generated default FDO Spatial Context </gml:remarks>

    <gml:srsName>EPSG:26710</gml:srsName>

    <gml:validArea>

      <gml:boundingBox>

        <gml:pos>531705.000000 4483125.000000</gml:pos>

        <gml:pos>542355.000000 4497045.000000</gml:pos>

      </gml:boundingBox>

    </gml:validArea>

    <gml:baseCRS xlink:href="http://fdo.osgeo.org/schemas/feature/crs/#EPSG:26710" />

<gml:definedByConversion

xlink:href="http://fdo.osgeo.org/coord_conversions#identity" />

<gml:derivedCRSType codeSpace="http://fdo.osgeo.org/crs_types">

geographic

</gml:derivedCRSType>

    <gml:usesCS xlink:href="http://fdo.osgeo.org/cs#default_cartesian" />

  </gml:DerivedCRS>

  <xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema targetNamespace="http://fdo.osgeo.org/schemas/feature/rasters" xmlns:fdo="http://fdo.osgeo.org/schemas" xmlns:gml="http://www.opengis.net/gml" xmlns:rasters="http://fdo.osgeo.org/schemas/feature/rasters" elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:element name="Sunset" type="rasters:SunsetType" abstract="false"

substitutionGroup="gml:_Feature">

      <xs:key name="SunsetKey">

        <xs:selector xpath=".//Sunset" />

        <xs:field xpath="Id" />

      </xs:key>

    </xs:element>

    <xs:complexType name="SunsetType" abstract="false" fdo:hasGeometry="false">

      <xs:complexContent>

        <xs:extension base="gml:AbstractFeatureType">

          <xs:sequence>

            <xs:element name="Id">

              <xs:annotation>

                <xs:documentation />

              </xs:annotation>

              <xs:simpleType>

                <xs:restriction base="xs:string">

                  <xs:maxLength value="256" />

                </xs:restriction>

              </xs:simpleType>

            </xs:element>

            <xs:element name="Image" type="fdo:RasterPropertyType"

fdo:defaultImageXSize="200" fdo:defaultImageYSize="200"

fdo:srsName="EPSG:26710">

              <xs:annotation>

                <xs:appinfo source="http://fdo.osgeo.org/schemas">

                  <fdo:DefaultDataModel dataModelType="Unknown"

dataType="Unknown" organization="Row" bitsPerPixel="32"

tileSizeX="128" tileSizeY="128" />

                </xs:appinfo>

              </xs:annotation>

            </xs:element>

          </xs:sequence>

        </xs:extension>

      </xs:complexContent>

    </xs:complexType>

  </xs:schema>

  <SchemaMapping provider="Autodesk.Raster.3.5" name="rasters"

xmlns="http://www.autodesk.com/isd/fdo/RasterFileProvider">

    <complexType name="SunsetType">

      <RasterDefinition name="rasters">

        <Location name="C:/raster">

          <Feature name="Sunset.jpg">

            <Band name="RGB" number="1">

              <Image name="Sunset.jpg" frame="1">

                <Georeference>

                  <InsertionPointX>627759</InsertionPointX>

                  <InsertionPointY>5859750</InsertionPointY>

                  <ResolutionX>63.5492708333333</ResolutionX>

                  <ResolutionY>67.5188541666667</ResolutionY>

                  <RotationX>0.24311563815655</RotationX>

                  <RotationY>0.24311563815655</RotationY>

                </Georeference>

              </Image>

            </Band>

          </Feature>

        </Location>

      </RasterDefinition>

    </complexType>

  </SchemaMapping>

</fdo:DataStore>

1.1.4        WMS Provider的模式覆盖

WMS为访问栅格格式的地图数据定义了一个简单的HTTP接口,一个WMS请求定义了访问的图层和区域,响应结果是一张或多张栅格图像。这些接口还支持将多个图层组合在一起,指定返回图像的格式、背景色等信息。WMS Provider就是用于读取WMS服务器发布的栅格地图数据。

默认情况下,WMS Provider会将每个WMS图层映射为一个要素类,使用PNG格式的图像返回地图图像数据。如果想将多个图层组合在一起,指定返回图像的格式、背景色等信息,那么就需要使用模式覆盖。

假设我们打算连接到WMS服务器http://wms.jpl.nasa.gov/wms.cgi,通过应用如下的配置文件,可以将WMS图层WMS_Schema:global_mosaicWMS_Schema:global_mosaic_base组合在一起,映射为类global_mosaic,并且设置WMS服务器返回PNG格式的图像。<Layer>元素的顺序会决定WMS图层的组合顺序,在下面的配置文件中图层WMS_Schema:global_mosaic位于图层WMS_Schema:global_mosaic_base的上方。

<?xml version="1.0" encoding="UTF-8"?>

<fdo:DataStore xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml=http://www.opengis.net/gml

xmlns:fdo="http://fdo.osgeo.org/schemas" xmlns:fds="http://fdo.osgeo.org/schemas/fds">

  <gml:DerivedCRS gml:id="EPSG:4326">

    <gml:metaDataProperty>

      <gml:GenericMetaData>

        <fdo:XYTolerance>0.001000</fdo:XYTolerance>

        <fdo:ZTolerance>0.001000</fdo:ZTolerance>

      </gml:GenericMetaData>

    </gml:metaDataProperty>

    <gml:srsName>EPSG:4326</gml:srsName>

    <gml:validArea>

      <gml:boundingBox>

        <gml:pos>-180.000000 -90.000000</gml:pos>

        <gml:pos>180.000000 90.000000</gml:pos>

      </gml:boundingBox>

    </gml:validArea>

    <gml:baseCRS xlink:href="http://fdo.osgeo.org/schemas/feature/crs/#EPSG:4326" />

    <gml:definedByConversion

xlink:href="http://fdo.osgeo.org/coord_conversions#identity" />

    <gml:derivedCRSType codeSpace="http://fdo.osgeo.org/crs_types">

geographic

</gml:derivedCRSType>

    <gml:usesCS xlink:href="http://fdo.osgeo.org/cs#default_cartesian" />

  </gml:DerivedCRS>

  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://fdo.osgeo.org/schemas/feature/WMSLayers"

xmlns:fdo="http://fdo.osgeo.org/schemas" xmlns:gml="http://www.opengis.net/gml"

xmlns:WMSLayers="http://fdo.osgeo.org/schemas/feature/WMSLayers"

elementFormDefault="qualified" attributeFormDefault="unqualified">

    <xs:element name="global_mosaic" type="WMSLayers:global_mosaicType"

abstract="false" substitutionGroup="gml:_Feature">

      <xs:key name="global_mosaicKey">

        <xs:selector xpath=".//global_mosaic" />

        <xs:field xpath="Id" />

      </xs:key>

    </xs:element>

    <xs:complexType name="global_mosaicType" abstract="false" fdo:hasGeometry="false">

      <xs:annotation>

        <xs:documentation>WMS Global Mosaic, pan sharpened</xs:documentation>

      </xs:annotation>

      <xs:complexContent>

        <xs:extension base="gml:AbstractFeatureType">

          <xs:sequence>

            <xs:element name="Id">

              <xs:annotation>

                <xs:documentation />

              </xs:annotation>

              <xs:simpleType>

                <xs:restriction base="xs:string">

                  <xs:maxLength value="256" />

                </xs:restriction>

              </xs:simpleType>

            </xs:element>

            <xs:element name="Image" type="fdo:RasterPropertyType"

fdo:defaultImageXSize="1024" fdo:defaultImageYSize="1024"

fdo:srsName="EPSG:4326" />

          </xs:sequence>

        </xs:extension>

      </xs:complexContent>

    </xs:complexType>

  </xs:schema>

  <SchemaMapping provider="OSGeo.WMS.3.5" name="WMSLayers"

xmlns="http://fdowms.osgeo.org/schemas">

    <complexType name="global_mosaicType">

      <RasterDefinition name="Image">

        <Format>PNG</Format>

        <FormatType>image/png</FormatType>

        <Transparent>true</Transparent>

        <UseTileCache>false</UseTileCache>

        <BackgroundColor>

        </BackgroundColor>

        <Time>

        </Time>

        <Elevation>

        </Elevation>

        <SpatialContext>EPSG:4326</SpatialContext>

        <Layer name="WMS_Schema:global_mosaic" />

        <Layer name="WMS_Schema:global_mosaic_base" />

      </RasterDefinition>

    </complexType>

  </SchemaMapping>

</fdo:DataStore>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值