Trouver des sous-lignes, compte tenu des décalages initiaux et finaux, via la ligne de commande

Aug 19 2020

J'ai un fichier CSV qui ressemble essentiellement à ceci :

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)"

Il se compose d'enregistrements avec une chaîne de lignes WKT. Certains des WKT apparaissent plusieurs fois et la géométrie réelle doit être obtenue à partir de la chaîne de lignes en utilisant les décalages de début et de fin (longueur en mètres le long de la ligne) dans leurs colonnes respectives.

Je voudrais extraire des sublinestrings en fonction de ces décalages de longueur. Est-ce possible via un outil en ligne de commande comme OGR ?

Réponses

Socci Aug 18 2020 at 22:08

Après quelques recherches, j'ai en effet trouvé une solution, en utilisant 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"

Il donne

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"