プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

31.36 SDO_UTIL.TO_GML311GEOMETRY

書式

SDO_UTIL.TO_GML311GEOMETRY(
     geometry  IN SDO_GEOMETRY 
     ) RETURN CLOB;

説明

Open GIS geometry.xsdスキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトをGeography Markup Language (GMLバージョン3.1.1)フラグメントに変換します。

パラメータ

geometry

GMLバージョン3.1.1のフラグメントを戻すジオメトリを指定します。

使用上の注意

このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。

このファンクションは、Open GIS実装仕様に定義されたいくつかのGMLジオメトリ・タイプに基づいて、入力ジオメトリをGMLバージョン3.1.1のフラグメントに変換します。

ポリゴンの定義には、Oracle9i以降のリリースのSpatial and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。

LRSジオメトリは、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。(CONVERT_TO_STD_GEOMファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

円弧または円は、TO_GMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。(SDO_ARC_DENSIFYファンクションとTO_GMLGEOMETRYファンクションを併用する例については、「例」を参照してください。)

ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはGMLフラグメントに出力されません。

SDO_SRID値は、srsName="SDO:<srid>"の形式で出力されます。たとえば、"SDO:8307"はSDO_SRID値が8307であることを示し、"SDO:"はSDO_SRID値がNULLであることを示します。SDO_SRID値の妥当性または一貫性チェックは行われません。たとえば、値がMDSYS.CS_SRS表に存在するかどうか、またはUSER_SDO_GEOM_METADATAビューのレイヤーのSRID値と競合するかどうかの確認は行われません。

NLS_NUMERIC_CHARACTERS設定で小数点文字に','(カンマ)が指定されている場合でも、座標は常に、<coordinates>タグ、decimal='.'cs=','(座標セパレータにカンマ)、およびts=' '(組セパレータに空白)を使用して出力されます。

GML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 40000など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_GMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。

次の例では、COLA_MARKETS表のcola_bジオメトリについてGMLバージョン3.1.1のフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

-- Convert cola_b geometry to GML 3.1.1 fragment.
SELECT TO_CHAR(SDO_UTIL.TO_GML311GEOMETRY(shape)) AS Gml311Geometry 
  FROM COLA_MARKETS c WHERE c.name = 'cola_b';

GML311GEOMETRY
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml"><gml:exterior
><gml:LinearRing><gml:posList srsDimension="2">5.0 1.0 8.0 1.0 8.0 6.0 5.0 7.0 5
.0 1.0 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>

次の例では、COLA_MARKETS表のcola_dジオメトリの円弧を稠密化したGMLバージョン3.1.1のフラグメントを戻します。(例では、「空間データの挿入、索引付けおよび問合せの例」の定義およびデータを使用しています。)

SET LONG 40000
SELECT XMLTYPE(SDO_UTIL.TO_GML311GEOMETRY(
  SDO_GEOM.SDO_ARC_DENSIFY(c.shape, m.diminfo, 'arc_tolerance=0.05')))
    AS Gml311Geometry FROM cola_markets c, user_sdo_geom_metadata m 
    WHERE m.table_name = 'COLA_MARKETS' AND m.column_name = 'SHAPE' 
    AND c.name = 'cola_d';

GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">             
  <gml:exterior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">8.0 7.0 8.76536686473018 7.15224093497743 9.
4142135623731 7.58578643762691 9.84775906502257 8.23463313526982 10.0 9.0 9.8477
5906502257 9.76536686473018 9.4142135623731 10.4142135623731 8.76536686473018 10
.8477590650226 8.0 11.0 7.23463313526982 10.8477590650226 6.58578643762691 10.41
42135623731 6.15224093497743 9.76536686473018 6.0 9.0 6.15224093497743 8.2346331
3526982 6.58578643762691 7.5857864376269 7.23463313526982 7.15224093497743 8.0 7
.0 </gml:posList>                                                               
    </gml:LinearRing>                                                           
  </gml:exterior>                                                               
</gml:Polygon>

次の例では、LRSジオメトリを標準ジオメトリに変換して、そのジオメトリのGMLバージョン3.1.1のフラグメントを戻します。(例では、「LRSファンクションの例」の定義およびデータを使用しています。)

SET LONG 40000
-- Convert LRS grometry to standard geometry before using TO_GML311GEOMETRY.
SELECT XMLTYPE(SDO_UTIL.TO_GML311GEOMETRY(
  SDO_LRS.CONVERT_TO_STD_GEOM(route_geometry)))
  AS Gml311Geometry FROM lrs_routes a WHERE a.route_id = 1;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Curve srsName="SDO:" xmlns:gml="http://www.opengis.net/gml">               
  <gml:segments>                                                                
    <gml:LineStringSegment>                                                     
      <gml:posList srsDimension="2">2.0 2.0 2.0 4.0 8.0 4.0 12.0 4.0 12.0 10.0 8
.0 10.0 5.0 14.0 </gml:posList>                                                 
    </gml:LineStringSegment>                                                    
  </gml:segments>                                                               
</gml:Curve>

次の例では、様々なジオメトリ・タイプのGMLバージョン3.1.1のフラグメントを戻します。

-- Point geometry with coordinates in SDO_ORDINATES. Note the
--    coordinates in the GML are (10.0 10.0) and the values in the
--    SDO_POINT field are discarded.
SELECT TO_CHAR(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2001, 8307,
    sdo_point_type(-80, 70, null),
    sdo_elem_info_array(1,1,1), sdo_ordinate_array(10, 10)))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Point srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:posLis
