PostGISテーブルのすべてのジオメトリを再投影しますか?


39

SRID:4326で空間テーブルを作成しました。次に、総投影をSRID:32644から新しいテーブルに変更します。古いテーブルは変更しないでください。


よりエレガントな方法があるはずなので、これを答えではなくコメントとして追加しています。ただし、テーブルをコピーしてから実行できます。UPDATE <table> SET the_geom = ST_Transform(the_geom、32644); (32644のspatial_ref_sysに完全なエントリがあると仮定します。)
L_Holcombe

私は試しましたが、このエラーを更新しましたabc SET geom = ST_Transform(geom、32644); リレーション "abc"の新しい行がチェック制約 "enforce_srid_geom"に違反しています
サティヤチャンドラ

1
その制約を削除します。およびその修正
-simplexio

回答:


62

PostGIS 2.0以降を使用している場合は、次を実行できます。

ALTER TABLE mytable 
  ALTER COLUMN geom 
  TYPE Geometry(Point, 32644) 
  USING ST_Transform(geom, 32644);

もちろん、「ポイント」をジオメトリの実際のジオメトリタイプに置き換える必要があることに注意してください。
ポールラムジー

交換する簡単な方法があるPointとはThe same geometry type as it was
モハエミン

いいえ、恐れていません。
ポールラムジー

18
CREATE TABLE new_table AS 
  SELECT ST_Transform(the_geom,32644) AS the_geom 
  FROM original_table;

QGISに追加するには、空間テーブルに整数IDフィールドが必要です。


上記のように試して成功しましたが、データベースに表示されていても、結果のテーブルをqgis / udigにエクスポートできませんか?
サティヤチャンドラ

あなたの正確な問題は何ですか?
ウラジミール

2
バージョン2.0より古いPostGISのバージョンを使用している場合、新しいテーブルを指すGeometry_Columnsテーブルにレコードを追加する必要があります。
HeyOverThere

4

この方法に従ってください:

  1. CREATE TABLE 'new_table' AS SELECT * FROM 'old_table';
  2. ALTER TABLE new_table DROP CONSTRAINT enforce_srid_the_geom;
  3. ALTER TABLE new_table DROP CONSTRAINT enforce_geotype_the_geom;
  4. UPDATE new_table SET the_geom = ST_SetSRID(the_geom, new_srid);
  5. ALTER TABLE new_table ADD CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = (new_srid));
  6. ALTER TABLE new_table ADD CONSTRAINT enforce_geotype_geom CHECK ((geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);
  7. それだ!

最初の行で新しいテーブルを作成できない場合、plsは2と3を試し、最初に番号1のテーブルを作成します。

私はそれがあなたを助けることを願っています...


3
このソリューションは、ジオメトリを再投影しません。ジオメトリが他のSRIDを使用して保存されている場合、変更の制約後、データは不整合になります。st_trasnformを使用する必要があります。
angelcervera
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.