如何建立GPS日志的地理数据库?


13

在空中野生动物调查中,我们通常会生成数十个GPX文件,并且通常将其中的大多数文件转换为shapefile,以便在GIS应用程序中显示。GPX文件是一种将所有(或几乎所有)GPS数据保存在一个地方的绝佳方法–它们是xml文件,以一种方便的格式存储了轨迹日志,航路点和路线信息。它们存储多个轨道,甚至可以存储Garmin中保存的旧轨道。

我想将所有这些跟踪数据存储在spacespaceite数据库中,并与其他具有来自同一测量的点观测数据的表并行存储。

ogr2ogr将让我将轨道转换为spacespaceite数据库:

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'

但是,这会将每个已保存的轨道导入为一行-丢失了每个轨道点的时间/位置信息!

有人知道构建跟踪日志数据库以保留该信息的任何巧妙方法吗?

编辑

Tracklog不仅是一条直线,而是连续点的集合,每个连续点都有一个height和time属性。每个点都属于一个轨道段,而该轨道段又属于给定的轨道,并且每个轨道段内的点都是不间断地获取的,可以假定是链接的。例如:

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

因此,要保存跟踪日志,您需要保存这些点及其相关数据。

一种解决方案可能是将这些轨道作为点加载,并在轨道名称,路段,海拔和时间上添加其他列;不过,我认为Ogr不会将曲目转换为点。

感谢@scruss指出了gpx2spatialite,我使用进行了安装(OS X 10.9)sudo easy_install gpx2spatialite。这套工具是为“绘画生活”项目设计的(因此,其中包含一些“城市”信息,这对于我们大多数人来说可能是不必要的);gpx2spatialite主页上的解释不多,但是drawinglife Wiki更好。尽管如此,仍有许多未记录的功能-例如删除重复项!

为GPX文件创建一个spacespaceite数据库,该数据库将保存轨迹段,轨迹,轨迹点和航路点。它还设置了“用户”设置(这似乎很奇怪,因为sqlite不是用户访问系统,而是为了延长绘画寿命),旨在标记各种轨迹:

gpx2spatialite create_db MyGPXArchive.db

加载GPX文件的整个文件夹,包括所有子文件夹,并检查并删除重复项:

gpx2spatialite -s -d MyGPXArchive.db -u SL25 Selous2013/ 

选项:

  • -s=不检查跟踪点是否在城市数据库中(将其加快很多)
  • -d MyGPXArchive.db =要使用的数据库;
  • -u SL25 =添加用户SL25(仅是我用于收集的曲目集的标签);
  • Selous2013 =具有我感兴趣的曲目的文件夹(带有子文件夹)。

错误:

  • 如果您在较旧的Garmin上保存了轨道,而该轨道会丢弃时间戳记信息,则会使导入崩溃(使用GPSU之类的实用程序删除那些保存的轨道)。如果您有gpsbabel,请首先使用类似以下内容的文件进行过滤:

    gpsbabel -w -r -t -i gpx -f [INPUT.gpx] -x track,start = 20000101 -o gpx -F [OUTPUT.gpx]


我们使用FME safe.com/fme/fme-technology/fme-desktop/features,它维护了您想要进入Oracle数据库的所有属性
Mapperz

1
@Mapperz-FME是否有保存GPX文件的特定方法?我真的很想使用FOSS解决方案。
Simbamangu'9

Answers:


6

ptrv / gpx2spatialite可以很好地做到这一点,节省了所有点的时间戳,并导出了轨道的速度和长度数据。它还不会导入重复的曲目,因此您可以为GPX文件提供大量的曲目,并且可以适当地调整它们。

更新:根据要求的用法示例:

初始化新数据库:

gpx2spatialite_create_db db.sqlite

添加一个gpx文件:

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

(如果用户名user在数据库中不存在,将查询是否要创建它。数据库是使用分配给一个或多个用户的航迹/航路点/路线建立的。)

将所有gpx文件添加到folder /中

gpx2spatialite -d db.sqlite -u user folder/

使用方法:它是一个空间数据库,用表tracklines保持轨道作为折线,航迹含有单独的点(与时间,海拔等),和航点为任何定义的航点。还有许多索引,一些世界城市定义以及可能还没有探索的嵌入式SLD样式信息。举一个简单的例子,这是一张地图,它通过约7年的跟踪日志来定义我的家乡(多伦多):

多伦多GPS日志

通过使用透明度为75%的线条,最常旅行的路线会变暗。


啊哈,还没有意识到easy_install gpx2spatialite实际上会将其安装为可从命令行访问的脚本!该user选项也令人困惑,他们没有在主页上解释它,而spacespaceite是不受访问限制的系统。
Simbamangu 2014年

user选项对Drawinglife项目很有意义,因为它允许多个参与者将其轨迹添加到同一数据库中。感谢您提供有关排除城市标签的提示,以及查找崩溃原因的提示。如果您有没有时间戳记的GPX文件,则可以使用GPSBabel的faketime选项合成时间数据。
scruss 2014年

1
仅供参考,gpx2spatialite语法已更改。现在是典型的导入命令gpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss

3

进一步说明-“ FME是否有保存GPX文件的特定方法?”

是的,您可以完全控制路线,航点,航迹和元数据 在此处输入图片说明

FME是一个非常有价值且功能强大的工具,可一起处理gis数据和非空间数据。

有关更多详细信息,请参见 http://evangelism.safe.com/fmeevangelist26/


2

有一些想法在这里创建自己的程序在Python和Perl提取GPX数据。从这里开始,将数据放入一个spacespaceite数据库并不是一件容易的事。您将需要考虑一种用于存储在spacealite中的合适架构-您要保留哪些属性?)。


1

如果您想使用OGR路线,最好的方法是先导出到Shapefile,这将导出代表航路点/航迹点/航向/航迹区别和相关元数据的多个shapefile,然后将每组文件合并到主SQLite中数据库。


-1

尝试添加

-lco GPS_USE_EXTENSIONS=YES

到您的ogr2ogr命令


我在新表上尝试过-对结果字段或数据没有影响。您期望它做什么?
Simbamangu'9

我期待获得扩展属性。重读您的问题,除了将轨迹本身导出为点外,我认为没有其他方法可以获取每个单独的轨迹点时间。
Micha 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.