4.4 Spherical Mercator座標系へのデータ変換

Google Mapsのような一般的なオンライン・マップ・サービスは、地図にSpherical Mercator投射を使用します。

Oracle Databaseリリース11.1.0.7より前の製品を使用し、Google Mapsといったタイル層の上に独自の空間データをオーバーレイする必要がある場合は、タイル層の座標系と独自のデータ座標系間で座標系の変換を正しく処理できるように、データベースを設定する必要があります(2つの座標系が異なる場合)。

ノート:

この項のアクションを実行するには、データベースのリリースが10.2.0.1以降である必要があります。

Google Mapsは、Spherical Mercator座標系(EPSG: 3785)を使用しています。これはYahoo!マップなどの商用APIプロバイダでも幅広く使用されています。この座標系(SRID 3785)は、Oracle Spatialリリース11.1.0.7より前の製品にはありませんでした。この座標系に独自データが変換されるようにマップ・ビジュアライゼーション・コンポーネントとOracle Spatialを有効化するために、まず、この座標系定義をOracleデータベースに追加しておく必要があります(まだ定義されていない場合)。

この座標系が定義されているかチェックするには、以下の文を入力します。

SELECT srid FROM mdsys.cs_srs WHERE srid=3785;

この文で行が返された場合、この項のアクションを実行する必要はありません。この文で行が返されない場合は、この項のアクションを実行して、独自の空間データをタイル層の上にオーバーレイできるようにする必要があります。

次のステップを実行します。

  1. DBAロールを持つユーザーなど、権限のあるユーザーとしてデータベースに接続します。

  2. 次のようにcsdefinition.sqlスクリプトを実行します。($MAPVIEWER_HOMEを、MapViewerがデプロイされているWebLogic Serverインスタンスのルート・ディレクトリと置き換え、コマンドを1行で入力します。)

    • Linux: $MAPVIEWER_HOME/j2ee/home/applications/mapviewer/web/WEB-INF/admin/csdefinition.sql

    • Windows: $MAPVIEWER_HOME\j2ee\home\applications\mapviewer\web\WEB-INF\admin\csdefinition.sql

  3. 必要に応じて、指定の座標系からSpherical Mercator座標系に変換する際には、Oracle Spatialがデータ変換をスキップする変換ルールを作成します。このような変換ルールを作成する必要があるかどうか判断するには、「データ変換をスキップするトランスフォーメーション・ルールの作成」を参照してください。

  4. パフォーマンスを向上させるために空間データを事前に変換するか、マップ・ビジュアライゼーション・コンポーネントによって実行時にデータ変換を行ってください(「オンザフライ」)。データベースのリリースが10.2.0.4より前の場合、事前に変換するしか手段はありません。

    • すべてのデータをSpherical Mercator座標系に事前に変換するには、すべてのデータにSDO_CS.TRANSFORM_LAYERプロシージャを使用し、変換されたデータをマッピングに使用します。(『Oracle Spatial開発者ガイド』のSDO_CS.TRANSFORM_LAYERのリファレンスの項を参照してください)。

    • マップ・ビジュアライゼーション・コンポーネントで実行時にデータを変換する場合、マッピングに使用する前にデータを変換しないでください。

4.4.1 データ変換をスキップする変換ルールの作成

空間データは通常、WGS84やBNGなどの楕円データに基づく座標系で使用されます。そのような場合、Oracle Spatialは、データをSpherical Mercator座標系に変換する際に、デフォルトでデータ変換を適用します。これによって、ユーザーのデータとGoogle Mapsや他のマップ・サービス・タイルとの間で、わずかな不一致や誤差が発生します。この問題に対処するために、指定の座標系からSpherical Mercator座標系に変換する際には、Oracle Spatialがデータ変換をスキップする変換ルールを作成します。

例4-1は、csdefinition.sqlスクリプトに含まれている、こうしたトランスフォーメーション・ルールを作成するSQL文を示します。ただし、使用する空間データの座標系が例4-1に示すルールの対象でない場合は、データの座標系がこれらのルールの対象でなければ、独自のルールを作成できます。(座標系の変換ルール作成の詳細は、『Oracle Spatial開発者ガイド』を参照してください)。

図4-1 csdefinition.sqlスクリプトに定義されたトランスフォーメーション・ルール

-- Create the tfm_plans, that is, the transformation rules.
-- Note: This will result in an incorrect conversion since it ignores a datum
-- datum between the ellipsoid and the sphere. However, the data will match
-- up better on Google Maps.
 
-- For wgs84 (8307)
call sdo_cs.create_pref_concatenated_op( 83073785, 'CONCATENATED OPERATION 8307 3785', TFM_PLAN(SDO_TFM_CHAIN(8307, 1000000000, 4055, 19847, 3785)), NULL);
 
-- For 4326, EPSG equivalent of 8307
call sdo_cs.create_pref_concatenated_op( 43263785, 'CONCATENATED_OPERATION_4326_3785', TFM_PLAN(SDO_TFM_CHAIN(4326, 1000000000, 4055, 19847, 3785)), NULL); 
 
-- For OS BNG, Oracle SRID 81989
call sdo_cs.create_pref_concatenated_op( 819893785, 'CONCATENATED OPERATION 81989 3785', TFM_PLAN(SDO_TFM_CHAIN(81989, -19916, 2000021, 1000000000, 4055, 19847, 3785)), NULL); 
 
-- For 27700, EPSG equivalent of 81989
call sdo_cs.create_pref_concatenated_op( 277003785, 'CONCATENATED_OPERATION_27700_3785', TFM_PLAN(SDO_TFM_CHAIN(27700, -19916, 4277, 1000000000, 4055, 19847, 3785)), NULL);
commit;