ละลายหรือไม่ใส่สายบนแอตทริบิวต์ทั่วไปใน PostGIS หรือ GRASS?


9

ฉันมีรูปร่างไฟล์กลางถนนที่แยกถนนทุกสี่แยก อย่างไรก็ตามฉันต้องการเข้าร่วม LINESTRING ที่มีชุดคุณสมบัติทั่วไปใน LINESTRING เดียว ตราบใดที่ชื่อขีด จำกัด ความเร็ว ฯลฯ ไม่เปลี่ยนแปลงฉันต้องการรวมเข้าด้วยกัน นี่คือการรวมในที่สุดใน OpenStreetMap

ดูเหมือนว่าซอฟต์แวร์ ArcGIS สำหรับเดสก์ท็อปของ Esri จะอนุญาตสิ่งนี้ด้วยคำสั่ง Dissolve และตัวเลือก UNSPLIT_LINES

ฉันพบคำสั่ง Dissolve ใน QGIS แต่ดูเหมือนว่าจะใช้ได้กับรูปหลายเหลี่ยมและฟิลด์เดียวเท่านั้น

สมมติว่าไม่มีสิ่งใดสำหรับ QGIS ไม่มีใครรู้วิธีทำใน PostGIS หรือ GRASS?


สำหรับ PostGIS ให้ตรวจสอบgis.stackexchange.com/questions/1387/ …
underdark

หากคำถามนี้ถูกถามในวันนี้ฉันคิดว่ามันจะถูกปิดให้กว้างเกินไป แทนที่จะพยายามปิดตอนนี้ฉันจะแก้ไขเพื่อติดตั้งคำตอบที่มีอยู่เดิมใหม่อีกครั้งและป้องกันคำตอบที่กว้างขึ้น
PolyGeo

คำตอบ:


4

คำถามที่น่าสนใจ ฉันไม่คิดว่าตัวเองเป็นกูรู PostGIS แต่ผมเล่นกับปัญหาของคุณและมากับแบบสอบถามต่อไปนี้ที่ละลายทางหลวงLINESTRINGบันทึกลงในMULTILINESTRINGบันทึกเมื่อพวกเขามีค่านิยมร่วมกันในหลายช่อง (ในชุดของฉันฉันจับคู่บนnameและstateสาขา) ฉันใช้ OGR เพื่อดันไฟล์รูปร่างทางหลวง (เปลี่ยนชื่อเป็น ushwys) เป็น PostGREsql; wkb_geometryเพื่อให้ข้อมูลเรขาคณิตของฉันถูกเรียกว่า ลองแฮ็คข้อความค้นหานี้เพื่อรองรับข้อมูลและสภาพสนามของคุณ:

SELECT 
u.name, 
u.state, 
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines 
FROM ushwys u
GROUP BY u.name, u.state 
ORDER BY u.state 
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING

หากใช้งานได้คุณสามารถใช้ ogr2ogr เพื่อดำเนินการค้นหาและส่งออกผลลัพธ์ส่วนใหญ่ในรูปแบบเวกเตอร์ที่คุณต้องการเช่น shapefile, GML, CSV หรืออื่น ๆ สำหรับข้อมูลเกี่ยวกับการโทรแบบสอบถาม SQL จาก ogr2ogr ให้ตรวจสอบเอกสารOGR SQL

จากการอ้างอิงฉันได้ตรวจสอบคำแนะนำของ PostGIS ST_Collectรวมถึงไซต์นี้ที่แสดงการจัดกลุ่มในหลายเขตข้อมูล

หากคุณพบว่าการทำซ้ำของแบบสอบถามนี้ไม่ได้ผลสำหรับคุณโปรดแจ้งให้เราทราบและฉันจะตอบคำถามของฉันเพื่อไม่ให้คนรอบข้างสับสนและทำให้ผู้คนสับสน


ป.ล. ถ้าคุณไม่คุ้นเคยกับการใช้ ogr2ogr เพื่อส่ง geodata ไปยัง PostGIS ฉันใช้สคริปต์ ogr2ogr ต่อไปนี้เพื่อดำเนินการนำเข้าข้อมูลของฉัน ( ระวังการคัดลอกจากเว็บและวางลงในหน้าต่างคำสั่ง ogr2ogr โดยตรงเนื่องจากฉันพบว่าการจัดรูปแบบหน้าเว็บ แนะนำ linebreaks และการแทนที่ฟอนต์ / ตัวอักษรสำหรับอัญประกาศคู่ที่ทำลายสคริปต์ ogr ):

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password" 
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry

[Update]

ฉันต้องการดูว่า "ดู" สิ่งนี้ใน QGIS หลังจากเรียกใช้แบบสอบถามนั้นดังนั้นฉันจึงปรับเปลี่ยนแบบสอบถามเพื่อใช้WHEREประโยคนี้(ซึ่งทำให้ฉันทุกสายพันธุ์ทางหลวงหมายเลข 65 ของสหรัฐอเมริกาในรัฐมิสซูรี):

where u.state = 'MO' and u.name LIKE '%US%65%'

ต่อไปฉันใช้ QGIS และปลั๊กอิน QuickWKT เพื่อให้เห็นภาพทั้งหมดแปด (8) ของMULTILINESTRINGบันทึกทางหลวงที่เป็นผลลัพธ์ของฉัน อย่างที่คุณเห็นในภาพหน้าจอผลลัพธ์สุดท้ายใช้เวลา Hwy 65 จากชายแดนด้านเหนือของ Missoui กับ Iowa ไปจนถึงชายแดนทางใต้ของเธอกับ Arkansas:

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

สำหรับฉันแล้วการสร้างภาพข้อมูลนี้แสดงให้เห็นว่าการสืบค้นของฉันไม่ได้สร้างการทำซ้ำหรือกำจัดคุณลักษณะที่ไม่คาดคิด ดังนั้นต่อไปฉันก็สงสัยว่า "โอเคการละลายที่ส่งคืนแปดคุณลักษณะ แต่จำนวนฟีเจอร์ในตารางดั้งเดิมเป็นตัวแทนของ Hwy 65 ในรัฐมิสซูรีจริงหรือไม่" คำถามถัดไปของฉันตอบคำถามนั้น ดูเหมือนว่าชุดข้อมูลดั้งเดิมจะใช้คุณสมบัติสามสิบแปด (38) เพื่อเป็นตัวแทนของ Hwy 65 ในรัฐมิสซูรี่:

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38

ในการวิเคราะห์ขั้นสุดท้ายแบบสอบถามลดคุณลักษณะสามสิบแปด (38) ไปเป็นแปด (8) คุณสมบัติที่ใช้ร่วมกันในเขตข้อมูลชื่อและรัฐ ณ จุดนี้ฉันค่อนข้างมั่นใจว่าแบบสอบถามนี้มีประโยชน์และเหมาะสมสำหรับการละลายรูปทรงเรขาคณิตส่วนเดียวออกเป็นรูปหลายส่วนเมื่องานที่ต้องละลายต้องพิจารณาหลายเขตข้อมูล

ไชโย :)



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