Comment construire une base de données géographiques de journaux GPS?

13

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]

Simbamangu
la source
Nous utilisons FME safe.com/fme/fme-technology/fme-desktop/features et il conserve toute l'attribution que vous souhaitez dans une base de données Oracle
Mapperz
1
@Mapperz - FME a-t-il une méthode spécifique pour enregistrer les fichiers GPX? Je suis vraiment à la recherche d'une solution FOSS.
Simbamangu

Réponses:

6

ptrv / gpx2spatialite le fait remarquablement bien, économisant des horodatages pour tous les points et dérivant des données de vitesse et de longueur pour les pistes. Il n'importera pas non plus de pistes en double, vous pouvez donc lui fournir une énorme pile de fichiers GPX et les munir de manière appropriée.

Mise à jour : exemples d'utilisation, comme demandé:

Initialiser une nouvelle base de données:

gpx2spatialite_create_db db.sqlite

Ajoutez un seul fichier gpx:

gpx2spatialite -d db.sqlite -u user file.gpx

(Si l'utilisateur nom d' utilisateur n'existe pas dans la base de données, demandera si vous souhaitez le créer. La base de données est construite avec des traces / waypoints / routes attribuées à un ou plusieurs utilisateurs.)

Ajoutez tous les fichiers gpx dans le dossier / :

gpx2spatialite -d db.sqlite -u user folder/

Utilisation: il est une base de données spatiales, avec table Tracklines tenant les pistes comme polylignes, trackpoints contenant les points individuels (avec le temps, l' altitude, etc.), et les points de passage pour les points de cheminement définis. Il existe également de nombreux indices, certaines définitions de villes du monde et éventuellement des informations de style SLD intégrées que je n'ai pas encore explorées. À titre d'exemple trivial, voici une carte de la façon dont ma ville natale (Toronto) est définie à travers ~ 7 ans de journaux de suivi:

Journaux GPS de Toronto

En utilisant des lignes à 75% de transparence, les itinéraires les plus fréquentés deviennent plus sombres.

scruss
la source
Aha, ne s'était pas rendu compte que easy_install gpx2spatialitecela l'installerait réellement en tant que script accessible depuis la ligne de commande! L' useroption était également déroutante, ils ne l'expliquent pas sur la page principale, et spatialite est un système sans restriction d'accès.
Simbamangu
L' useroption est logique pour le projet Drawinglife, car elle permet à plusieurs participants d'ajouter leurs pistes à la même base de données. Merci pour les conseils sur l'exclusion du tag City et pour avoir trouvé les raisons des plantages. Si vous avez des fichiers GPX sans horodatage, vous pouvez synthétiser les données temporelles à l'aide de l' option faketime de GPSBabel .
scruss
1
Pour info, la syntaxe de gpx2spatialite a changé. La commande d'importation typique est maintenantgpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss
3

Pour approfondir votre commentaire - "FME a-t-il une méthode spécifique pour enregistrer les fichiers GPX?"

Oui, vous avez un contrôle total sur les itinéraires, les waypoints, les traces et les métadonnées entrez la description de l'image ici

FME est un outil très utile et puissant pour manipuler des données SIG et des données non spatiales ensemble.

voir pour plus de détails http://evangelism.safe.com/fmeevangelist26/

Mapperz
la source
2

Il y a quelques idées ici pour créer votre propre programme pour extraire des données gpx en python ou perl. À partir d'ici, il n'est pas trop difficile de mettre les données dans une base de données spatialite. Vous devrez penser à un schéma approprié pour le stockage dans spatialite - quels attributs souhaitez-vous conserver?).

Stev_k
la source
1

Si vous souhaitez suivre la route OGR, la meilleure approche consiste à exporter d'abord vers Shapefile, qui exportera plusieurs fichiers de formes représentant la distinction waypoint / trackpoint / way / track et les métadonnées associées, puis fusionner chaque ensemble de fichiers dans votre SQLite principal base de données.

tmcw
la source
-1

Essayez d'ajouter

-lco GPS_USE_EXTENSIONS=YES

à votre commande ogr2ogr

Micha
la source
J'ai essayé ceci sur une nouvelle table - sans effet sur les champs ou les données résultants. Qu'attendez-vous qu'il fasse?
Simbamangu
Je m'attendais à obtenir les attributs étendus. En relisant votre question, je ne pense pas qu'il soit de toute façon possible d'obtenir chaque point de piste individuel autre que l'exportation de la piste en tant que points eux-mêmes.
Micha