ST_Transform
定義
ST_Transform は、2 次元 ST_Geometry データを空間参照 ID(SRID)で指定された空間参照に変換します。
PostgreSQL では、ST_Transform 関数を使用して ST_Geometry 列の空間参照を変換する場合、変換元と変換先の空間参照が同じ地理座標系である必要があります。
Oracle では、同じ地理座標系または異なる地理座標系の空間参照間で変換できます。地理座標系が異なる場合、地理座標系変換が行われます。地理座標系変換は、2 つの地理座標系間で変換します。地理座標系変換は、NAD 1927 から NAD 1983 というように、特定の方向に定義されますが、ST_Transform 関数は変換元と変換先の座標系に関係なく、変換を正しく適用します。
地理座標系変換には、数式をベースとした方式と、ファイルベースの方式の 2 つのタイプがあります。数式をベースとした方式は、自己包含型で外部からの情報を必要としません。ファイルベースの方式は、オフセット値の計算にディスク上のファイルを使用します。通常、ファイルベースの方式の方が、数式をベースとした方式より正確です。ファイルベースの方式は、オーストラリア、カナダ、ドイツ、ニュージーランド、スペイン、米国で一般的に使用されています。ファイルは(カナダのものを除く)、ArcGIS for Desktop をインストールした場所にあります。また、さまざまな政府機関の地図作成部門からも直接入手できます。
Oracle のジオデータベースでファイルベースの変換をサポートする場合、ファイルは Oracle サーバ上に、ArcGIS for Desktop のインストール ディレクトリと同じ相対フォルダ構造で配置する必要があります。ArcGIS for Desktop インストール ディレクトリでは、ファイルは pedata というフォルダにあります。pedata フォルダを Oracle サーバに移動したら、PEDATAHOME というオペレーティング システムの環境変数を設定します。変数の値は pedata の場所です。たとえば、pedata フォルダを Microsoft Windows コンピュータの C:\pedata にコピーした場合、PEDATAHOME 環境変数を C:\pedata に設定します。
環境変数の設定方法については、お使いのオペレーティング システムのマニュアルをご参照ください。
pedata フォルダの中には、サポートされているファイルベースの方式に対応する harn、nadcon、ntv2 という 3 つのフォルダがあります。ntv2 フォルダには、国別のサブディレクトリがあります。たとえば、前述した pedata の場所を使用すると、Australian NTv2 ファイルは、C:\pedata\ntv2\australia にあります。
PEDATAHOME を設定したら、ST_Transform 関数を使用する前に、新しい SQL セッションを開始する必要があります。ただし、サーバを再起動する必要はありません。
構文
PostgreSQL および Oracle において、変換元と変換先の空間参照が同じ地理座標系である場合
sde.st_transform (g1 sde.st_geometry, srid integer)
Oracle において、変換元と変換先の空間参照が同じ地理座標系でない場合
sde.st_transform (g1 sde.st_geometry, srid integer, geogtran_id integer)
戻り値のタイプ
ST_Geometry
例
変換元と変換先の空間参照が同じ地理座標系である場合のデータの変換
次の CREATE TABLE ステートメントは、ln1 と ln2 という 2 つのラインストリング列を持つ transform_test テーブルを作成します。
CREATE TABLE transform_test (ln1 sde.st_geometry, ln2 sde.st_geometry);
次の INSERT ステートメントは、SRID を 4326 にして ST_LineString を ln1 に挿入します。
INSERT INTO transform_test (ln1) VALUES (
sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
次の UPDATE ステートメントでは、ST_Transform 関数は ln1 のラインストリングを入力として、SRID 4326 に割り当てられた座標参照系から SRID 3857 に割り当てられた座標参照系に変換し、結果を ln2 列に配置します。
UPDATE transform_test
SET ln2 = sde.st_transform (ln1, 3857);
SRID 4326 と SRID 3857 は ST_SPATIAL_REFERENCES ビュー内にあり、両方とも同じ測地基準系です。
変換元と変換先の空間参照が同じ地理座標系でない場合のデータの変換(Oracle のみ)
次の CREATE TABLE ステートメントは、ID 列と ST_Geometry 列を持つ n27 テーブルを作成します。
CREATE TABLE n27 (id integer, geometry sde.st_geometry);
次の INSERT ステートメントは、SRID 4267 で ID 値と ST_Point を挿入します。
INSERT INTO N27 (id, geometry) VALUES (
1,
sde.st_geometry ('point (-123.0 49.0)', 4267));
);
4267 SRID は NAD 1927 地理座標系を使用します。
変換先として n83 テーブルを作成し、変換を実行します。
CREATE TABLE n83 (id integer, geometry sde.st_geometry);
INSERT INTO N83 (id, geometry) VALUES (
1,
sde.st_transform (N27.geometry, 4269, 1241);
SRID 4269 は NAD 1983 地理座標系を使用します。1241 は、NAD_1927_To_NAD_1983_NADCON 変換の有名な ID です。この変換はファイルベースで、米国(アラスカ/ハワイを除く 48 州)で使用できます。PEDATAHOME が正しく定義されていれば、SELECT ステートメントが n83 テーブルに対して実行され、以下が返されます。
SELECT id, sde.st_astext (geometry) description
FROM N83;
ID DESCRIPTION
1 | POINT((-123.00130569 48.999828199))
サポートされている地理座標系変換のリストについては、次の技術資料とその関連リストをご参照ください。http://support.esri.com/en/knowledgebase/techarticles/detail/21327.