Jak zbudować geograficzną bazę danych dzienników GPS?


13

W naszych lotniczych badaniach dzikiej przyrody zwykle generujemy dziesiątki plików GPX i zwykle konwertujemy większość z nich na pliki kształtów do wyświetlania w aplikacji GIS. Pliki GPX to świetny sposób na przechowywanie wszystkich (lub prawie wszystkich) danych GPS w jednym miejscu - są to pliki xml, które przechowują informacje o śladzie, punkcie i trasie w jednym wygodnym formacie. Przechowują wiele śladów, nawet stare zapisane ślady z Garmin.

Chciałbym przechowywać wszystkie te dane śledzenia w przestrzennej bazie danych, równolegle z innymi tabelami, które zawierają dane obserwacyjne z tej samej ankiety.

ogr2ogr pozwoli mi przekonwertować ścieżkę na przestrzenną bazę danych:

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'

Jednak to importuje każdy zapisany ślad jako linię - tracąc informacje o czasie / lokalizacji dla każdego punktu śladu!

Czy ktoś zna jakieś sprytne sposoby budowy bazy danych rejestrów śledzenia, która zachowa te informacje?

EDYCJA :

Śledzenia nie są tylko linią - są kolekcjami kolejnych punktów, każdy z atrybutem wysokości i czasu. Każdy punkt należy do odcinka toru, który z kolei należy do danego toru, a punkty w każdym segmencie toru zostały zebrane bez przerwy i można założyć, że są połączone. Na przykład:

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

Dlatego, aby zapisać dziennik śledzenia, musisz zapisać ten zbiór punktów wraz z powiązanymi z nimi danymi.

Jednym z rozwiązań może być załadowanie tych ścieżek jako punktów, z dodatkowymi kolumnami dla nazwy ścieżki, odcinka, wysokości i czasu; Nie sądzę jednak, by ogr przekształcił ścieżki w punkty.

Rozwiązanie

Dzięki @scruss, który wskazał gpx2spatialite , z którym zainstalowałem (OS X 10.9) sudo easy_install gpx2spatialite. Ten zestaw narzędzi jest przeznaczony do projektu „rysunek życia” (a zatem zawiera pewne informacje „miasta”, które prawdopodobnie nie są potrzebne dla większości z nas); główna strona gpx2spatialite nie wyjaśnia zbyt wiele, ale wiki drawinglife jest lepsza. Mimo to wiele nieudokumentowanych funkcji - takich jak usuwanie duplikatów!

Utwórz przestrzenną bazę danych dla plików GPX, która będzie zawierać segmenty ścieżek, ślady, punkty i punkty trasy. Ma również skonfigurowanych „użytkowników” (co wydaje się dziwne, ponieważ sqlite nie jest systemem dostępu użytkownika, ale był przeznaczony do rysowania życia) zaprojektowanych do oznaczania różnych ścieżek:

gpx2spatialite create_db MyGPXArchive.db

Załaduj cały folder plików GPX, w tym wszystkie podfoldery, sprawdzając i usuwając duplikaty po drodze:

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

Opcje:

  • -s= nie sprawdzaj, czy punkty trasy znajdują się w bazie danych miasta (znacznie przyspiesza)
  • -d MyGPXArchive.db = baza danych do użycia;
  • -u SL25 = dodaj użytkownika SL25 (tylko etykietę, której użyłem dla zbioru zebranych ścieżek);
  • Selous2013 = folder (z podfolderami) zawierający ścieżki, którymi jestem zainteresowany.

Błędy:

  • Jeśli zapisałeś ślady na starszym Garminie, który odrzuca informacje o znaczniku czasu, spowoduje to zawieszenie importu (usuń zapisane ślady za pomocą narzędzia takiego jak GPSU). Jeśli masz gpsbabel , najpierw przefiltruj plik za pomocą czegoś takiego:

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


Korzystamy z FME safe.com/fme/fme-technology/fme-desktop/features i utrzymuje wszystkie atrybucje, które chcesz w bazie danych Oracle
Mapperz

1
@Mapperz - czy FME ma określoną metodę zapisywania plików GPX? Naprawdę szukam rozwiązania FOSS.
Simbamangu

Odpowiedzi:


6

