ฉันมีตาราง PostGIS พร้อมคอลัมน์รูปทรงเรขาคณิตสองคอลัมน์ทั้งสองกำหนดด้วย SRID 4326 ฉันสามารถแทรกลงในตารางโดยไม่มีปัญหาโดยใช้INSERT
คำสั่งต่อไปนี้(โดยที่lng
และlat
เป็นค่าที่ส่งผ่านโดยทางโปรแกรม):
INSERT INTO pad_meta (
uuid, created, updated, name, origin, radius, area, expiry, creator
) VALUES (
$1, now(), now(), $2, ST_GeomFromText('POINT(lng, lat)', 4326), $3,
ST_Buffer(ST_GeomFromText('POINT(lng, lat)', 4326), $4), $5, $6
)
แต่เมื่อผมสอบถามสี่แยกโดยใช้ ST_Intersects, ขึ้นอยู่กับมูลค่าของจุดERROR: Operation on mixed SRID geometries
ที่ฉันได้รับ
ตัวอย่างเช่นแบบสอบถามนี้ใช้งานได้:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 46.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
และข้อผิดพลาดนี้ออกมา:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 47.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
หมายเหตุพวกเขาเป็นแบบสอบถามที่เหมือนกันยกเว้นค่าของลองจิจูด ฉันได้ทดลองกับค่าที่ต่างกัน แต่ไม่ได้ระบุจุดเปลี่ยนที่ชัดเจนระหว่างข้อความค้นหาที่ใช้งานได้และไม่ใช่
ฉันคิดว่าฉันเข้าใจผิดอย่างลึกซึ้ง ในขณะนี้ฉันได้แก้ไข / แก้ไข / แก้ปัญหาด้วยการจัดรูปแบบแบบสอบถามใหม่เพื่อใช้ST_GeomFromText
และระบุ SRID อย่างชัดเจนแล้ว:
SELECT * FROM pad_meta where ST_Intersects(
ST_GeomFromText('POINT(-122.334172173172 47.602634395263560)', 4326), area
) ORDER BY created DESC;
แต่ฉันก็ไม่เข้าใจจริงๆว่าอะไรคือความแตกต่างหรือถ้านี่คือ "ทางออก" อย่างแท้จริง
คำถามของฉันคือ: เหตุใดฉันจึงได้รับข้อผิดพลาดเฉพาะสำหรับค่าเฉพาะและวิธีที่เหมาะสมในการจัดรูปแบบแบบสอบถามนี้คืออะไร
นี่คือคำนิยามตารางของฉันสำหรับการอ้างอิง:
CREATE TABLE IF NOT EXISTS pad_meta (
uuid CHAR(32),
created TIMESTAMP,
updated TIMESTAMP,
name VARCHAR(128),
origin GEOMETRY(Point, 4326),
radius INTEGER,
area GEOMETRY(Polygon, 4326),
expiry TIMESTAMP,
creator CHAR(32),
PRIMARY KEY (uuid)
);
ฉันได้ตรวจสอบด้วยว่ามี SRID เพียงประเภทเดียวใน geometry_columns:
SELECT f_table_name, f_geometry_column, srid FROM geometry_columns;
f_table_name | f_geometry_column | srid
--------------+-------------------+------
pad_meta | origin | 4326
pad_meta | area | 4326
ช่วยเหลือ / คำแนะนำชื่นชม ขอขอบคุณ! (หมายเหตุ: ฉันเคยเห็นคำถามนี้ด้วยเช่นกัน แต่เนื่องจากฉันได้กำหนดรูปทรงเรขาคณิต SRID ของฉันอย่างชัดเจนเมื่อแทรกเข้าไปในตารางดูเหมือนว่าไม่ใช่สิ่งที่เกิดขึ้น)
SRID=4326
(อย่างที่คุณทำด้านบน) วิธีที่ถูกต้องในการตั้งค่า SRID สำหรับคำสั่งที่เหลือ? (ตรงข้ามกับการใช้ST_GeomFromText
เพียงเพราะฉันไม่รู้วิธีอื่นในการระบุ SRID ... ?) มีวิธีตั้งค่า SRID เริ่มต้นสำหรับการสืบค้นหรือไม่ ดูเหมือนว่าค่อนข้างจะตั้งอย่างชัดเจนในแต่ละครั้ง อีกครั้งขอบคุณ!