คัดค้านรูปทรงเรขาคณิตทั้งหมดในตาราง PostGIS หรือไม่


39

ฉันสร้างตารางอวกาศด้วย SRID: 4326 ตอนนี้ฉันต้องการเปลี่ยนการฉายภาพทั้งหมดเป็น SRID: 32644 เป็นตารางใหม่ ตารางเก่าควรไม่เปลี่ยนแปลง


ฉันกำลังเพิ่มสิ่งนี้เป็นความคิดเห็นแทนคำตอบเพราะควรมีวิธีการที่หรูหรากว่า แต่คุณสามารถคัดลอกตารางแล้วเรียกใช้: UPDATE <table> SET the_geom = ST_Transform (the_geom, 32644); (สมมติว่าคุณมีรายการที่สมบูรณ์ใน spatial_ref_sys ของคุณสำหรับ 32644. )
L_Holcombe

ฉันพยายาม แต่ igot อัปเดตข้อผิดพลาดนี้ 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);

สังเกตว่าคุณควรแทนที่ "จุด" ด้วยประเภทเรขาคณิตจริงของรูปทรงเรขาคณิตของคุณ
พอลแรมซีย์

มีวิธีง่าย ๆ ในการแทนที่Pointด้วยThe 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;

ควรมีฟิลด์ ID จำนวนเต็มในตารางอวกาศของคุณเพื่อเพิ่มลงใน QGIS


ฉันพยายามตามข้างบนและประสบความสำเร็จ แต่ฉันไม่สามารถส่งออกตารางผลลัพธ์ไปยัง qgis / udig แม้มันจะปรากฏในฐานข้อมูล?
Satya Chandra

ปัญหาที่แน่นอนของคุณคืออะไร?
วลาดิมีร์

2
หากคุณใช้ PostGIS รุ่นเก่ากว่ารุ่น 2.0 คุณจะต้องเพิ่มระเบียนลงในตาราง 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. อย่างนั้นแหละ!

หากคุณไม่สามารถสร้างตารางใหม่ในบรรทัดแรกโปรดลอง 2 และ 3 ก่อนจากนั้นสร้างตารางของคุณด้วยหมายเลข 1

ฉันหวังว่ามันจะช่วยคุณ ...


3
การแก้ปัญหานี้ไม่ได้ปฏิเสธรูปทรงเรขาคณิต หากรูปทรงเรขาคณิตจะถูกเก็บไว้โดยใช้ SRID อื่น ๆ ข้อมูลจะไม่สอดคล้องกันหลังจากข้อ จำกัด การเปลี่ยนแปลง คุณต้องใช้ st_trasnform
angelcervera
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.