Como criar um banco de dados geográfico de registros GPS?


13

Em nossas pesquisas aéreas sobre a vida selvagem, geralmente geramos dezenas de arquivos GPX e geralmente convertemos a maioria deles em arquivos shapefiles para exibição em um aplicativo GIS. Os arquivos GPX são uma excelente maneira de manter todos (ou quase todos) os seus dados de GPS em um só lugar - são arquivos xml que armazenam informações de trilhas, waypoints e rotas em um formato conveniente. Eles armazenam várias faixas, até mesmo faixas salvas antigas de um Garmin.

Eu gostaria de armazenar todos esses dados de rastreamento em um banco de dados espacial, em paralelo com outras tabelas que apontam dados observacionais da mesma pesquisa.

ogr2ogr me permitirá converter a trilha em um banco de dados espacial:

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'

No entanto, isso importa cada trilha salva como uma linha - perdendo as informações de hora / local para cada ponto de trilha!

Alguém conhece alguma maneira inteligente de construir um banco de dados de trilhas que preservará essas informações?

EDIT :

As trilhas não são apenas uma linha - são coleções de pontos seqüenciais, cada um com um atributo de elevação e tempo. Cada ponto pertence a um segmento de faixa, que por sua vez pertence a uma determinada faixa, e os pontos dentro de cada segmento de faixa foram obtidos sem interrupção e pode-se presumir que estejam vinculados. Por exemplo:

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

Portanto, para salvar uma trilha, você precisa salvar essa coleção de pontos com os dados associados.

Uma solução pode ser carregar essas trilhas como pontos, com colunas adicionais para nome, segmento, elevação e tempo da trilha; Eu não acho que o ogr irá converter as faixas como pontos, no entanto.

Solução

Obrigado a @scruss, que apontou o gpx2spatialite , com o qual eu instalei (OS X 10.9) sudo easy_install gpx2spatialite. Esse conjunto de ferramentas foi desenvolvido para o projeto 'drawinglife' (e, portanto, possui algumas informações sobre a 'cidade' que provavelmente são desnecessárias para a maioria de nós); a página principal gpx2spatialite não explica muito, mas o wiki do drawinglife é melhor. Ainda assim, muitos recursos não documentados - como remover duplicatas!

Crie um banco de dados espacial para arquivos GPX que conterão segmentos, trilhas, pontos de trilha e waypoints. Ele também possui 'usuários' configurados (o que parece estranho, já que o sqlite não é um sistema de acesso do usuário, mas foi criado para desenhar a vida) projetado para rotular as várias faixas:

gpx2spatialite create_db MyGPXArchive.db

Carregue uma pasta inteira de arquivos GPX, incluindo todas as subpastas, verificando e removendo duplicatas ao longo do caminho:

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

Opções:

  • -s= não verifique se os pontos de controle estão no banco de dados da cidade (acelera muito)
  • -d MyGPXArchive.db = banco de dados a ser usado;
  • -u SL25 = adicione o usuário SL25 (apenas uma etiqueta que usei para o conjunto de faixas coletadas);
  • Selous2013 = a pasta (com subpastas) que contém as faixas nas quais estou interessado.

Insetos:

  • Se você salvou faixas em um Garmin antigo que descarta informações de carimbo de data / hora, a importação será interrompida (remova essas faixas salvas usando um utilitário como GPSU). Se você possui gpsbabel , filtre o arquivo primeiro com algo como:

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


Usamos FME safe.com/fme/fme-technology/fme-desktop/features e mantém toda a atribuição que você quer em um banco de dados Oracle
Mapperz

1
@Mapperz - o FME possui um método específico para salvar arquivos GPX? Estou realmente atrás de uma solução FOSS.
Simbamangu

Respostas:


6

O ptrv / gpx2spatialite faz isso muito bem, economizando registros de data e hora para todos os pontos e derivando dados de velocidade e comprimento para trilhas. Ele também não importa faixas duplicadas, para que você possa alimentar uma pilha enorme de arquivos GPX e os reproduzirá adequadamente.

Atualização : exemplos de uso, conforme solicitado:

Inicialize o novo banco de dados:

gpx2spatialite_create_db db.sqlite

Adicione um único arquivo gpx:

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

(Se o nome de usuário usuário não existir no banco de dados, ele consultará se você deseja criá-lo. O banco de dados é construído com trilhas / waypoints / rotas atribuídos a um ou mais usuários.)

Adicione todos os arquivos gpx na pasta / :

gpx2spatialite -d db.sqlite -u user folder/

Uso: é uma base de dados espaciais, com mesa tracklines segurando as faixas como poligonais, Trackpoints contendo os pontos individuais (com o tempo, a altitude, etc.), e pontos de referência para quaisquer pontos definidos. Também existem inúmeros índices, algumas definições de cidades do mundo e, possivelmente, também informações de estilo de SLD incorporadas que ainda não explorei. Como um exemplo trivial, aqui está um mapa de como minha cidade natal (Toronto) é definida através de ~ 7 anos de registros de trilhas:

Toronto GPS logs

Usando linhas com 75% de transparência, as rotas mais frequentemente percorridas ficam mais escuras.


Aha, não tinha percebido que easy_install gpx2spatialiterealmente o instalaria como um script acessível a partir da linha de comando! A useropção também foi confusa, eles não explicam isso na página principal e o spatialite é um sistema sem acesso restrito.
Simbamangu

A useropção faz sentido para o projeto Drawinglife, pois permite que vários participantes adicionem suas faixas ao mesmo banco de dados. Obrigado pelas dicas sobre como excluir a marcação da cidade e por encontrar os motivos dos acidentes. Se você tiver arquivos GPX sem registro de data e hora, poderá sintetizar os dados de hora usando a opção de tempo de jogo do GPSBabel .
scruss

1
Para sua informação, a sintaxe gpx2spatialite foi alterada. Comando de importação típico agoragpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss

3

Para aprofundar seu comentário - "o FME tem um método específico para salvar arquivos GPX?"

Sim, você tem controle total sobre rotas, waypoints, trilhas e metadados insira a descrição da imagem aqui

O FME é uma ferramenta muito valiosa e poderosa para manipular dados de GIS e dados não espaciais juntos.

veja para mais detalhes http://evangelism.safe.com/fmeevangelist26/


2

Existem algumas idéias aqui para criar seu próprio programa para extrair dados gpx em python ou perl. A partir daqui, não é muito difícil colocar os dados em um banco de dados espacial. Você precisará pensar em um esquema adequado para armazenar no espaço espacial - quais atributos você deseja manter?).


1

Se você deseja seguir a rota do OGR, a melhor abordagem é exportar primeiro para o Shapefile, que exportará vários shapefiles que representam a distinção entre waypoint / trackpoint / way / track e os metadados associados e, em seguida, mesclará cada conjunto de arquivos no SQLite principal base de dados.


-1

Tente adicionar

-lco GPS_USE_EXTENSIONS=YES

ao seu comando ogr2ogr


Eu tentei isso em uma nova tabela - sem afetar os campos ou dados resultantes. O que você espera que ele faça?
Simbamangu 1/09/12

Eu esperava obter os atributos estendidos. Relendo sua pergunta, acho que não há maneira de obter cada ponto de trilha individual, além de exportar a trilha como pontos.
Micha
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.