คำถามที่น่าสนใจ ฉันไม่คิดว่าตัวเองเป็นกูรู 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) คุณสมบัติที่ใช้ร่วมกันในเขตข้อมูลชื่อและรัฐ ณ จุดนี้ฉันค่อนข้างมั่นใจว่าแบบสอบถามนี้มีประโยชน์และเหมาะสมสำหรับการละลายรูปทรงเรขาคณิตส่วนเดียวออกเป็นรูปหลายส่วนเมื่องานที่ต้องละลายต้องพิจารณาหลายเขตข้อมูล
ไชโย :)