Từ chối tất cả các hình học trong bảng PostGIS?


39

Tôi đã tạo một bảng không gian với SRID: 4326. Bây giờ tôi muốn thay đổi tổng số chiếu thành SRID: 32644 thành một bảng mới. Bảng cũ nên không thay đổi.


Tôi đang thêm điều này như một bình luận thay vì một câu trả lời vì cần có một phương pháp thanh lịch hơn. Nhưng bạn có thể sao chép bảng và sau đó chạy: UPDATE <bảng> SET the_geom = ST_Transform (the_geom, 32644); (Giả sử bạn có mục nhập đầy đủ trong spatial numf_sys của mình cho 32644.)
L_Holcombe

tôi đã thử nhưng igot cập nhật lỗi này abc SET geom = ST_Transform (geom, 32644); hàng mới cho mối quan hệ "abc" vi phạm ràng buộc kiểm tra "execce_srid_geom"
Satya Chandra

1
bỏ ràng buộc đó. và cố định của nó
Simplexio

Câu trả lời:


62

Nếu bạn đang sử dụng PostGIS 2.0+, bạn có thể truy cập:

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

Tất nhiên lưu ý rằng bạn nên thay thế "Điểm" bằng loại hình học thực tế của hình học của bạn.
Paul Ramsey

Có một cách đơn giản để thay thế Pointbằng The same geometry type as it was?
Mohayemin

Không, sợ không.
Paul Ramsey

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

Cần có một trường ID số nguyên trong bảng không gian của bạn để thêm nó vào QGIS.


Tôi đã thử như trên và đã thành công, nhưng tôi không thể xuất bảng kết quả thành qgis / udig ngay cả khi nó xuất hiện trong cơ sở dữ liệu?
Satya Chandra

Vấn đề chính xác của bạn là gì?
Vladimir

2
Nếu bạn đang sử dụng phiên bản PostGIS cũ hơn phiên bản 2.0, bạn sẽ cần thêm bản ghi vào bảng Geometry_Columns chỉ vào bảng mới của bạn.
HeyOverThere

4

theo cách này:

  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. Thế là xong!

nếu bạn không thể tạo bảng mới trong dòng đầu tiên, hãy thử 2. và 3. trước tiên sau đó tạo bảng của bạn với số 1.

Tôi hy vọng nó sẽ giúp bạn...


3
Giải pháp này không phản đối hình học. Nếu hình học được lưu trữ bằng SRID khác, dữ liệu sẽ không nhất quán sau các ràng buộc thay đổi. Bạn cần sử dụng st_trasnform.
angelcervera
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.