Bagaimana cara membuat basis data geografis log GPS?

13

Pada survei satwa liar udara kami, kami biasanya menghasilkan lusinan file GPX, dan biasanya mengonversinya sebagian besar menjadi shapefile untuk ditampilkan dalam aplikasi GIS. File GPX adalah cara luar biasa untuk menyimpan semua (atau hampir semua) data GPS Anda di satu tempat - file xml yang menyimpan informasi tracklog, waypoint & rute dalam satu format yang nyaman. Mereka menyimpan banyak trek, bahkan trek lama yang disimpan dari Garmin.

Saya ingin menyimpan semua data trek ini dalam database spasial, secara paralel dengan tabel lain yang memiliki data pengamatan titik dari survei yang sama.

ogr2ogr akan membiarkan saya mengonversi trek ke basis data spasial:

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'

Namun, ini mengimpor setiap trek yang disimpan sebagai garis - kehilangan informasi waktu / lokasi untuk setiap titik trek!

Adakah yang tahu cara pintar membangun database tracklog yang akan menyimpan informasi itu?

EDIT :

Tracklog bukan hanya garis - itu adalah kumpulan titik sekuensial, masing-masing dengan atribut elevasi dan waktu. Setiap titik milik segmen trek, yang pada gilirannya milik trek yang diberikan, dan poin dalam setiap segmen trek diambil tanpa gangguan dan dapat diasumsikan terkait. Sebagai contoh:

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

Jadi, untuk menyimpan tracklog Anda perlu menyimpan kumpulan poin ini dengan data terkait.

Salah satu solusinya mungkin memuat trek ini sebagai titik, dengan kolom tambahan untuk nama trek, segmen, ketinggian dan waktu; Saya tidak berpikir ogr akan mengkonversi trek sebagai poin.

Larutan

Terima kasih kepada @scruss yang menunjukkan gpx2spatialite , yang saya instal (OS X 10.9) sudo easy_install gpx2spatialite. Seperangkat alat ini dirancang untuk proyek 'drawinglife' (dan dengan demikian memiliki beberapa informasi 'kota' yang mungkin tidak perlu bagi kebanyakan dari kita); halaman utama gpx2spatialite tidak menjelaskan banyak hal, tetapi wiki drawinglife lebih baik. Namun, banyak fitur tidak berdokumen - seperti menghapus duplikat!

Buat basis data spasial untuk file GPX yang akan menampung segmen trek, trek, titik trek, dan titik arah. Ini juga memiliki pengaturan 'pengguna' (yang tampaknya aneh, karena sqlite bukan sistem akses pengguna, tetapi dimaksudkan untuk drawinglife) yang dirancang untuk melabeli berbagai trek:

gpx2spatialite create_db MyGPXArchive.db

Muat seluruh folder file GPX, termasuk semua subfolder, periksa dan hapus duplikat di sepanjang jalan:

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

Pilihan:

  • -s= jangan periksa apakah trackpoint ada di database kota (mempercepatnya BANYAK)
  • -d MyGPXArchive.db = database yang akan digunakan;
  • -u SL25 = tambahkan pengguna SL25 (hanya label yang saya gunakan untuk kumpulan lagu yang dikumpulkan);
  • Selous2013 = folder (dengan subfolder) yang memiliki trek yang saya minati.

Bug:

  • Jika Anda telah menyimpan trek pada Garmin lama yang membuang info cap waktu, itu akan merusak impor (menghapus trek yang disimpan menggunakan utilitas seperti GPSU). Jika Anda memiliki gpsbabel , filter dulu file tersebut dengan sesuatu seperti:

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

Simbamangu
sumber
Kami menggunakan FME safe.com/fme/fme-technology/fme-desktop/features dan mempertahankan semua atribusi yang Anda inginkan ke dalam Database Oracle
Mapperz
1
@Mapperz - apakah FME memiliki metode khusus untuk menyimpan file GPX? Saya benar-benar mencari solusi FOSS.
Simbamangu

Jawaban:

6

