書式
SDO_UTIL.TO_GML311GEOMETRY( geometry IN SDO_GEOMETRY ) RETURN CLOB;
説明
Open GIS geometry.xsd
スキーマ文書に定義されたジオメトリ・タイプに基づいて、Spatial and Graphジオメトリ・オブジェクトをGeography Markup Language (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>