ptrv / gpx2spatialite robi to wyjątkowo dobrze, oszczędzając znaczniki czasu dla wszystkich punktów i uzyskując dane dotyczące prędkości i długości ścieżek. Nie zaimportuje również zduplikowanych ścieżek, więc możesz nakarmić go ogromnym stosem plików GPX i odpowiednio je zamrozić.

Aktualizacja : przykłady użycia, zgodnie z żądaniem:

Zainicjuj nową bazę danych:

gpx2spatialite_create_db db.sqlite

Dodaj pojedynczy plik GPX:

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

(Jeśli nazwa użytkownika użytkownik nie istnieje w bazie danych, zapyta, czy chcesz ją utworzyć. Baza danych jest zbudowana z tras / punktów / tras przypisanych do jednego lub większej liczby użytkowników.)

Dodaj wszystkie pliki GPX do folderu / :

gpx2spatialite -d db.sqlite -u user folder/

Zastosowanie: jest to przestrzenna baza danych, w której linie ścieżek tabeli zawierają ścieżki jako polilinie, punkty ścieżki zawierające poszczególne punkty (wraz z czasem, wysokością itp.) Oraz punkty trasy dla dowolnych zdefiniowanych punktów trasy. Istnieje również wiele wskaźników, niektóre definicje miast świata i być może także osadzone informacje o stylizacji SLD, których jeszcze nie zbadałem. Jako trywialny przykład, oto mapa tego, jak moje miasto rodzinne (Toronto) jest zdefiniowane przez ~ 7 lat dzienników śladów:

Dzienniki GPS w Toronto

Dzięki zastosowaniu linii o przezroczystości 75%, najczęściej podróżowane trasy stają się ciemniejsze.


Aha, nie zdawałem sobie sprawy, easy_install gpx2spatialiteże faktycznie zainstalowałby go jako skrypt dostępny z wiersza poleceń! userOpcja została również mylące, nie tłumaczyć go na stronie głównej, a spatialite to system non-access-ograniczone.
Simbamangu,

userOpcja ma sens dla projektu Drawinglife, gdyż pozwala wielu uczestników, aby dodać swoje utwory do tej samej bazy danych. Dziękujemy za podpowiedzi na temat wykluczania oznaczania miasta i znalezienia przyczyn awarii. Jeśli masz pliki GPX bez znaczników czasu, możesz zsyntetyzować dane czasu za pomocą opcji faketime GPSBabel .
scruss

1
FYI, składnia gpx2spatialite uległa zmianie. Typowe polecenie importu to terazgpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss

3

W dalszej części komentarza - „czy FME ma określoną metodę zapisywania plików GPX?”

Tak, masz pełną kontrolę nad trasami, punktami, śladami i metadanymi wprowadź opis zdjęcia tutaj

FME jest bardzo godnym i potężnym narzędziem do wspólnego przetwarzania danych GIS i danych nieprzestrzennych.

zobacz więcej szczegółów http://evangelism.safe.com/fmeevangelist26/


2

Istnieje kilka pomysłów tutaj do tworzenia własnego programu do danych gpx ekstrakt w python lub Perl. Odtąd umieszczanie danych w przestrzennej bazie danych nie jest zbyt dużym wysiłkiem. Musisz pomyśleć o odpowiednim schemacie do przechowywania w przestrzeni - jakie atrybuty chcesz zachować?).


1

Jeśli chcesz wybrać trasę OGR, najlepszym rozwiązaniem jest najpierw eksport do Shapefile, który wyeksportuje wiele plików shapefile reprezentujących rozróżnienie waypoint / trackpoint / way / track i powiązane metadane, a następnie scali każdy zestaw plików do głównego SQLite Baza danych.


-1

Spróbuj dodać

-lco GPS_USE_EXTENSIONS=YES

do komendy ogr2ogr


Próbowałem tego na nowej tabeli - bez wpływu na wynikowe pola lub dane. Czego oczekujesz?
Simbamangu

Spodziewałem się uzyskać rozszerzone atrybuty. Odpowiadając na twoje pytanie, nie sądzę, aby w każdym przypadku można było uzyskać inne czasy punktów poza eksportowaniem ścieżki jako samych punktów.
Micha
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.