จะสร้างและสืบค้นตารางที่มี lat/long โดยใช้ PostGIS ได้อย่างไร

ฉันจะสร้างตารางที่มีจุดภูมิศาสตร์ (lat/long) โดยใช้ PostGIS ได้อย่างไร แล้วรูปแบบการแทรกลงในตารางนี้จะเป็นอย่างไร (โดยใช้ SQL/PostgreSQL)

มันจะเป็นเพียงสิ่งต่อไปนี้สำหรับการสร้างตาราง:

CREATE TABLE x (geog geography(point, 4326))

หากเป็นเช่นนั้น point คืออะไร และเมื่อใดที่คุณจะใช้ ST_Point(X,Y) แทน

คอลัมน์นี้ควรมีดัชนีหรือไม่

หมายเหตุ: ก่อนหน้านี้มีหลายคำถามที่ตอบโดยละเอียดเกี่ยวกับวิธีแปลง แต่ฉันต้องการสร้างตารางว่างตั้งแต่เริ่มต้นเพื่อรองรับการจัดเก็บละติจูดและลองจิจูด


person Connorelsea    schedule 05.01.2017    source แหล่งที่มา


คำตอบ (1)


ใช่ ไวยากรณ์สำหรับการสร้างตารางด้วยภูมิศาสตร์นั้นง่ายเพียงแค่ CREATE TABLE x (geog geography(POINT,4326) );

ในคำสั่งนี้ POINT คือประเภทของรูปร่างที่ตารางนี้จะจัดเก็บ ความเป็นไปได้อื่นๆ ได้แก่ :

  • LINESTRING
  • รูปหลายเหลี่ยม
  • หลายจุด
  • มัลติไลน์สตริง
  • มัลติโพลีกอน
  • คอลเลกชันเรขาคณิต

สาเหตุที่จัดเก็บภูมิศาสตร์ในตารางนั้นสมเหตุสมผลในบางกรณีก็คือ มันทำให้คุณสามารถรัน หลายฟังก์ชัน ซึ่งจะให้ผลลัพธ์เหมือนกับว่าคุณกำลังคำนวณบนโลกทรงกลม ตัวอย่างเช่น ฉันสามารถเก็บจุดสองจุดเป็นภูมิศาสตร์ได้ (รู้เฉพาะละติจูด-ลองของจุดแต่ละจุด) และฉันสามารถหาระยะห่างระหว่างจุดเหล่านั้นในหน่วยเมตรได้อย่างง่ายดาย

ST_Point(X,Y) เป็นเพียงฟังก์ชันที่รับตัวเลขสองตัว จากนั้นจะสร้างจุดที่มี X เป็นตัวเลขแรก และ Y เป็นตัวเลขที่สอง ไม่จำเป็นต้องเป็นคู่ละติจูด-ลองจิจูด Infact จุดนี้ไม่มีแนวคิดว่าระบบอ้างอิงนั้นอยู่ในระบบอ้างอิงใด

เมื่อคุณสร้างตารางแล้ว การแทรกบันทึกลงไปนั้น ทำได้ง่ายๆ เพียง: INSERT INTO X (geog) VALUES (ST_GeographyFromText('POINT(2.5559 49.0083)'));

ที่นี่ คุณกำลังสร้างจุดภูมิศาสตร์สำหรับปารีส โดยมีละติจูด 49.0083N และลองจิจูด 2.5559 E

person Devdatta Tengshe    schedule 05.01.2017