名前

ST_Transform — 整数パラメータで参照されるSRIDに座標変換し、新しいジオメトリを返します。

概要

geometry ST_Transform(geometry g1, integer srid);

説明

SRID整数パラメータで参照される空間参系に座標変換し、新しいジオメトリを返します。変換先SRIDはSPATIAL_REF_SYSテーブルに存在しなければなりません。

ST_TransformはしばしばST_SetSRIDと混同されます。ST_Transformは実際にジオメトリの座標を、ある空間参照系から他のものに変換します。ST_SetSRIDは単にジオメトリのSRIDを変更するだけです。

[注記]

PostGISがProj対応でコンパイルされている必要があります。PostGIS_Full_Versionを使ってProj対応でコンパイルされているか確認して下さい。

[注記]

1つ以上の変換を行う場合は、インデクスの利点を得るために、使用する変換に関する関数インデクスを持つと便利です。

[注記]

1.3.4より前は、曲線を含むジオメトリで使うとクラッシュしました。これは1.3.4以上では訂正されています。

機能強化: 2.0.0では、多面体サーフェスが導入されました。

このメソッドはSQL/MM仕様の実装です。 SQL-MM 3: 5.1.6

このメソッドは曲線ストリングと曲線に対応しています

この関数は多面体サーフェスに対応しています。

マサチューセッツ州平面座標系(アメリカ測量フィート)をWGS84経度緯度に変更します。

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
	743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As wgs_geom;

 wgs_geom
---------------------------
 POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,
-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.177684
8522251 42.3902896512902));
(1 row)

--3D Circular String example
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromEWKT('SRID=2249;CIRCULARSTRING(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'),4326));

				 st_asewkt
--------------------------------------------------------------------------------------
 SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 1,-71.1776843766326 42.3903829478009 2,
 -71.1775844305465 42.3903826677917 3,
 -71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4)

		

部分関数インデクスを作る例です。全てのジオメトリが入っているとは確信できないテーブルのためには、スペースの節約とインデクスを小さく効率的にするために、NULLジオメトリを無視する部分インデクスを使うのが最善です。

CREATE INDEX idx_the_geom_26986_parcels
  ON parcels
  USING gist
  (ST_Transform(the_geom, 26986))
  WHERE the_geom IS NOT NULL;
		

変換の挙動の設定

グリッドシフトを含む座標変換は、ときどき失敗します。たとえば、PROJ.4にグリッドシフトファイルを付けてビルドされていなかった場合や、座標がグリッドシフト定義の範囲内に無い、といった場合です。デフォルトでは、PostGISはグリッドシフトファイルが無い場合はエラーを投げますが、この挙動は、spatial_ref_sysテーブルのproj4text値を変更することで、SRID毎の原則を設定することができます。

たとえば、proj4textパラメータ +datum=NAD87 は次に示す+nadgridsパラメータの短縮形です。

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat

接頭辞 @ は、ファイルが無くてもエラー報告をしないという意味ですが、適切だった(発見されてオーバラップした)ファイルがないままリストの終わりに達した場合はエラーが出ます。

逆にいえば、少なくとも標準的なファイルが確実にあって欲しいが、該当が無いまま全てのファイルが走査された場合はNULL変換にしたい場合は、次が使えます。

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null

NULLグリッドシフトファイルは、世界全体をカバーして、シフトを行わない、妥当なグリッドシフトファイルです。 完全な例のために、正しい範囲にないSRID 4267への変換でエラーは投げられないようPostGISを変えたいなら、次のようにします。

UPDATE spatial_ref_sys SET proj4text = '+proj=longlat +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null +no_defs' WHERE srid = 4267;

関連情報

PostGIS_Full_Version, ST_AsText, ST_SetSRID, UpdateGeometrySRID