ฉันมีรูปร่างไฟล์ที่มีรายละเอียดอย่างเหมาะสมพร้อมด้วยคุณสมบัติรูปหลายเหลี่ยม / รูปหลายเหลี่ยม (ไฟล์ประมาณ 500mb) จริงๆแล้วมันเป็นรูปร่างของโลกทั้งใบด้วยคุณสมบัติที่เป็นตัวแทนของแนวชายฝั่ง ฉันต้องการหารข้อมูลนี้โดยใช้กริด เพื่อความชัดเจนฉันไม่ต้องการ 'เรียงลำดับ' ข้อมูล แต่จริง ๆ แล้วตัดรูปหลายเหลี่ยมขึ้นเป็นแบบเรียงต่อกัน ฉันรู้ว่าคำถามนี้ถูกถามมาก่อน แต่วิธีแก้ปัญหาที่พบนั้นใช้ไม่ได้สำหรับฉัน
ฉันได้พยายาม:
การใช้ QGIS และตัดเนื้อหา Shapefile ของฉันด้วยเวกเตอร์กริด - ผลลัพธ์แย่มาก เจ้าของที่ดินรายใหญ่ส่วนใหญ่หายตัวไปอย่างน่าอัศจรรย์แม้ว่าบางครั้งมันอาจดูเหมือนว่าเป็นที่ดินขนาดเล็กก็ตาม ฉันควรทราบว่าวิธีนี้ใช้ได้ดีกับข้อมูลที่ง่ายกว่า (เช่น. คะแนนน้อยกว่า)
การใช้เครื่องมือ Intersection ของ OGR ฉันลองทั้งผ่าน ogr2ogr และแม้กระทั่งโดยการหมุนเครื่องมือ C ++ ของฉันเอง ทั้งคู่มีปัญหาเดียวกันกับ QGIS พวกเขายังไม่แสดงปัญหานี้สำหรับไฟล์แบบง่าย ๆ แต่จะไม่ทำให้ไฟล์ซับซ้อนขึ้น สำหรับการอ้างอิงฉันใช้ shapefile ของออสเตรเลียและนิวซีแลนด์ต่ำกว่า 20mb ในขนาดและทั้ง QGIS และ OGR ล้มเหลวในการ 'จัดเรียง' มัน
มีคนแนะนำให้ใช้ PostGIS ณ จุดหนึ่งเนื่องจากมีฟังก์ชั่นการแยก - แต่ ST_Intersect ของ PostGIS ใช้ GEOS ด้านหลังเหมือนกับ OGR ในความเป็นจริงพวกเขาทั้งคู่เรียกใช้ฟังก์ชันเดียวกันเท่าที่ฉันสามารถบอกได้ดังนั้นฉันจึงไม่คิดว่า PostGIS จะให้ผลลัพธ์ที่แตกต่างกัน
ฉันกำลังมองหาข้อเสนอแนะเกี่ยวกับสิ่งที่ฉันสามารถลอง ฉันต้องการแอพพลิเคชั่นหรือชุดเครื่องมือที่แข็งแกร่งซึ่งสามารถแบ่งรูปร่างที่มีรายละเอียดสูงออกเป็นกระเบื้องได้
แก้ไข: การเพิ่มข้อมูลเพิ่มเติม
ในการตอบสนองต่อ Simbamangu:
Shapefile นั้นเป็นข้อมูลแนวชายฝั่งจาก OpenStreetMap มันเป็นไฟล์ที่ถูกรวมเข้าด้วยกันของ 'processing_p' (ดังนั้นมันจึงไม่แยกเป็นไทล์) ที่ฉันได้รับโดยการส่งอีเมลรายการ dev ของพวกเขา โปรดทราบว่าการแยกของพวกเขากระเบื้อง (เป็นชิ้น 100km x 100km กับทับซ้อน) ไม่จำเป็นต้องเป็นสิ่งที่ฉันต้องการ - ฉันไม่ต้องการเหลื่อมกันและฉันต้องการอิสระในการเลือกขนาดกริดหรือฉันแค่ใช้ ค่าเริ่มต้น processing_p
โดยค่าเริ่มต้นข้อมูลชายฝั่งมีข้อผิดพลาดทางเรขาคณิตที่รายงานโดย QGIS ฉันแก้ไขข้อผิดพลาดเหล่านี้ด้วยเครื่องมือขนาดเล็กที่ฉันรวบรวมไว้โดยใช้รหัสที่ฉันพบออกแบบมาเพื่อแก้ไขปัญหานี้โดยเฉพาะ (การซ่อมแซมข้อผิดพลาดทางเรขาคณิตในข้อมูลชายฝั่ง: https://github.com/tudelft-gist/prepair ) การเรียกใช้ไฟล์ด้วยเครื่องมือนี้จะช่วยแก้ไขข้อผิดพลาดแทบทั้งหมดที่ QGIS หยิบขึ้นมา ฉันพยายามแยกกันหลังจากทำความสะอาดไฟล์เท่านั้น
สิ่งที่ฉันทำโดยใช้ QGIS: เปิดข้อมูลเพื่อให้แน่ใจว่าดูดีใน QGIS ลองแบ่งเป็นแผ่นย่อยโดยสร้างเลเยอร์ของกระเบื้องโดยใช้ Vector Grid ด้วยระยะห่างที่กำหนดจากนั้นทำการตัดสองชั้น - โดยไม่ต้องไป ลองใช้ชุดข้อมูลที่เล็กลง - เลือกคุณสมบัติในโอเชียเนีย (Aus, นิวซีแลนด์) เพื่อลองชุดข้อมูลที่เล็กลง - ไฟล์รูปร่างนี้มีขนาด <20mb ลองแบ่งอีกครั้งไม่ทำงาน
สิ่งที่ฉันทำกับ OGR: ogr2ogr โดยตรงโดยใช้ตัวเลือก '-spat' และ '-clipsrc' ด้วย spat_extent ยังเขียนเครื่องมือ C ++ ขนาดเล็กที่ทำงานบน WKT ดังนั้นฉันจึงแปลง shapefile เป็น WKT โดยใช้ ogr2ogr จากนั้นป้อนไฟล์ข้อความไปยังแอปพลิเคชันของฉัน มันวิ่งผ่านไฟล์และเรียกสี่แยก () วิธีการบันทึกไว้ที่นี่: http://www.gdal.org/ogr/classOGRGeometry.html ฉันคิดว่ามันจบลงด้วยการทำสิ่งเดียวกันกับการใช้ ogr2ogr โดยตรง
ในการตอบสนองต่อ Brent:
- มันทำ ทุกอย่างอยู่ใน WGS84 Lat / Lon
- ฉันคิดว่าสิ่งที่ตรงกันข้ามนั้นเป็นจริง - สำหรับชุดของตารางกริดที่ได้รับนั้นจะใช้เวลานานกว่าในการตัดรูปหลายเหลี่ยมขนาดยักษ์หนึ่งก้อนแทนที่จะเป็นรูปแบบที่กระจัดกระจายซึ่งอาจมีการแปลเชิงพื้นที่มากขึ้นสำหรับแต่ละกระเบื้อง ข้อเสนอแนะที่น่าสนใจ - ฉันจะลองแล้วรายงานกลับ
- ไม่มีการเก็บฟิลด์ของแอตทริบิวต์ในระหว่างกระบวนการฉันสนใจเฉพาะรูปทรงเรขาคณิตเท่านั้น
- ฉันไม่แน่ใจ แต่ฉันคิดว่าคุณกำลังบอกว่าฉันควรเลือกรูปหลายเหลี่ยมที่ทับซ้อนกันของแผ่นตารางที่กำหนดและจากนั้นดำเนินการทางแยก นี่เป็นเรื่องยุ่งยากด้วยตนเองกับ QGIS เครื่องมือของฉันทำสิ่งนี้ในระดับหนึ่งด้วยการทำเครื่องหมายในกล่องขอบเขต มีความเร็วเพิ่มขึ้นเล็กน้อย แต่ผลลัพธ์ที่ได้ยังไม่ดีและไม่แตกต่างกันอย่างเห็นได้ชัด
- นี่ไม่ใช่ตัวเลือก ตอนนี้ฉันกำลังพยายามแบ่งข้อมูลเพื่อให้มันมีขนาด 1 องศาละติจูดและลองจิจูดต่ำกว่า 1 องศาและฉันกำลังมองหาวิธีการทั่วไป / มีประสิทธิภาพที่ทำงานได้กับทุกกรณี ฉันพยายามเพิ่มขนาดกริด (เช่น 10x10) เพื่อดูว่าฉันจะได้ผลลัพธ์ที่ดีขึ้นหรือไม่และฉันไม่เห็นความสัมพันธ์ระหว่างขนาดกริดกับคุณภาพของผลผลิต
แก้ไข # 2:
ฉันได้ลองเล่นกับสิ่งนี้มากขึ้นและโดยทั่วไปดูเหมือนว่าผลลัพธ์จะไม่น่าเชื่อถือทั้งที่ใช้ GEOS และกับ QGIS (ซึ่งใช้ fTools ฉันไม่ทราบว่าในทางกลับกันจะใช้ GEOS อีกครั้ง) ฉันผิดที่ระบุขนาดของกริดไม่เกี่ยวข้องกับผลลัพธ์ - ยิ่งกริดนั้นใหญ่ขึ้นเท่าไรผลลัพธ์ก็จะยิ่งดีขึ้นเท่านั้น (นั่นเป็นเรื่องดีที่จะรู้ แต่ก็ไม่ใช่วิธีแก้ปัญหา) นี่คือภาพหน้าจอของตารางที่เว้นระยะจริงๆซึ่งส่วนใหญ่ใช้งานได้ แต่ล้มเหลวบางส่วนในไทล์เดียว:
รูปทรงเรขาคณิตสะอาด - QGIS แสดงข้อผิดพลาด 0 รายการด้วยเครื่องมือ "ตรวจสอบความถูกต้อง" ฉันไม่ได้มองหาวิธีแก้ไขปัญหานี้ทีละขั้นตอน การตรวจสอบว่าคุณสมบัติบางอย่างไม่สามารถทำการตัดกันบนชุดข้อมูลขนาดใหญ่นี้ได้หรือไม่เมื่อมันไม่สามารถมองเห็นได้