Как построить географическую базу данных логов GPS?

13

В наших аэрофотосъемках мы обычно генерируем десятки файлов GPX и обычно конвертируем большинство из них в шейп-файлы для отображения в приложении ГИС. GPX-файлы - это отличный способ хранить все (или почти все) ваши GPS-данные в одном месте - это XML-файлы, которые хранят треклог, путевую точку и информацию о маршруте в одном удобном формате. Они хранят несколько треков, даже старые сохраненные треки с Garmin.

Я хотел бы сохранить все эти данные треков в пространственной базе данных параллельно с другими таблицами, которые имеют данные наблюдений за точками из того же опроса.

ogr2ogr позволит мне преобразовать трек в пространственную базу данных:

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, которая сохранит эту информацию?

РЕДАКТИРОВАТЬ :

Журналы треков - это не просто линии - это наборы последовательных точек, каждая из которых имеет атрибуты высоты и времени. Каждая точка принадлежит сегменту трека, который, в свою очередь, принадлежит данному треку, и точки в каждом сегменте трека были взяты без перерыва и могут быть предположены связанными. Например:

<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. Этот набор инструментов предназначен для проекта «DrawingLife» (и поэтому содержит некоторую «городскую» информацию, которая, вероятно, не нужна большинству из нас); главная страница gpx2spatialite ничего не объясняет, но вики-жизнь с рисунками лучше. Тем не менее, множество недокументированных функций - как удаление дубликатов!

Создайте пространственную базу данных для файлов GPX, которая будет содержать сегменты треков, треки, трекпоинты и путевые точки. У него также есть настроенные «пользователи» (что кажется странным, поскольку 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 дорожка, начало = 20000101 -o gpx -F [OUTPUT.gpx]

Simbamangu
источник
Мы используем FME safe.com/fme/fme-technology/fme-desktop/features, и он поддерживает всю необходимую атрибуцию в базе данных Oracle
Mapperz
1
@Mapperz - есть ли у FME особый метод для сохранения файлов GPX? Я действительно после решения FOSS, хотя.
Симбамангу

Ответы:

6

ptrv / gpx2spatialite делает это замечательно, сохраняя временные метки для всех точек и получая данные скорости и длины для треков. Он также не будет импортировать дубликаты дорожек, так что вы можете кормить его огромной кучей файлов GPX, и он будет соответствующим образом обрабатывать их.

Обновление : примеры использования по запросу:

Инициализируйте новую базу данных:

gpx2spatialite_create_db db.sqlite

Добавьте один файл gpx:

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

(Если имя пользователя user не существует в базе данных, запросит, хотите ли вы его создать. База данных построена с треками / путевыми точками / маршрутами, назначенными одному или нескольким пользователям.)

Добавьте все файлы gpx в папку / :

gpx2spatialite -d db.sqlite -u user folder/

Использование: это пространственная база данных, со столом Маршрут следования проведения дорожек в качестве полилинии, точки треков , содержащих отдельные точки (со временем, высота, и т.д.), а также точек маршрута для любых заданных точек. Есть также многочисленные индексы, некоторые определения городов мира и, возможно, также встроенная информация о стиле SLD, которую я еще не исследовал. В качестве тривиального примера, вот карта того, как мой родной город (Торонто) определяется через ~ 7 лет отслеживания:

Торонто GPS журналы

При использовании линий с прозрачностью 75% наиболее часто используемые маршруты становятся темнее.

scruss
источник
Ага, не понимал, easy_install gpx2spatialiteчто на самом деле установит его как скрипт, доступный из командной строки! Эта userопция также сбивала с толку, они не объясняют ее на главной странице, а Spaceite - это система без ограничений доступа.
Симбамангу
Эта userопция имеет смысл для проекта Drawinglife, поскольку она позволяет нескольким участникам добавлять свои треки в одну базу данных. Спасибо за подсказки об исключении тегов City и за поиск причин сбоев. Если у вас есть файлы GPX без меток времени, вы можете синтезировать данные времени, используя опцию faketime GPSBabel .
scruss
1
К вашему сведению, синтаксис gpx2spatialite изменился. Типичная команда импорта теперьgpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss
3

В продолжение вашего комментария - "есть ли у FME особый метод для сохранения файлов GPX?"

Да, у вас есть полный контроль над маршрутами, путевыми точками, треками и метаданными введите описание изображения здесь

FME - очень достойный и мощный инструмент для совместной работы с ГИС-данными и непространственными данными.

см. для получения более подробной информации http://evangelism.safe.com/fmeevangelist26/

Mapperz
источник
2

Есть некоторые идеи здесь для создания собственной программы для извлечения GPX данных в Python или Perl. Отсюда нет ничего сложного в том, чтобы поместить данные в пространственную базу данных. Вам нужно будет подумать о подходящей схеме для хранения в пространственном пространстве - какие атрибуты вы хотите сохранить?).

Stev_k
источник
1

Если вы хотите пойти по маршруту OGR, лучшим подходом будет сначала экспортировать в Shapefile, который будет экспортировать несколько шейп-файлов, представляющих различие между путевой точкой / трекпоинтом / путём / треком и соответствующими метаданными, а затем объединить каждый набор файлов в ваш основной SQLite. база данных.

tmcw
источник
-1

Попробуйте добавить

-lco GPS_USE_EXTENSIONS=YES

на вашу команду ogr2ogr

Миха
источник
Я попробовал это на новой таблице - без влияния на результирующие поля или данные. Что вы ожидаете от этого?
Симбамангу
Я ожидал получить расширенные атрибуты. Перечитывая ваш вопрос, я не думаю, что в любом случае можно получить время каждого отдельного трека, кроме экспорта трека в виде самих точек.
Миха