書式
SDO_UTIL.TO_KMLGEOMETRY( geometry IN SDO_GEOMETRY ) RETURN CLOB;
説明
Spatial and Graphジオメトリ・オブジェクトをKML (Keyhole Markup Language)ドキュメントに変換します。
使用上の注意
このファンクションは、円、円弧を含むジオメトリ、LRSジオメトリ、またはSDO_ETYPE値が0(タイプ0(ゼロ)要素)であるジオメトリは変換しません。これらを指定した場合、空のCLOBが戻されます。
ポリゴンの定義には、Oracle9i以降のリリースのSpatial and Graphの表記規則を使用する必要があります。これによって、外側の境界が先に格納され(ETYPE=1003)、次に0 (ゼロ)個以上の内側の境界要素が格納されます(ETYPE=2003)。穴のあるポリゴンでは、外側の境界をSDO_ORDINATES定義によって先に格納し、次に内側の境界の座標を格納する必要があります。
LRSジオメトリは、TO_KMLGEOMETRYファンクションに渡す前に、(SDO_LRS.CONVERT_TO_STD_GEOMファンクションまたはSDO_LRS.CONVERT_TO_STD_LAYERファンクションを使用して)標準ジオメトリに変換しておく必要があります。
円弧または円は、TO_KMLGEOMETRYファンクションに渡す前に、(SDO_GEOM.SDO_ARC_DENSIFYファンクションを使用して)稠密化しておくか、または(SDO_GEOM.SDO_BUFFERファンクションを使用して)ポリゴンとして表現しておく必要があります。
ラベル点は廃棄されます。したがって、ジオメトリがSDO_POINT、SDO_ELEM_INFOおよびSDO_ORDINATESフィールドに値を持つ場合、SDO_POINTはKMLドキュメントに出力されません。
KML 2.1ではソリッドがサポートされていないため、ソリッド・ジオメトリは、KML MultiGeometryオブジェクトに変換されます。その後、MultiGeometryに対してSDO_UTIL.FROM_KMLGEOMETRYファンクションを使用した場合、結果としてOracle Spatial and Graphソリッド・ジオメトリは生成されません(つまり、SDO_GTYPE値は、SOLIDまたはMULTISOLIDのジオメトリ・タイプを反映しません)。
KML出力の形式は整えられないため、タグの改行またはインデントは行われません。SQL*Plusで戻されるCLOBの内容を確認するには、TO_CHAR()ファンクションを使用するか、またはSQL*PlusパラメータのLONGを適切な値に設定してください(SET LONG 2000
など)。形式を整えてGMLを出力するか、またはSQLXやOracle XML DBファンクション(XMLELEMENTなど)でTO_KMLGEOMETRYの戻り値を使用するには、XMLTYPE (clobval CLOB)コンストラクタを使用してください。
例
次の例では、KML形式への変換と逆変換を示します。(例では、「空間データの挿入、索引付けおよび問合せの例」の特にCOLA_MARKETS表のcola_c
ジオメトリについて、その定義およびデータを使用しています。)
-- Convert cola_c geometry to a KML document; convert that result to -- a spatial geometry. set long 2000; DECLARE kmlgeom CLOB; val_result VARCHAR2(5); geom_result SDO_GEOMETRY; geom SDO_GEOMETRY; BEGIN SELECT c.shape INTO geom FROM cola_markets c WHERE c.name = 'cola_c'; -- To KML geometry kmlgeom := SDO_UTIL.TO_KMLGEOMETRY(geom); DBMS_OUTPUT.PUT_LINE('To KML geometry result = ' || TO_CHAR(kmlgeom)); -- From KML geometry geom_result := SDO_UTIL.FROM_KMLGEOMETRY(kmlgeom); -- Validate the returned geometry. val_result := SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(geom_result, 0.005); DBMS_OUTPUT.PUT_LINE('Validation result = ' || val_result); END; / To KML geometry result = <Polygon><extrude>0</extrude><tessellate>0</tessellate><altitudeMode>relativeToG round</altitudeMode><outerBoundaryIs><LinearRing><coordinates>3.0,3.0 6.0,3.0 6.0,5.0 4.0,5.0 3.0,3.0 </coordinates></LinearRing></outerBoundaryIs></Polygon> Validation result = TRUE