在空中野生动物调查中,我们通常会生成数十个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]