ปัญหากับเรขาคณิต SRID ใน PostGIS


11

ฉันเลิกเรียน (Poste) ใน PostGIS

id_borne serial NOT NULL,
  num_borne character varying,
  shape_borne geometry

ฉันเปลี่ยน SRID ของตารางของฉันสำเร็จแล้วโดยใช้

select UpdateGeometrySRID('public', 'borne', 'shape_borne', 26191) ;

SRID เก่าคือ 0

ปัญหาคือเมื่อฉันพยายามเพิ่มองค์ประกอบใหม่ในตารางของborneฉันฉันมีข้อผิดพลาดข้อความนี้:

geometry srid (0) does not match column srid (26191)

ป้อนคำอธิบายรูปภาพที่นี่

นั่นคือปัญหาของฉัน! SRID ได้รับการปรับปรุง แต่เมื่อฉันพยายามเพิ่มจุดใหม่ฉันได้รับข้อความนี้


2
ตรวจสอบให้แน่ใจว่าคุณให้ข้อมูล SRID ของคุณที่ตรงกับตารางก่อนที่จะพยายามแทรก
Ian Turton

ฉันไม่เข้าใจ srid ของข้อมูลของฉันคือ srid ของตารางของฉัน! มันเหมือนกันหรือเปล่า
Yahia El Haddad

1
คุณสามารถแสดงข้อความแทรกหนึ่งในคำสั่งให้เราได้หรือไม่
Ian Turton

เช่นนี้: INSERT INTO borne (num_borne, shape_borne) ค่า (1, POINT (25800, 256000));
Yahia El Haddad

1
รูปทรงเรขาคณิตในคำสั่งแทรกของคุณไม่มี srid นั่นคือสาเหตุของข้อผิดพลาด
Devdatta Tengshe

คำตอบ:


14

สิ่งที่เกิดขึ้นคือข้อมูลที่คุณพยายามแทรกไม่มีการกำหนด SRID หากต้องการกำหนดหนึ่งให้ลองตัดรูปทรงเรขาคณิตที่แทรกไว้ในคำสั่งแทรกของคุณด้วย ST_SetSRID () เช่น,

INSERT INTO public.borne (num_borne, shape_borne) 
    (SELECT num_borne, ST_SetSRID(shape_borne, 26191)
     FROM public.sometable);

หรือ

INSERT INTO public.borne (num_borne, shape_borne) 
VALUES (1, ST_SetSRID(ST_MakePoint(25800 , 256000), 26191));

ฉันไม่มีโต๊ะ
Yahia El Haddad

อัปเดตเพื่อรวมกรณีการใช้งานของคุณ
MakinFlippyFloppy

มันไม่ได้ผล !
Yahia El Haddad

ข้อความแสดงข้อผิดพลาดคืออะไร ลองเรียกใช้อีกด้วย: select find_srid('public', 'borne', 'shape_borne');เพื่อให้แน่ใจว่ามีการตั้งค่า srid จริงบนฟิลด์
MakinFlippyFloppy

ไม่เป็นไร! มันทำงานร่วมกับการใช้ INSERT INTO public.borne (num_borne, shape_borne) ค่า (1, ST_SetSRID (ST_MakePoint (25800, 256000), 26191)); จำเป็นต้องใช้ ST_SetSRID (ST_MakePoint (... ) สำหรับการเพิ่มในตารางนี้สำหรับตารางอื่นของฉัน (พัสดุ) มัน wortking กับคำขอปกติสำหรับ exmple: INSERT INTO พัสดุ (num_parcelle รูปร่าง) ค่า (1, POLYGON (( 0 0, 1 0, 1 1, 0 1, 0 0)));
Yahia El Haddad

6

หากคุณกำลังพิมพ์ WKT ของรูปทรงเรขาคณิตลงใน pgAdmin III คุณจะต้องระบุ SRID โดยใช้ไวยากรณ์ EWKT มิฉะนั้นจะมีค่าเริ่มต้นเป็น 0

พิมพ์สิ่งนี้ลงในฟิลด์เรขาคณิตของ pgAdmin III:

SRID=26191;POINT(25800 256000)

มิฉะนั้น @MakinFlippyFloppy มีวิธี SQL ที่ถูกต้องโดยใช้ ST_SetSRID


0

ฉันลิงค์ด้านล่างบาง ๆ สามารถช่วยคุณได้ลองดูที่หน้าล่าง

http://postgis.org/docs/UpdateGeometrySRID.html


ฉันทำงานกับฟังก์ชั่นนี้แล้ว!
Yahia El Haddad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.