GPS günlüklerinin coğrafi veritabanı nasıl oluşturulur?


13

Hava vahşi yaşam anketlerimizde genellikle düzinelerce GPX dosyası üretiyoruz ve genellikle bir CBS uygulamasında görüntülemek için bunların çoğunu şekil dosyalarına dönüştürüyoruz. GPX dosyaları, GPS verilerinizin tümünü (veya neredeyse tümünü) tek bir yerde tutmanın müthiş bir yoludur - tracklog, yol noktası ve rota bilgilerini tek bir formatta depolayan xml dosyalarıdır. Birden fazla parçayı, hatta bir Garmin'in eski kayıtlı parçalarını bile saklıyorlar.

Tüm bu parça verilerini, aynı anketten nokta gözlem verilerine sahip diğer tablolarla paralel olarak, bir spatialite veritabanında saklamak istiyorum.

ogr2ogr, parçayı bir uzamsal veritabanına dönüştürmeme izin verecek:

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'

Ancak, bu kaydedilen her parçayı bir satır olarak içe aktarır - her bir iz noktası için zaman / konum bilgilerini kaybeder!

Herkes bu bilgileri koruyacak bir tracklog veritabanı oluşturmak için akıllıca yollar biliyor musunuz?

DÜZENLE :

Güzergah günlükleri sadece bir çizgi değildir - her biri yükseklik ve zaman özelliğine sahip sıralı noktaların koleksiyonlarıdır. Her nokta, belirli bir parçaya ait olan bir parça segmentine aittir ve her parça segmentindeki noktalar kesintisiz olarak alınmıştır ve bağlantılı olduğu varsayılabilir. Örneğin:

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

Bu nedenle, bir tracklog'u kaydetmek için bu puan topluluğunu ilişkili verilerle kaydetmeniz gerekir.

Çözümlerden biri, bu parçaları parça adı olarak yüklemek olabilir; parça adı, segment, yükseklik ve zaman için ek sütunlar; Yine de ogr'un parçaları puan olarak dönüştüreceğini sanmıyorum.

Çözüm

Yüklediğim (OS X 10.9) gpx2spatialite'i işaret eden @scruss sayesinde sudo easy_install gpx2spatialite. Bu araç seti 'çizim hayatı' projesi için tasarlanmıştır (ve bu nedenle çoğumuz için muhtemelen gereksiz olan bazı 'şehir' bilgilerine sahiptir); ana gpx2spatialite sayfası çok fazla açıklamıyor, ancak çizim hayatı wiki daha iyi. Yine de, belgelenmemiş birçok özellik - kopyaları kaldırmak gibi!

Parkur parçalarını, parkurları, parkur noktalarını ve ara noktaları tutan GPX dosyaları için bir uzamsal veritabanı oluşturun. Ayrıca, çeşitli parçaları etiketlemek için tasarlanmış (kullanıcılar garip görünüyor, çünkü sqlite bir kullanıcı erişim sistemi değil, çizim hayatı için tasarlandı) kuruldu:

gpx2spatialite create_db MyGPXArchive.db

Tüm alt klasörler de dahil olmak üzere GPX dosyalarının bir klasörünü yükleyin, yinelenenleri yol boyunca kontrol edin ve kaldırın:

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

