6.13 Google Mapsに関する考慮事項

Google Mapsでは、Oracle Spatialによって使用される楕円体の計算ではなく、球体の計算をその投影で使用します。この違いによって、Oracle Spatialの楕円体投影に基づいた地図でGoogle Mapsに基づいた地図をオーバーレイする場合など、アプリケーションで不整合が発生する場合があります。

たとえば、Oracle Spatialでの楕円体SRID 4326から球体SRID 3785への変換では、デフォルトで異なる楕円体の形状が考慮されますが、Google Mapsでは楕円体の形状は考慮されません。

Oracle SpatialでGoogle Mapsの結果に対応する必要がある場合は、次のオプションを検討してください。

  • 楕円体SRID 4326ではなく球体SRID 4055を使用する。これは最も簡単な方法ですが、(サード・パーティのツールなど)SRID 4326に基づいたデータを球体として扱う必要がある場合に、別のオプションを使用する必要があります。

  • SRID 3785ではなくSRID 3857を使用する。SRID 3857を使用すると、EPSGルールを宣言したり、Google互換の結果を生成するためにユースケース名USE_SPHERICALを指定する必要がないため、次の2つのオプションよりも便利です。

  • 楕円体座標系と球体座標系の間のEPSGルールを宣言する。たとえば、次の例のように、SRID 4326と3785の間のEPSGルールを宣言し、SRID 4326の楕円体の形状を無視します:

    CALL sdo_cs.create_pref_concatenated_op(
      302,
      'CONCATENATED OPERATION',
      TFM_PLAN(SDO_TFM_CHAIN(4326, 1000000000, 4055, 19847, 3785)),
      NULL);
    

    この例では、操作1000000000無操作を表すため、楕円体と球体の間のデータ変換は無視されます。

    この方法では、必要なSRIDペア(楕円体と球体)ごとにルールを宣言する必要があります。

  • 次の例のように、SDO_CS.TRANSFORMファンクションまたはSDO_CS.TRANSFORM_LAYERプロシージャを使用して、ユースケース名USE_SPHERICALを指定する。

    SELECT
      SDO_CS.TRANSFORM(
        sdo_geometry(1,1),
        '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間の変換には楕円体の計算が使用されます。