ptrv / gpx2spatialite melakukan ini dengan sangat baik, menghemat cap waktu untuk semua titik dan menurunkan data kecepatan dan panjang untuk trek. Itu juga tidak akan mengimpor trek duplikat, sehingga Anda dapat memberi tumpukan besar untuk file GPX dan itu akan menghapusnya dengan tepat.

Perbarui : contoh penggunaan, seperti yang diminta:

Inisialisasi basis data baru:

gpx2spatialite_create_db db.sqlite

Tambahkan satu file gpx:

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

(Jika pengguna nama pengguna tidak ada dalam database, akan meminta jika Anda ingin membuatnya. Database ini dibangun dengan trek / titik jalan / rute yang ditetapkan untuk satu atau lebih pengguna.)

Tambahkan semua file gpx di folder / :

gpx2spatialite -d db.sqlite -u user folder/

Penggunaan: itu adalah basis data spasial, dengan meja Tracklines memegang trek sebagai polylines, titik trek yang berisi poin individu (dengan waktu, ketinggian, dll), dan titik arah untuk setiap titik arah yang ditetapkan. Ada juga banyak indeks, beberapa definisi kota dunia dan mungkin juga tertanam informasi gaya SLD yang belum saya jelajahi. Sebagai contoh sepele, berikut adalah peta bagaimana kampung halaman saya (Toronto) didefinisikan melalui ~ 7 tahun track log:

Log GPS Toronto

Dengan menggunakan jalur dengan transparansi 75%, rute yang paling sering dilalui menjadi lebih gelap.

scruss
sumber
Aha, tidak menyadari bahwa easy_install gpx2spatialitesebenarnya akan menginstalnya sebagai skrip yang dapat diakses dari baris perintah! The userpilihan juga membingungkan, mereka tidak menjelaskannya pada halaman utama, dan spatialite adalah sistem-non-akses terbatas.
Simbamangu
The userpilihan masuk akal untuk proyek Drawinglife, karena memungkinkan beberapa peserta untuk menambahkan trek mereka ke database yang sama. Terima kasih atas petunjuk tentang mengecualikan penandaan Kota, dan untuk menemukan alasan crash. Jika Anda memiliki file GPX tanpa stempel waktu, Anda dapat mensintesis data waktu menggunakan opsi faketime GPSBabel .
scruss
1
FYI, sintaksis gpx2spatialite telah berubah. Perintah impor umum sekaranggpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss
3

Untuk lebih jauh komentar Anda - "apakah FME memiliki metode khusus untuk menyimpan file GPX?"

Ya, Anda memiliki kontrol penuh pada rute, titik arah, trek, dan metadata masukkan deskripsi gambar di sini

FME adalah alat yang sangat layak dan kuat untuk memanipulasi data gis dan data non-spasial secara bersamaan.

lihat untuk lebih jelasnya http://evangelism.safe.com/fmeevangelist26/

Mapperz
sumber
2

Ada beberapa ide di sini untuk membuat program Anda sendiri untuk mengekstrak data gpx dengan python atau perl. Dari sini tidak terlalu sulit untuk menempatkan data ke dalam basis data spasial. Anda perlu memikirkan skema yang cocok untuk menyimpan dalam spasial - atribut apa yang ingin Anda pertahankan?).

Stev_k
sumber
1

Jika Anda ingin pergi ke rute OGR, pendekatan terbaik adalah mengekspor ke Shapefile terlebih dahulu, yang akan mengekspor beberapa shapefile yang mewakili perbedaan titik jalan / jalur / jalur / jalur dan metadata terkait, dan kemudian menggabungkan setiap set file ke dalam SQLite utama Anda basis data.

tmcw
sumber
-1

Coba tambahkan

-lco GPS_USE_EXTENSIONS=YES

ke perintah ogr2ogr Anda

Micha
sumber
Saya mencoba ini pada tabel baru - tanpa efek pada bidang atau data yang dihasilkan. Apa yang Anda harapkan untuk dilakukan?
Simbamangu
Saya mengharapkan untuk mendapatkan atribut yang diperluas. Membaca ulang pertanyaan Anda, saya kira tidak ada cara untuk mendapatkan masing-masing jalur waktu poin selain mengekspor trek sebagai titik sendiri.
Micha