เข้าร่วมเลเยอร์กับองค์ประกอบที่เกี่ยวข้องกับ PostGIS Topology


24

ขณะนี้ฉันใช้ส่วนขยายโทโพโลยีของ PostGIS แต่ฉันมีปัญหาในการทำความเข้าใจว่าโครงสร้างทำงานอย่างไร:

หนึ่งในประเด็นสำคัญคือการใช้ "เลเยอร์" s: สิ่งที่ฉันเข้าใจคุณลักษณะคุณลักษณะควรเก็บไว้ในตารางจากสคีโครงสร้างของโทโพโลยี (หนึ่งชื่อtopo_actualname) และลงทะเบียนเป็นเลเยอร์ของโทโพโลยีAddTopoGeometryColumnนั้น

แต่มีวิธีง่าย ๆ ที่จะเข้าร่วมแอตทริบิวต์ (เก็บไว้ในตารางชั้น) ที่มีคุณสมบัติตามลำดับ (องค์ประกอบในnode, faceหรือedge_data)?

ตอนนี้สิ่งที่ฉันทำคือ:

SELECT whatever
FROM layer_tb l
     JOIN topo_topologyname.edge_data e ON (l.topo).id=edge_id;

แต่ฉันคิดว่าlayerแนวคิดทั้งหมดนั้นค่อนข้างไร้ประโยชน์ถ้าฉันต้องรู้ทั้งชื่อสคีโทโพโลยีและเลเยอร์ชื่อเพื่อรับข้อมูลที่ฉันต้องการ

ในความเป็นจริงฉันคิดว่าฉันเข้าใจว่าtopoคอลัมน์บนเลเยอร์มีข้อมูลเพียงพอที่จะรู้ว่าโทโพโลยีนั้นเกี่ยวข้องกันที่ไหนและยิ่งกว่านั้นtopologyสคีมาก็เก็บการอ้างอิงไปยังแต่ละตารางเลเยอร์สำหรับแต่ละโทโพโลยี

มีวิธีสั้น ๆ / ง่าย / เหมาะสมในการเข้าร่วมข้อมูลด้วยกันไหม? ฉันกำลังมองหาบางอย่างในฟังก์ชั่นการขยายโทโพโลยีแต่ไม่พบสิ่งที่มีประโยชน์


3
ฉันก็หลงทางว่าคุณควรใช้ทอพอโลยีด้วยเช่นกัน แต่อาจช่วยได้ คุณสามารถโยนโดยตรงกับเรขาคณิต:TopoGeometry SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tbประเด็นก็คือว่าถ้าขอบแยกในภายหลังดูเหมือนว่ารูปทรงเรขาคณิตอาจเปลี่ยนไป
jpmc26

1
สิ่งที่คุณต้องการคือเครื่องมือหรือการดำเนินการข้อมูลเช่นตัดกันผสานหรือผสาน QGIS ทำงานร่วมกับโพสต์ GIS และเป็นอิสระและมีเครื่องมือเช่นนี้ คุณสมบัติอยู่ในเลเยอร์และเข้าร่วมเมื่อคุณรวมเลเยอร์ตามการดำเนินการประเภทเหล่านั้น
lewis

คำตอบ:


1

การทำแผนที่ของคุณลักษณะที่จะโทโพโลยีไม่ได้โดยตรง ความสัมพันธ์คืออะไรเช่นนี้สำหรับโหนด:

your_topogeom -> (topogeom_id) relation table (element_id)-> (node_id) node

ดังนั้นข้อความสั่งที่คุณเลือกจะเป็นดังนี้:

SELECT whatever
FROM layer_tb l
INNER JOIN relation AS r ON (((l.mytopogeom).id , (l.mytopogeom).layer_id)) = (r.topogeo_id, r.layer_id  )
INNER JOIN edge_data AS e ON (r.element_id = e.edge_id)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.