Google Mapsでは、Oracle Spatial and Graphによって使用される楕円体の計算ではなく、その投影で球体の計算を使用します。この違いによって、Oracle Spatial and Graphの楕円体投影に基づいた地図でGoogle Mapsに基づいた地図をオーバーレイする場合など、アプリケーションで不整合が発生する場合があります。たとえば、Oracle Spatial and Graphでの楕円体SRID 8307から球体SRID 3785への変換では、デフォルトで異なる楕円体の形状が考慮されますが、Google Mapsでは楕円体の形状は考慮されません。
Oracle Spatial and GraphでGoogle Mapsの結果に対応する必要がある場合は、次のオプションを検討してください。
楕円体SRID 8307ではなく球体SRID 4055を使用する。これは最も簡単な方法ですが、(サード・パーティのツールなど)SRID 8307に基づいたデータを球体として扱う必要がある場合に、別のオプションを使用する必要があります。
SRID 3785ではなくSRID 3857を使用する。SRID 3857を使用すると、EPSGルールを宣言したり、Google互換の結果を生成するためにユースケース名USE_SPHERICAL
を指定する必要がないため、次の2つのオプションよりも便利です。
楕円体座標系と球体座標系の間のEPSGルールを宣言する。たとえば、次の例のように、SRID 8307と3785の間のEPSGルールを宣言し、SRID 8307の楕円体の形状を無視します。
CALL sdo_cs.create_pref_concatenated_op( 302, 'CONCATENATED OPERATION', TFM_PLAN(SDO_TFM_CHAIN(8307, 1000000000, 4055, 19847, 3785)), NULL);
この例では、操作1000000000
は無操作を表すため、楕円体と球体の間のデータ変換は無視されます。
この方法では、必要なSRIDペア(楕円体と球体)ごとにルールを宣言する必要があります。
次の例のように、SDO_CS.TRANSFORMファンクションまたはSDO_CS.TRANSFORM_LAYERプロシージャを使用して、ユースケース名USE_SPHERICAL
を指定する。
SELECT SDO_CS.TRANSFORM( sdo_geometry( 2001, 4326, sdo_point_type(1, 1, null), null, null), 'USE_SPHERICAL', 3785) FROM DUAL; CALL SDO_CS.TRANSFORM_LAYER( 'source_geoms', 'GEOMETRY', 'GEO_CS_3785_SPHERICAL', 'USE_SPHERICAL', 3785);
use_case
パラメータ値にUSE_SPHERICAL
を指定すると、変換はデフォルトで楕円体の計算ではなく球体の計算を使用するため、球体の計算を使用するGoogle Mapsおよびその他のサード・パーティのツールに対応できます。
この方法('USE_SPHERICAL'
を指定する)を使用したうえ、2つの指定されたSRID間の変換で楕円体の計算を使用する必要があるEPSGルールも宣言した場合は、宣言したEPSGルールが優先され、それら2つのSRID間の変換には楕円体の計算が使用されます。