PostGIS 테이블의 모든 형상을 재 투영합니까?


39

SRID : 4326으로 ​​공간 테이블을 만들었습니다. 이제 총 투영을 SRID : 32644로 새 테이블로 변경하고 싶습니다. 이전 테이블은 변경되지 않아야합니다.


더 우아한 방법이 있어야하기 때문에 이것을 답변 대신 주석으로 추가하고 있습니다. 그러나 테이블을 복사 한 후 다음을 실행할 수 있습니다. UPDATE <table> SET the_geom = ST_Transform (the_geom, 32644); 32644의 공간 _ref_sys에 완전한 항목이 있다고 가정합니다.
L_Holcombe

시도했지만이 오류 업데이트가 발생했습니다 abc SET geom = ST_Transform (geom, 32644); 관계 "abc"에 대한 새 행이 점검 제한 조건 "enforce_srid_geom"을 위반 함
Satya Chandra

1
그 제약 조건을 삭제하십시오. 그리고 그 고정
simplexio

답변:


62

PostGIS 2.0 이상을 사용하는 경우 다음을 수행 할 수 있습니다.

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

물론 "지점"을 형상의 실제 형상 유형으로 바꿔야합니다.
Paul Ramsey

로 대체하는 간단한 방법 PointThe same geometry type as it was있습니까?
Mohayemin

아뇨.
Paul Ramsey

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

QGIS에 추가하려면 공간 테이블에 정수 ID 필드가 있어야합니다.


위와 같이 시도했지만 성공했지만 데이터베이스에 나타나는 결과 테이블을 qgis / udig로 내보낼 수 없습니까?
Satya Chandra

당신의 정확한 문제는 무엇입니까?
블라디미르

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.