Temporal controller - @map_start_time temelli zamana bağlı semboloji

Oct 05 2020

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 biter 2018-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_time QGIS-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_oesec verilerimdeki 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

2 roberttuw Oct 16 2020 at 08:36

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_datetime Tarih ve Saat değerine geri dönüşür

  • ve 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.