Citace
V diskusi GeoGet a GgStat - pořadí nálezů se ukázalo, že je dobré mít v databázi GeoGetu časy nálezů. To se běžně řeší tak, že se napíšou na začátek logu a GeoGet je odtud při importu získá.EDIT:
Aktuální verze FoundTime i s popisem je na http://geoget.ararat...kript:foundtime
Co však mají dělat ti, co časy nelogovali, nelogují, nebo dokonce logovat nechtějí?
Motto:
Citace
MaFa napsal:
Jinak já občas časy doplňuju podle trasy zaznamenané v navigaci.
Pokusil jsem se zautomatizovat tuto ideu a napsal jsem skript FoundTime pro GeoGet, který metodou geotaggingu prohledá GPX soubory s prošlými stopami, najde v nich nejbližší bod ke keši ze dne nálezu a jeho čas doplní k datu nálezu do databáze GeoGetu.
Na první pohled jednoduché, ale záhy se objevilo několik problémů.
Předpokládám totiž, že kačer je zodpovědný a vždy používá kalendář a hodiny nastavené přesně dle platné legislativy v místě nálezu keše. Ovšem do tracklogů v GPX souborech se ukládá časový údaj zásadně v čase UTC. Pokud chceme z takového záznamu zjistit jaký byl v daném bodě místní čas, musíme zjistit:
1) jaká tam (tehdy) byla časová zóna
2) jaká ta zóna má (tehdy měla) vlastnosti, resp. posun oproti UTC (včetně případného letního času)
Jelikož časové zóny mají hranice často na hranicích států a definice vlastností časových zón se občas mění (i definice států a jejich hranic) nejde o nějaký triviální výpočet, resp. je k němu potřeba velké množství dat. Například až nejnovější GPS Garmin (Oregon) obsahují (aktuální) mapu časových zón a umí automaticky přepočítávat na místní čas.
Databáze časových zón http://www.twinsun.com/tz/tz-link.htm sice existuje ve formě knihovny pro Deplhi, ale pro nějaké o hodně modernější než je v GeoGetu.
Složitější úloha s mapou hranice časových zón by možná šla pojmout jako nějaké polygony, ale nejjednodušší je použít webové služby.
Nenašel jsem ovšem žádnou, která by pro zadané GPS souřadnice a (minulý) UTC čas vrátila (tehdejší) místní datum a čas.
Na http://www.geonames....s.html#timezone jsem našel službu pro přepočet souřadnic na časovou zónu (je hned vedle služby, kterou používá skript Elevation). Jen teoretický problém je, že pracuje s aktuálními hranicemi.
Na druhou operaci jsem nenašel webovou službu, ale jen stránku http://www.timezonec...cgi-bin/tzc.tzc, která převádí i starší časové údaje mezi velkou nabídkou časových zón.
Druhý problém je, zda lze spolehnout na segmentaci prošlých stop tak, jak je vytváří Garmin. Zda body z „jednoho dne“ jsou v jednoum souboru a jak je vlastně ten „jeden den“ definován. Zdá se, že nikoliv dle UTC času, ale podle místního času (dle nastavení GPS). To je pro naše účely vhodné. Ale nevím, zda na to lze spolehnout. Nezkoušel někdo poblíž půlnoci a poblíž hranice časového pásma (a speciálně mezinárodní datové hranice) přaskakovat tam a zpět (ze dne do dne) a pozorovat, jak se mu ukládají stopy do GPX?
Sestavil jsem skript, který:
* Zpracuje zadané keše (dle konfigurace všechny, nebo jen vybrané), a z toho jen:
- nalezené
- s datem nálezu
- bez času nálezu (lze vypnout)
* Pro tyto keše:
- najde dle dne nálezu příslušný GPX soubor
- v něm nejbližší bod ke keši resp. finálce
- pomocí geonames.org najde časovou zónu v daném bodě
- UTC čas bodu pomocí timezoneconverter.com převede do zjištěné zóny bodu
- výsledný čas doplní do času nálezu keše
- a poznamená i do tagu FoundTime (s přesností ne sekundu

Skript má několik konfiguračních parametrů, zejména adresář s GPX.
U mystery a multi je trochu nesmyslné hledat dle výchozích souřadnic (lze to vypnout), ale pokud jste výchozí bod navštívili, může to být použitelný výsledek. Proto také lze stanovit toleranci blízkosti.
Kromě použití jednodenních GPX souborů, lze zvolit prohledávání všech GPX souborů v adresáři.
Nedávno server geonames.org zavedl nové dostupnější služby pro registrované uživatele (na http://www.geonames.org/login). To lze také zadat do konfigurace.
Zatím jsem se nezabýval automatickou instalací a skript dávám zájemcům k otestování jako přílohu zip v tomto příspěvku. Připomínky jsou vítány.

Jsem si vědom, že zejména pokročilí uživatelé GeoGetu píší časy do logu, takže tento skript nepotřebují.
Proto jsem jako bonus sestavil skript VisitTime, který pro vybranou keš projde všechny GPX soubory v daném adresáři a vypíše všechny „návštěvy“ tohoto bodu (z každého souboru nanejvýš jednu v zadané toleranci).
Další bonusový skript DeleteFoundTime smaže čas nálezu pokud je stejný jako zaznam o editaci logu ve tvaru např. „This entry was edited by PiTeam on Tuesday, 28 September 2010 at 12:23:25.“, což GeoGet bez rozpaků importuje do času nálezu.
Součástí jsou 4 unity:
Jedna parsuje a prohledává GPX tracklogy.
Druhá provádí převody časů mezi zónami a zjišťuje zónu bodu.
Třetí umožňuje skriptu zapisovat do jeho konfigurace.
Čtvrtá pro stanovení ohraničujícího boxu pro zadané souřadnice a vzdálenost.