Bir gps izi için yükseklik profili nasıl alınır?


15

GPS ile kaydedilmiş bir parkur için makul derecede doğru bir yükseklik profili almak istiyorum.

Bunu yapmanın en kolay yolu hakkında herhangi bir ipucu var mı? Şimdiye kadar düşündüğüm iki teknik:

  • Google Yükseklik API'sını kullanma

    Bu API'nın kullanımı nispeten kolaydır, ancak kullanım kısıtlamaları nedeniyle önemsiz olmayan birkaç adım gerektirir: istek başına döndürülen maksimum 512 örnek ve yoldaki nokta sayısı da (URL uzunluğuna göre) sınırlıdır.

    Bir gpsbabel sadeleştirme filtresi parçayı uygun sayıda noktaya indirgemek için uydurulabilirim (yükseklik verilerinin çözünürlüğü nedeniyle 100 m'den daha yakın bir nokta yok), ancak daha sonra sorun nasıl eşleştirileceğidir uzunluklar farklı olacağından, bu basitleştirilmiş iz orijinal yola geri döner.

    Veya, otomasyon için uygun değilse, en iyi yaklaşım kullanıcının haritadaki enine noktaları elle seçmesine izin vermek olabilir.

  • Shuttle Radar Topoğrafya Misyonu (SRTM) verilerini indirme ve sorguyu yerel olarak yapma.

    Bu hiçbir deneyimim olmayan bir şey, bu yüzden bu ne kadar uygulanabilir olduğunu herhangi bir öneri bekliyoruz. Veri seti ne kadar büyük? Hangi CBS yazılımı gereklidir ve uygun bir şekilde yazılabilir mi? Acıya benzeyen bir örnekleme ve enterpolasyon algoritması yazmamayı tercih ederim . Böyle bir yaklaşımın olası performansı nedir? (Oldukça hızlı olmasını ve bellek sınırlı bir VPS web sunucusunda çalışmasını istiyorum ...)


Http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp adresinden veri indirerek @ MerseyViking'in cevabını incelemek için bazı ayrıntılar :

Her biri bir 72.1mb 16bit TIF dosyasına (6001x6001 piksel) açılan 20mb zip dosyası olan 72 x 24 kutucuk vardır.

Bu ~ 120 gb, saklayabildiğimden daha fazla. Sıkıştırılmış bırakılması ve okyanusları görmezden gelmesi, belki de biraz fazla büyük olan 10 gb'a düşürecektir. İsteğe bağlı verilerin yüklenmesi, gerekli depolama alanını önemli ölçüde azaltacaktır, ancak kaynak site yavaştır (yalnızca 10 kb / s alıyordum) bunu oldukça pratik hale getiriyor.


Yani aslında dünya çapında bir kapsama mı ihtiyacınız var?
underdark

Hayır, okyanuslara ihtiyacım yok ve SRTM (veya benzeri) veri kümelerinin dışındaki alanları hariç tutmaktan memnunum. Kapsanması gerekmeyen büyük Afrika, Çin ve Güney Amerika parçaları olacak, ancak önceden ne olduklarını bilmiyorum, bu yüzden talep üzerine veri almak yeterince hızlı değilse, daha iyi bunların tümünü yerel olarak yapın veya tüm sorguları üçüncü bir tarafa (ör. Google) dış kaynaklardan sağlayın.
Tom

Bu parkurlar ne kadar sürüyor? İz noktaları ve yükseklik için ne tür bir çözüme ihtiyacınız var?
Simbamangu

Parkurlar çoğunlukla koşu ve bisiklete biniyor, yani 5km ile 100km arasında. Tipik degradeler% 5-10'dan daha azdır, bu yüzden SRTM veri kümesinden çok daha az çözünürlüğe sahip herhangi bir şeyin çok ilginç olmayacağını düşünüyorum ... Yükseklik profilini görüntülemenin yanı sıra, kazanılan / kaybedilen yüksekliği de hesaplamak istiyorum, maks / min rakım vs.
Tom

Yanıtlar:


9

Yerel bir çözüm için GRASS bunu yapmak için komut dosyası olarak yazılabilir:

# extract raster values at our points
# use cubic convolution for interpolation between DEM locations
v.drape in=my_pts out=pts_srtm_elev type=point rast=srtm_dem method=cubic

Kullanım durumlarımdan biri için bunun genişletilmiş bir sürümünü çalıştırdım ve v.drape'nin performansı hiç sorun değildi.



5

Buna genel bir çözüm olarak ihtiyacınız var gibi görünüyor, yani işlemek istediğiniz herhangi bir parça için dünyanın tüm yükseklik verilerinin sizin elinizde olması, dolayısıyla tüm CGIAR verilerini yerel olarak depolamak istemiyorsanız; yukarıda belirtilen gpsvisualizer.com (@Llaves) en iyi seçeneğiniz olabilir.

Yüksek çözünürlüğe ihtiyacınız yoksa, GTOPO veri kümesi (1km ızgara) tüm gezegen için sadece ~ 300MB'dir ; Aksi takdirde, ASTER GDEM (30m) ve orijinal SRTM (90m) veri setleri mevcuttur, ancak belirttiğiniz gibi çok fazla veri vardır. (ASTER verilerinin boyutu, genellikle gerçek yükseklik verilerinden daha büyük olan paketlenmiş PDF'leri kaldırarak indirildikten sonra azaltılabilir - bunu yaptığımda Afrika veri kümesi% 40 azaltıldı!).

