Temporal controller - @map_start_time temelli zamana bağlı semboloji
Yakın zamanda Nyall Dawson'ın "QGIS 3.14 zaman işleme ve harita animasyonu demosu" videosunu inceliyordum. min 47'de ( nyall dawson / youtube video min 47 ) işler benim bakış açıma göre ilginçleşiyor .
"Zamansal denetleyici" özelliklerini test ederken, videoda gösterilen zamana bağlı semboloji yaklaşımını uygulamaya çalışırken bazı kafa karıştırıcı sonuçlar aldım - imag_01 video eğitiminden sonra sonuçlarımı gösteriyor:
- data: Adriatics'teki bir yat yarışından bir GPS izi. veri toplama aralığı yaklaşık 5 dakikadır
- nokta sembolleri (sarı): ön planda QGIS'in zamansal denetleyicisi tarafından kontrol edilir
- noktalar (gri): arka planda geçici değildir ve sadece genel bir bakış sağlamak için gösterilir geçici kontrolör ayarları şunlardır:
- adım genişliği: 15 dak (= 0,25 saat)
- görüntülenen aralık 0'da başlar
2018-10-15 15:45:00
ve biter2018-10-15 16:00:0("Çerçeve:" girişinin yanındaki değerlere bakın)
nokta boyutu geçici bir ifadeye bağlıdır - tıpkı videodaki gibi: hour(@map_start_time - time_s_oesec")(resim_02'deki ifadeye bakın) burada
@map_start_timeQGIS-dahili değişkenidir - bu, Frame başlangıç değerine eşit olmalıdır, yani benim örneğimde '2018-10-15 15:45:00'time_s_oesecverilerimdeki zamansal alana bir referanstır - yani, gps izleme zaman damgası verilerinin konumu (... zaman_s_oesec alanındaki değerler, işleri basitleştirmek için bu örnekte saniye olmadan saklanır)
Yana @map_start_timegösterilen zaman alt sınırı olan aralık içinde herhangi bir zaman damgası büyük ya da eşittir aralığı @map_start_time. (Nyall Dawson video göre) sarı noktalar Ölçekleme yukarıda belirtilen ekspresyon dayanmaktadır: hour(@map_start_time - time_s_oesec).
image_01 test etiketlerimi gösterir
- 1. satır: GPS noktası alanı değeri, ör. "
time_s_osec: 15.10.18 15:50:00" - 2. satır: harita başlangıç değişkeninin güncel değeri, örneğin "
@map_start_time: 15.10.18 15:45:00" - 3. satır: "
@map_start_t* - time_s*: 1,92" değerlerin ifade nedeniyle negatif olması@map_start_time - time_s_oesecve tanımlanan aralıkta> 1 ile> 2 arasında DEĞİLDİR - 4. satır: bu benim kontrol değerim -> bu değer, QGIS tarih-saat formatına göre saate dönüştürülen ve tam olarak gerçek değerine karşılık gelen sabit bir metindir :
hour(to_datetime('2018-10-15T15:00:00')- "time_s_osec")'2018-10-15T15:45:00'@map_start_time değişkeni
Açıkçası 4. satırdaki ifade geçerli sonuçlar döndürür - image_01'deki aşağıdaki örnekleri inceleyin / karşılaştırın:
Haritadaki GPS saatindeki nokta için 2018-10-15T15: 45: 00
to_datetime('2018-10-15T15:45:00')/time_s_oesec: 15:45 / sonuç = -0,00 ... beklendiği gibi
ancak@map_start_time - time_s_oesec2,0 değerini döndürür
haritadaki gps saati noktası için 2018-10-15T15: 29: 00
to_datetime('2018-10-15T15:45:00')/time_s_oesec: 15:29 / sonuç = 0,27
ancak@map_start_time - time_s_oesec2,27 değerini döndürür
Özet: 4. satırdaki ifadeler - '2018-10-15T15:45:00'"kare başlangıç zamanı" 15: 45'ten önce (GPS zaman damgası başlangıç zamanından daha az olduğu için) gps zaman damgaları için GPS zaman damgaları için pozitif değerleri ve 15'ten sonra negatif değerleri temel alan 4. satırdaki ifadeler : 45 tersi olduðuna göre.
İfade hour(to_datetime('2018-10-15T15:00:00') - "time_s_osec"böylece değerleri düzeltmekle sonuçlanırken, "geçici yöneticinin" @map_start_timebu bağlamda ele alma şekli garip / hatalıdır.
Ama ... Bir hata raporuna değer mi?
Gerekirse test verilerini sağlayabilirim
image_01:
image_02:
Yanıtlar
QGIS hata raporlama sistemiyle ilgili rduivenvoorde'dan bir ipucu aldım (bkz: GitHub QGIS hata raporlama sorunu 39393. aslında bu bir çözümdür ve neden çalıştığından hala emin değilim. ama uygulamam için çalışıyor.
GitHub'daki bilgilere göre QGIS saat dilimi farkında değil ve bu sorunun karmaşık olduğu söyleniyor. GitHub yanıtlarını takiben veri ve zaman değerleri şu anda genellikle UTC değerleri olarak yorumlanır.
ancak nokta sembollerinin boyutunun zamana bağlı bir değere göre ölçeklendirilmesi şu ifade ile uygulanabilir:
hour(@map_start_time - to_datetime(to_string( "time_s_osec" )+'Z') )
nerede
to_string ...alandan"time_s_osec"bir dizeye zaman değerini değiştirir+'Z'concats a Z ... burada Z "ZULU" zamanını gösterir (evet buna böyle denir); ZULU saat dilimi, UTC saat dilimiyle tam olarak eşleşiyor!to_datetimeTarih ve Saat değerine geri dönüşürve
hour(@map_start_time - to_datetime(to_string( "time_s_osec" )+'Z') )ondalık saat cinsinden zaman aralığının başlangıç zamanı arasındaki farkı (zaman kaydırıcılarının konumuna ve adım değerine bağlıdır) hesaplar
Doğru anladıysam, zaman verilerini orijinal alandan UTC zaman değerlerine (örneğin yeni bir Tarih ve Saat alanına) dönüştürmek ("manuel olarak") ve yukarıda belirtilen ifadeyi yeni ve doğru üzerine uygulamak mantıklıdır UTC değerleri.