Lors de nos relevés aériens de la faune, nous générons généralement des dizaines de fichiers GPX et convertissons généralement la plupart d'entre eux en fichiers de formes à afficher dans une application SIG. Les fichiers GPX sont un excellent moyen de conserver toutes (ou presque) toutes vos données GPS en un seul endroit - ce sont des fichiers xml qui stockent le journal de suivi, les waypoints et les informations d'itinéraire dans un format pratique. Ils stockent plusieurs pistes, même d'anciennes pistes enregistrées à partir d'un Garmin.
Je voudrais stocker toutes ces données de piste dans une base de données spatialite, en parallèle avec d'autres tables qui contiennent des données d'observation ponctuelles de la même enquête.
ogr2ogr me permettra de convertir la piste en une base de données spatialite:
ogr2ogr -append -f "SQLite" -dsco SPATIALITE=yes # add to table with Spatialite filetype
-dsco INIT_WITH_EPSG=yes -t_srs epsg:4326 # using WGS84
SURVEYDATA.sqlite GPXFILE.gpx tracks -nln tracktable; # adding tracks to 'tracktable'
Cependant, cela importe chaque piste enregistrée sous forme de ligne - perdant les informations de temps / emplacement pour chaque point de piste!
Quelqu'un connaît-il des moyens intelligents de créer une base de données de suivi qui préservera ces informations?
MODIFIER :
Les tracklogs ne sont pas seulement une ligne - ce sont des collections de points séquentiels, chacun avec un attribut d'élévation et de temps. Chaque point appartient à un segment de piste, qui à son tour appartient à une piste donnée, et les points de chaque segment de piste ont été pris sans interruption et peuvent être considérés comme liés. Par exemple:
<trk><name>ACTIVE LOG</name>
<trkseg>
<trkpt lat="-13.471403" lon="31.382982"><ele>467.818725585938</ele><time>2009-09-09T03:53:38Z</time></trkpt>
<trkpt lat="-13.471403" lon="31.382982"><ele>468.780029296875</ele><time>2009-09-09T03:53:50Z</time></trkpt>
<trkpt lat="-13.471403" lon="31.382982"><ele>465.896118164063</ele><time>2009-09-09T03:54:43Z</time></trkpt>
</trkseg>
Ainsi, pour enregistrer un tracklog, vous devez enregistrer cette collection de points avec leurs données associées.
Une solution pourrait être de charger ces traces en tant que points, avec des colonnes supplémentaires pour le nom de la piste, le segment, l'élévation et l'heure; Cependant, je ne pense pas que l'ogr convertira les pistes en points.
Solution
Merci à @scruss qui a souligné gpx2spatialite , avec lequel j'ai installé (OS X 10.9) sudo easy_install gpx2spatialite
. Cet ensemble d'outils est conçu pour le projet «drawinglife» (et contient donc des informations sur la «ville» qui sont probablement inutiles pour la plupart d'entre nous); la page principale de gpx2spatialite n'explique pas grand-chose, mais le wiki drawinglife est meilleur. Pourtant, beaucoup de fonctionnalités non documentées - comme la suppression des doublons!
Créez une base de données spatialite pour les fichiers GPX qui contiendra les segments de piste, les pistes, les trackpoints et les waypoints. Il a également mis en place des `` utilisateurs '' (ce qui semble étrange, car sqlite n'est pas un système d'accès utilisateur, mais était destiné à la vie de dessin) conçu pour étiqueter les différentes pistes:
gpx2spatialite create_db MyGPXArchive.db
Chargez un dossier entier de fichiers GPX, y compris tous les sous-dossiers, en vérifiant et en supprimant les doublons en cours de route:
gpx2spatialite -s -d MyGPXArchive.db -u SL25 Selous2013/
Options:
-s
= ne vérifie pas si les trackpoints sont dans la base de données de la ville (accélère beaucoup)-d MyGPXArchive.db
= base de données à utiliser;-u SL25
= ajouter l'utilisateur SL25 (juste une étiquette que j'ai utilisée pour l'ensemble des pistes collectées);Selous2013
= le dossier (avec sous-dossiers) qui contient les pistes qui m'intéressent.
Bugs:
Si vous avez enregistré des traces sur un Garmin plus ancien qui rejette les informations d'horodatage, cela bloquera l'importation (supprimez ces traces enregistrées à l'aide d'un utilitaire comme GPSU). Si vous avez gpsbabel , filtrez d'abord le fichier avec quelque chose comme:
gpsbabel -w -r -t -i gpx -f [INPUT.gpx] -x piste, start = 20000101 -o gpx -F [OUTPUT.gpx]