เปลี่ยน SRID ของข้อมูลที่มีอยู่ใน PostGIS หรือไม่


50

ขณะนำเข้าข้อมูล shapefile ของฉันไปยัง PostGIS ฉันไม่ได้เลือกการฉายภาพที่เหมาะสม

ตอนนี้ฉันจะเปลี่ยน SRID ของข้อมูลโดยไม่เปลี่ยนพิกัดได้อย่างไร

คำตอบ:


83

มีฟังก์ชั่นบรรทัดเดียวที่ทำเพื่อคุณ เพียงใช้แบบสอบถาม SQL ต่อไปนี้:

select UpdateGeometrySRID('Schema Name', 'mytable', 'the_geom', newSRID) ;

แต่ถ้าคุณเป็นเหมือนฉันคุณจะสนใจในระดับต่ำก้าวเล็ก ๆ การพูดอย่างมีเหตุผลฟังก์ชันข้างต้นเทียบเท่ากับกระบวนการสี่ขั้นตอนต่อไปนี้:

  1. ในตาราง geometry_columns อัพเดต SRID เป็นค่าที่ต้องการ

  2. วาง contraint บนตารางโดยใช้คำสั่ง SQL ต่อไปนี้

    ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;

  3. อัปเดต SRID ของเรขาคณิตโดยใช้คำสั่ง SQL ต่อไปนี้

    UPDATE mytable SET the_geom = ST_SetSRID(the_geom, newSRID);

  4. เพิ่ม contraint back โดยใช้คำสั่ง SQL ต่อไปนี้

    ALTER TABLE mytable

    ADD CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = (newSRID));


1
ดูpostgis.org/docs/ST_SetSRID.htmlสำหรับข้อมูลเพิ่มเติมและลิงก์
BradHards

13

ด้วย PostGIS 2.x คอลัมน์เรขาคณิตมักจะใช้ typmods geometry(Point, 1234)เช่น สำหรับสิ่งเหล่านี้คุณสามารถใช้ALTER TABLEเพื่อแก้ไขประเภทคอลัมน์รูปทรงเรขาคณิตได้โดยตรงในขั้นตอนเดียว

ยกตัวอย่างเช่นการตั้ง SRID ของgeomในmytableภาพเป็น WGS84 ใช้ST_SetSRID :

ALTER TABLE mytable
  ALTER COLUMN geom
    TYPE geometry(Point, 4326)
    USING ST_SetSRID(geom, 4326);

โปรดทราบว่าสิ่งนี้จะเปลี่ยน SRID เท่านั้น แต่จะไม่แปลงข้อมูลพิกัด


1
ด้วยการเปลี่ยนแปลงเล็กน้อยสิ่งนี้จะทำงานกับคอลัมน์ทางภูมิศาสตร์ซึ่งUpdateGeometrySRIDไม่สนับสนุน
dsz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.