Zde naleznete popis struktury databáze programu GeoGet.
Pro opravdu individuální výběry dat z databáze GeoGetu lze pomocí pluginů GeoJarry, SmartFilter nebo Combine použít SQL dotazy.
A pro pohledy do databáze lze použít jakýkoliv program pro SQLite databáze. Mezi poravdu jednoduché patří Sqlite3Explorer a SQLite Database Browser. Pro sofistikovanější práci lze použít např. SQLite Expert Personal. Pokud používáte prohlížeč Mozilla Firefox, tak nelze než doporučit doplněk SQLite Manager.
Diskuze o se nachází na stránkách Geocaching.cz.
| Tabulka | Sloupec | Popis dat |
|---|---|---|
coord_index | |
|
coord_index_node | |
|
coord_index_parent | |
|
coord_index_rowid | |
|
geocache | key |
|
id | ID bodu (GCxxxx) | |
guid | GUID bodu | |
x | zem. délka | |
y | zem. šířka | |
name | název bodu | |
author | autor bodu | |
cachetype | typ bodu | |
difficulty | obtížnost | |
terrain | terén | |
inventory | |
|
cachestatus | stav bodu (0 = ok, 1 = disabled, 2 = archived, 3 = unknown) | |
userstatus | |
|
dthidden | datum ukrytí bodu | |
dtlast | datum posledního nálezu bodu | |
dtupdate | datum poslední aktualizace bodu | |
comment | poznámka | |
dtfoundtime | čas nalezení bodu | |
dtfound | datum nalezení bodu | |
country | země | |
state | území | |
gs_stateid | groundspeak ID státu | |
gs_ownerid | grounspeak ID autora | |
geolist | key |
|
id | ID bodu (GCxxxx) | |
shortdesc | krátký popis (komprimován zlib) | |
shortdescflag | |
|
longdesc | dlouhý popis (komprimován zlib) | |
longdescflag | |
|
hint | nápověda | |
geolog | key |
|
id | ID bodu (GCxxxx) | |
dt | datum logu | |
type | typ logu | |
finder | nálezce | |
logtext | text logu (komprimován zlib) | |
gs_logid | groundspeak ID logu | |
gs_finderid | groundspeak ID nálezce | |
geotag | key |
|
id | ID bodu (GCxxxx) | |
flag | |
|
ptrkat | kategorie (váže se k tabulce geotagcategory) |
|
ptrvalue | hodnota (váže se k tabulce geotagvalue) |
|
geotagcategory | key |
|
value | název kategorie tagů | |
flag | |
|
geotagvalue | key |
|
value | hodnota tagu | |
flag | |
|
waypoint | key |
|
id | ID waypointu | |
guid | GUID waypointu | |
x | zem. šířka waypointu | |
y | zem. délka waypointu | |
name | název waypointu | |
prefixid | prefix waypointu | |
lookup | |
|
wpttype | typ waypointu | |
cmt | popis waypointu z gc.com | |
comment | poznámka k waypointu | |
flag | 0 - ručně zadaný, 1 - importovaný, 2 - z importovaných korigovaných souřadnic1) |
|
dtupdate | datum aktualizace waypointu | |
Databáze obsahuje v některých sloupcích data, která jsou komprimovaná pomocí |knihovny zlib, aby se uštetřilo nějaké to místo na disku.
Protože knihovna je integrovaná do GeoGetu, je její použití ve skriptech snadné. Cesty jsou 2:
SELECT unzlib(logtext) FROM geolog WHERE…”
Problém může nastat při použití jiné aplikace než je GeoGet. V tom případě je nutné si nějak poradit sám. Ideální asi je vytvořit si vlastní UDF funkci a tu zaregistrovat (UDF funkce jsou v SQLite asociovány s aplikací, ne s databází). Jinou možností je načíst komprimované hodnoty jako blobtext a pak si je vlastní funkcí v programu rozbalit.
Zde je uvedeno několik zajímavých možností využití SQL
Tento dotaz vypíše keše uživatele romantic29 s tagem Brdy s hodnotou ANO.
SELECT id FROM geocache JOIN geotag ON geocache.id = geotag.id JOIN geotagcategory ON geotag.ptrkat = geotagcategory.KEY JOIN geotagvalue ON geotag.ptrvalue = geotagvalue.KEY WHERE geocache.author = 'romantic29' AND geotagcategory.value = 'Brdy' AND geotagvalue.value = 'ANO'
Tento dotaz používá plugin AutoStat.
SELECT id FROM geocache WHERE dtfound > 0 AND id NOT IN ( SELECT id FROM geolog WHERE finder LIKE '%GEOGET_OWNER%' AND type IN ('Found it','Webcam Photo Taken','Attended') );
Tento dotaz je součástí pluginu geojarry.
Proměnná %GEOGET_OWNER% funguje pouze při použití přes GeoJarry dotaz do databáze GeoGetu, není obecnou proměnnou pro práci s databází.
SELECT id FROM geolog WHERE finder = '%GEOGET_OWNER%' AND type IN ('Found it','Webcam Photo Taken','Attended') GROUP BY id HAVING count(type) > 1;
Podobná metoda je součástí maker POI Garmin a GPX Garmin.
Výstup vypadá např. takto:
3x Didn't find it, 1x Temporarily Disable Listing, 2x Write Note
Samotná metoda včetně následného zpracování dotazu:
function LogStat(geo: TGeo) : String; var tab :TSQliteTable; begin Result := ''; try Geoget_DB.AddParamText(':id',geo.ID); tab := Geoget_DB.GetTable('SELECT type, count(key) AS cnt FROM geolog WHERE id = :id AND dt >= (SELECT max(dt) FROM geolog WHERE id = :id AND type IN (''Found it'',''Webcam Photo Taken'',''Attended'')) AND type NOT IN (''Found it'',''Webcam Photo Taken'',''Attended'') GROUP BY type ORDER BY cnt DESC;', false); try while not tab.EOF do begin Result := Result + tab.FieldAsString(tab.FieldIndex['cnt']) + 'x ' + tab.FieldAsString(tab.FieldIndex['type']); if tab.next then Result := Result + ', '; end; finally tab.free; end; finally end; end;
SELECT DISTINCT cachesize FROM geocache
Vypíše seznam keší, které obsahují vice než jeden finálový waypoint s nenulovými souřadnicemi.
SELECT id FROM waypoint WHERE wpttype='Final Location' AND (x<>0 OR y<>0) GROUP BY id HAVING count(*) > 1