ST_Transform — 整数パラメータで参照されるSRIDに座標変換し,新しいジオメトリを返します.
geometry ST_Transform(
geometry g1, integer srid)
;
SRID整数パラメータで参照される空間参系IDに座標変換し,新しいジオメトリを返します.変換先SRIDはSPATIAL_REF_SYS
テーブルに存在しなければなりません.
ST_TransformはしばしばST_SetSRIDと混同されます.ST_Transformは実際にジオメトリの座標を,ある空間参照系から他のものに変換しますが,ST_SetSRIDは単んにジオメトリのSRIDを変更するだけです.
PostGISがProjサポートでコンパイルされている必要があります.PostGIS_Full_Versionを使ってProjサポートでコンパイルされているか確認して下さい. |
一つ以上の変換を行う場合は,インデクスの利点を得るために,使用する変換に関する関数インデクスを持つと便利です. |
1.3.4より前は,曲線を含むジオメトリで使うとクラッシュしました.これは1.3.4以上では訂正されています. |
このメソッドは OpenGIS Simple Features Implementation Specification for SQL 1.1.を実装するものです.
このメソッドは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) --三次元曲線ストリングの例 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;