ลบคอลัมน์ที่ไม่ต้องการออกจากไฟล์ข้อมูลทางภูมิศาสตร์หรือไม่


10

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

ฉันต้องการทำสิ่งนี้จากบรรทัดคำสั่งเนื่องจากฉันมีไฟล์จำนวนมาก

ฉันสามารถแปลงไฟล์ GML เป็นรูปแบบต่าง ๆ ได้โดยใช้ogr2ogrดังนั้นคำถามของฉันคือ: วิธีที่ง่ายที่สุดในการลบคอลัมน์ออกจากไฟล์ข้อมูลทางภูมิศาสตร์จากบรรทัดคำสั่งคืออะไร

ฉันเป็นโปรแกรมเมอร์ Python ดังนั้นสัญชาตญาณของฉันคือการแปลงไฟล์เป็น GeoJSON จากนั้นใช้วิธีการแยกวิเคราะห์ JSON ของ Python เพื่ออ่านและเขียนไฟล์ JSON อีกครั้ง

แต่อาจมีวิธีที่ตรงกว่านี้โดยใช้เครื่องมือ GDAL หรือคล้ายกัน

คำตอบ:


10

ไม่จำเป็นต้องใช้ Shapefile ในรูปแบบไฟล์ชั่วคราวและอาจเปลี่ยนแปลงข้อมูล GML (ย่อชื่อแอตทริบิวต์ตัดสายอักขระสูงสุด 255 ตัวอักษรเปลี่ยน DATETIME เป็น DATE เป็นต้น)

ฉันจะใช้ ogr2ogr ไม่ใช่โดยการวางคุณลักษณะที่ไม่ต้องการ แต่โดยการเลือกสิ่งที่ต้องการ ภาษา SQLite SQL นั้นเป็นมาตรฐานมากกว่าภาษา OGR defauld นั่นคือสาเหตุที่ฉันใช้มันแม้จะไม่จำเป็นสำหรับแบบสอบถามนี้

ogr2ogr -f GML -dialect SQLite -sql "SELECT attr1, attr2, attr3,... FROM layer" output.gml input.gml

9

คุณสามารถลบฟิลด์โดยใช้OGR SQLและเลือกรูปแบบ OGR ซึ่งรองรับการลบฟิลด์ น่าเสียดายที่ GML ไม่รองรับดังนั้นคุณต้องผ่านรูปแบบอื่นเช่น SHP:

ogr2ogr temp.shp input.gml
ogrinfo temp.shp -sql "ALTER TABLE temp DROP COLUMN field_to_drop"
ogr2ogr -f GML output.gml temp.shp

ฉันสามารถทำสิ่งที่เรียบง่ายคล้ายกันกับไดร์เวอร์ GeoJSON ogrinfo input.geojson -sql "ALTER TABLE input DROP COLUMN field_to_drop" บันทึกการใช้ชื่อไฟล์เป็นตารางเพื่อแก้ไข
vpipkt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.