ฉันมีฐานข้อมูล PostGIS และฉันต้องการค้นหาคะแนนที่อยู่ในบางภูมิภาค (กล่องที่มีขอบเขต) ฉันมีพิกัดสองชุดซึ่งฉันจะได้รับทั้งสี่จุดสี่เหลี่ยมผืนผ้าที่เกิดขึ้นในกล่อง (ถ้าจำเป็น) คอลัมน์ข้อมูลของฉันเป็นชื่อ 'จุด' และเป็นจุดพิมพ์ด้วย
- อย่างไรก็ตามมีการระบุพิกัดสี่ชุด (ละติจูด / ลองจิจูด) และรับคะแนนทั้งหมดที่อยู่ในกล่อง
- หรือระบุจุดสองจุดแล้วปล่อยให้ฐานข้อมูลจัดทำมุมของสี่เหลี่ยมและกลับจุดภายใน
ในกรณีที่ฉันไม่ชัดเจนว่าฉันต้องการบรรลุอะไร เทียบเท่ากับ 'วานิลลา' sql ถ้าฉันมีเขตละติจูดและลองจิจูดแทนจุดจะเป็น:
SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax
ปรับปรุงแก้ไข:
ฉันกำลังพยายามแก้ปัญหาของ underdark ตอนแรกฉันไม่มี ST_MakePoint constuctor (ตอนนี้ฉันทำ) และฉันยังคงได้รับข้อผิดพลาดที่คล้ายกันมาก
SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))
และฉันได้รับข้อผิดพลาดนี้:
ERROR: function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39
แก้ไข:
ในระยะสั้นฉันสามารถแก้ไขได้ด้วย:
SELECT * FROM triples WHERE box '((point1),(point2))' @> point
แต่ฉันจะต้องคิดออกว่าทำไมไม่มีฟังก์ชั่น PostGIS ไม่ทำงานสำหรับฉัน