t srsDimension="2">10.0 10.0 </gml:posList></gml:Point>                         
                                                                                
 
-- Multipolygon
SET LONG 40000
SELECT SDO_UTIL.TO_GML311GEOMETRY(
  sdo_geometry(2007, 8307, null,
   sdo_elem_info_array(1,1003,1, 13,1003,1, 23,1003,3),
   sdo_ordinate_array(10.10,10.20, 20.50,20.10, 30.30,30.30, 40.10,40.10,
     30.50, 30.20, 10.10, 10.20,
     5,5, 5,6, 6,6, 6,5, 5,5, 7,7, 8,8 ))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:MultiSurface srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml
:surfaceMember><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimens
ion="2">10.1 10.2 20.5 20.1 30.3 30.3 40.1 40.1 30.5 30.2 10.1 10.2 </gml:posLis
t></gml:LinearRing></gml:exterior></gml:Polygon></gml:surfaceMember><gml:surface
Member><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList srsDimension="2">
5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gml:posList></gml:LinearRing></gml:ext
erior></gml:Polygon></gml:surfaceMember><gml:surfaceMember><gml:Polygon><gml:ext
erior><gml:LinearRing><gml:posList srsDimension="2">7.0 7.0 8.0 7.0 8.0 8.0 7.0 
8.0 7.0 7.0 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></gml:su
rfaceMember></gml:MultiSurface>                                                 
                                                                                
SET LONG 80
-- Rectangle (geodetic)
SELECT TO_CHAR(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 8307, null,
   sdo_elem_info_array(1,1003,3),
    sdo_ordinate_array(10.10,10.10, 20.10,20.10 )))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:exte
rior><gml:LinearRing><gml:posList srsDimension="2">10.1 10.1 20.1 10.1 20.1 20.1
 10.1 20.1 10.1 10.1 </gml:posList></gml:LinearRing></gml:exterior></gml:Polygon
>

-- Polygon with holes
SELECT TO_CHAR(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 262152, null,
   sdo_elem_info_array(1,1003,3, 5, 2003, 1, 13, 2003, 1),
   sdo_ordinate_array(10.10,10.20, 40.50, 41.10, 30.30, 30.30, 30.30,
     40.10, 40.10, 40.10, 30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml"><gml:ex
terior><gml:LinearRing><gml:posList srsDimension="2">10.1 10.2 40.5 10.2 40.5 41
.1 10.1 41.1 10.1 10.2 </gml:posList></gml:LinearRing></gml:exterior><gml:interi
or><gml:LinearRing><gml:posList srsDimension="2">30.3 30.3 30.3 40.1 40.1 40.1 3
0.3 30.3 </gml:posList></gml:LinearRing></gml:interior><gml:interior><gml:Linear
Ring><gml:posList srsDimension="2">5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gml
:posList></gml:LinearRing></gml:interior></gml:Polygon>                         
                                                                                
 
-- Creating an XMLTYPE from the GML fragment. Also useful for "pretty
--  printing" the GML output.
SET LONG 40000
SELECT XMLTYPE(
  SDO_UTIL.TO_GML311GEOMETRY(sdo_geometry(2003, 262152, null,
   sdo_elem_info_array(1,1003,1, 11, 2003, 1, 21, 2003, 1),
   sdo_ordinate_array(10.10,10.20, 40.50,10.2, 40.5,41.10, 10.1,41.1,
     10.10, 10.20, 30.30,30.30, 30.30, 40.10, 40.10, 40.10, 40.10, 30.30,
     30.30, 30.30, 5, 5, 5, 6, 6, 6, 6, 5, 5, 5 )))
)
AS Gml311Geometry FROM DUAL;
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
<gml:Polygon srsName="SDO:262152" xmlns:gml="http://www.opengis.net/gml">       
  <gml:exterior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">10.1 10.2 40.5 10.2 40.5 41.1 10.1 41.1 10.1
 10.2 </gml:posList>                                                            
    </gml:LinearRing>                                                           
  </gml:exterior>                                                               
  <gml:interior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">30.3 30.3 30.3 40.1 40.1 40.1 40.1 30.3 30.3
 30.3 </gml:posList>                                                            
 
GML311GEOMETRY                                                                  
--------------------------------------------------------------------------------
    </gml:LinearRing>                                                           
  </gml:interior>                                                               
  <gml:interior>                                                                
    <gml:LinearRing>                                                            
      <gml:posList srsDimension="2">5.0 5.0 5.0 6.0 6.0 6.0 6.0 5.0 5.0 5.0 </gm
l:posList>                                                                      
    </gml:LinearRing>                                                           
  </gml:interior>                                                               
</gml:Polygon>