R'de yükseklik profilini bu veri kümelerinden herhangi birinden oldukça hızlı bir şekilde çıkarabilirsiniz - raster yüklemek zamanın çoğunu alabilir. Bu, GPX verilerini işlemek için küçük bir özel readGPX işlevi ve gpsbabel kullanır:

#Load elevation model and process track:
dem <- raster("E020N40.DEM")
track <- readGPXt("trackfile.gpx")
coordinates(track) <- ~Longitude+Latitude
proj4string(track) <- "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"
#Overlay (extract) the elevation data for the track points:
track$profile <- extract(dem, track)
track <- as.data.frame(track)

'track' artık lat / lon, diğer standart GPX verisi (hız, gps yüksekliği, vb.) olan bir GPS noktaları tablosu ve o noktadaki yüksekliği gösteren bir 'profil' sütunu.


4

SRTM verisi belirli bir alan için indirmek kolaydır, bu siteyi geçmişte kullanıyorum. Dosyalar çok büyük değil ve bunları coğrafi referanslı TIFF olarak alabilirsiniz. Tüm dünyayı indirmek biraz zaman alabilir, ancak birkaç karo oldukça geniş bir alanı kaplar. Sahip olabileceğiniz sorun, dünyanın çoğu için yaklaşık 90 metre olan yatay çözünürlükle ilgilidir ve dikey hata, sivri uçlar ve eksik veri alanları ile oldukça büyük olabilir.

ASTER GDEM veri kümesi ~ 30m yatay çözünürlükte daha yeni, daha yüksek çözünürlüklü bir ankettir, ancak kalite genellikle karşılık gelen SRTM verilerinden daha düşüktür.

Google yükseklik verilerinin hangi çözünürlükte olduğunu bilmiyorum, ancak SRTM tabanlıysa şaşırmam, bu yüzden Google API'yı kullanmak yerel bir işlemi kullanmaya benzer sonuçlar verebilir.

@Underdark'ın cevabından sonra, eğer bu basit bir web tabanlı sistem olacaksa, GRASS GIS muhtemelen yoludur. Ben bazı başarı ile basit görünmezlik grafikleri yapmak için r.profile kullandım ama hangi enterpolasyon yöntemi kullandığından emin değilim; muhtemelen en yakın komşu olabilir. Düzenleme : baktığımızda kaynak kodu , r.profilebazı merdiven basamağı eserlerin alabilirsiniz böylece, komşu en yakın kullanımını yapar.

Başka bir seçenek , biraz daha fazla iş olabilecek GDAL ve NumPy kullanarak bir Python betiği yazmak olabilir, ancak güzel bir özel çözüm üretebilir.


3

Öncelikle ne tür bir yatay / dikey hassasiyetten memnun kalacağınızı belirtmelisiniz.

Ama buna pratik bir perspektiften bakalım:

  • Her SRTM3 döşemesi 1200x1200 hücreye sahiptir , her hücre metre cinsinden yüksekliği temsil eden iki baytlık bir tamsayı değeridir. Bu yaklaşık 2.75 MB ham sıkıştırılmamış veri.
  • 14042 SRTM3 fayans vardır. Bu cca. 38 GB ham veri.
  • Gerçekten tüm dünyayı kapsamak mı gerekiyor? Sahara, Gobi Çölü veya Sibirya'nın ortasında bir GPS parkurunun yükseklik profilini görüntülemek için fazla bir ilgi olmadığını düşünüyorum, bu yüzden nakit sıkıntısı çekiyorsanız onu örtmeniz ekonomik olarak mümkün değildir (BTW: SRTM3 kapsamaz tüm dünya , böylece Grönland ve Antarktika gibi yerler hakkında endişelenmenize gerek yok;)).
  • Bazı akıllı sıkıştırma ve veri kodlama ile veri kümesi boyutunu önemli ölçüde azaltabilirsiniz. Yükseklik değerleri 0 ila 8848 arasındadır, bu nedenle kalan iki bit kullanılmaz. Daha da azaltmak için yükselmeleri delta sıkıştırması yoluyla da kodlayabilirsiniz. Ayrıca dikey hassasiyetten bazılarını bırakabilirsiniz (örneğin, 2m'ye kadar), bu da sizi her hücre için bir ekstra bit kaydeder.
  • Bunun ne tür GPS parkurları için kullanılacağına (yürüme, bisiklete binme, sürüş ...) bağlı olarak, verileri diskteki dosyalar veya veritabanı tablosundaki satırlar olarak daha küçük döşemelere (0.25x0.25 derece) depolamalısınız.
  • Döşemeler için bazı akıllı bellek önbellekleri kullanın, böylece sık kullanılanları yeniden yüklemenize gerek yoktur.
  • Hücrelerden yüksekliği hesaplamak tüm bu işin kolay kısmıdır.
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.