ค้นหาซับไลน์ที่กำหนดค่าออฟเซ็ตเริ่มต้นและขั้นสุดท้ายผ่านทางบรรทัดคำสั่ง

Aug 19 2020

ฉันมีไฟล์ CSV ที่มีลักษณะดังนี้:

id,id_wkt,start,end,wkt
11,11,0,43,"LINESTRING(3.3623676 51.3132714,3.3626663 51.3130068,3.363068 51.3126811,3.3636323 51.3122504,3.3640754 51.3119614,3.3643705 51.3117777)"
12,11,43,217,"LINESTRING(3.3623676 51.3132714,3.3626663 51.3130068,3.363068 51.3126811,3.3636323 51.3122504,3.3640754 51.3119614,3.3643705 51.3117777)"

ประกอบด้วยระเบียนที่มี WKT linestring WKT บางตัวปรากฏขึ้นหลายครั้งและต้องได้รับรูปทรงเรขาคณิตจริงจากเส้นสายโดยใช้การชดเชยจุดเริ่มต้นและจุดสิ้นสุด (ความยาวเป็นเมตรตามแนวเส้น) ในคอลัมน์ที่เกี่ยวข้อง

ฉันต้องการแยกสตริงย่อยตามการชดเชยความยาวเหล่านี้ เป็นไปได้ผ่านเครื่องมือบรรทัดคำสั่งเช่น OGR หรือไม่?

คำตอบ

Socci Aug 18 2020 at 22:08

หลังจากการวิจัยฉันพบวิธีแก้ปัญหาโดยใช้ogr2ogr:

ogr2ogr output.csv -lco GEOMETRY=AS_WKT input.csv -dialect SQLITE -sql "SELECT id, id_wkt, ST_Line_Substring(GEOMETRY, start / GeodesicLength(GEOMETRY), end / GeodesicLength(GEOMETRY)) FROM input"

มันให้

WKT,id,id_wkt
"LINESTRING (3.3623676 51.3132714,3.3626663 51.3130068,3.36274075608485 51.3129464307024)","11","11"
"LINESTRING (3.36274075608485 51.3129464307024,3.363068 51.3126811,3.3636323 51.3122504,3.3640754 51.3119614,3.36436609040842 51.3117804449745)","12","11"