Seçenekler:

  • -s= izleme noktalarının şehir veri tabanında olup olmadığını kontrol etme (LOT'u hızlandırır)
  • -d MyGPXArchive.db = kullanılacak veritabanı;
  • -u SL25 = SL25 kullanıcısını ekleyin (sadece toplanan parçalar için kullandığım bir etiket);
  • Selous2013 = ilgilendiğim parçaları içeren klasör (alt klasörlerle birlikte).

Hatalar:

  • Zaman damgası bilgisini atayan daha eski bir Garmin'e parkur kaydettiyseniz, içe aktarma işlemini kilitler (GPSU gibi bir yardımcı program kullanarak kaydedilmiş parkurları kaldırın). Eğer gpsbabel'ınız varsa , önce dosyayı aşağıdaki gibi bir şeyle filtreleyin:

    gpsbabel -w -r -t -i gpx -f [INPUT.gpx] -x izleme, başlat = 20000101 -o gpx -F [OUTPUT.gpx]


FME safe.com/fme/fme-technology/fme-desktop/features kullanıyoruz ve bir Oracle Veri Tabanı içine istediğiniz tüm ilişkilendirmeyi koruyor
Mapperz

1
@Mapperz - FME'nin GPX dosyalarını kaydetmek için belirli bir yöntemi var mı? Gerçekten bir FOSS çözümü peşindeyim.
Simbamangu

Yanıtlar:


6

ptrv / gpx2spatialite bunu tüm noktalar için zaman damgalarından tasarruf ederek ve parçalar için hız ve uzunluk verileri elde ederek kayda değer ölçüde iyi yapar. Aynı zamanda yinelenen parçaları içe aktarmaz, böylece GPX dosyaları için büyük bir yığın besleyebilir ve bunları uygun bir şekilde susturursunuz.

Güncelleme : istendiği gibi kullanım örnekleri:

Yeni veritabanını başlat:

gpx2spatialite_create_db db.sqlite

Tek bir gpx dosyası ekleyin:

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

(Kullanıcı adı kullanıcısı veritabanında yoksa, oluşturmak isteyip istemediğinizi sorgulayacaktır. Veritabanı, bir veya daha fazla kullanıcıya atanmış izler / ara noktalar / rotalar ile oluşturulmuştur.)

Tüm gpx dosyalarını / dizinine ekleyin :

gpx2spatialite -d db.sqlite -u user folder/

Kullanım: Bu tablo ile, uzaysal bir veritabanıdır tracklines devamlı çizgiler olarak parça tutma İz (zaman, yükseklik, vb), ayrı ayrı noktalar ihtiva eden ve referans noktalarının tanımlanmış herhangi bir yol noktaları için. Ayrıca çok sayıda endeks, bazı dünya kenti tanımları ve muhtemelen henüz keşfetmediğim gömülü SLD stil bilgileri de var. Önemsiz bir örnek olarak, memleketimin (Toronto) ~ 7 yıllık güzergah kayıtları aracılığıyla nasıl tanımlandığına dair bir harita:

Toronto GPS günlükleri

% 75 şeffaflıkta satırlar kullanarak, en sık seyahat edilen rotalar koyulaşır.


Aha, komut satırından erişilebilen easy_install gpx2spatialitebir komut dosyası olarak yükleyeceğini anlamamıştı ! Bu userseçenek de kafa karıştırıcıydı, ana sayfada açıklamıyorlar ve spatialite erişim kısıtlaması olmayan bir sistem.
Simbamangu

Bu userseçenek, birden fazla katılımcının izlerini aynı veritabanına eklemesine izin verdiği için Drawinglife projesi için mantıklıdır. Şehir etiketlemesini hariç tutma ve çökmelerin nedenlerini bulma konusunda ipuçları için teşekkürler. Zaman damgası olmayan GPX dosyalarınız varsa, GPSBabel'ın faketime seçeneğini kullanarak zaman verilerini sentezleyebilirsiniz .
scruss

1
Bilginize, gpx2spatialite sözdizimi değişti. Tipik içe aktarma komutu şimdigpx2spatialite import -u user -s -d db.spatialite file1.gpx …
scruss

3

Daha fazla yorum yapmak için - "FME'nin GPX dosyalarını kaydetmek için belirli bir yöntemi var mı?"

Evet, rotalar, ara noktalar, parkurlar ve meta veriler üzerinde tam kontrole sahipsiniz resim açıklamasını buraya girin

FME, gis verilerini ve uzamsal olmayan verileri birlikte manipüle etmek için çok değerli ve güçlü bir araçtır.

daha fazla ayrıntı için bkz. http://evangelism.safe.com/fmeevangelist26/


2

Burada python veya perl'de gpx verilerini ayıklamak için kendi programınızı oluşturmak için bazı fikirler var . Buradan, verileri bir uzamsal veritabanına koymak çok fazla bir şey değil. Uzamsal alanda depolamak için uygun bir şema düşünmelisiniz - hangi özellikleri tutmak istiyorsunuz?).


1

OGR yoluna gitmek istiyorsanız, en iyi yaklaşım önce yol noktası / iz noktası / yol / iz ayrımını ve ilgili meta verileri temsil eden birden fazla şekil dosyasını dışa aktaracak ve daha sonra her dosya kümesini ana SQLite'nizle birleştirecek olan Shapefile'a dışa aktarmaktır. veri tabanı.


-1

Eklemeyi deneyin

-lco GPS_USE_EXTENSIONS=YES

ogr2ogr komutuna


Yeni bir tablo üzerinde denedim - sonuç alanları veya veriler üzerinde hiçbir etkisi olmadan. Ne yapmasını bekliyorsun?
Simbamangu

Genişletilmiş özellikleri almayı bekliyordum. Sorunuzu yeniden okurken, parçayı kendileri puan olarak dışa aktarmaktan başka her bir iz noktası süresinin elde edileceğini düşünmüyorum.
Micha
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.