Databáze

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.

:!: Upozornění: v nedaleké budoucnosti jsou plánovány velké změny ve struktuře databáze.

Diskuze

Diskuze o se nachází na stránkách Geocaching.cz.

Struktura databáze GeoGetu

Tabulka Sloupec Popis dat
coord_index FIXME
coord_index_node FIXME
coord_index_parent FIXME
coord_index_rowid FIXME
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 FIXME
cachestatus stav bodu (0 = ok, 1 = disabled, 2 = archived, 3 = unknown)
userstatus FIXME
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 FIXME
longdesc dlouhý popis (komprimován zlib)
longdescflag FIXME
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 FIXME
ptrkat kategorie (váže se k tabulce geotagcategory)
ptrvalue hodnota (váže se k tabulce geotagvalue)
geotagcategory key
value název kategorie tagů
flag FIXME
geotagvalue key
value hodnota tagu
flag FIXME
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 FIXME
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

Přístup ke komprimovaýcm sloupcům

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:

  1. existují příslušné funkce v API (zCompress() a zDecompress())
  2. volání knihovny lze využít přímo v SQL dotazu, např. ”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.

Příklady SQL dotazů

Zde je uvedeno několik zajímavých možností využití SQL

Vyhledání keší určitého autora s určitým tagem

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'

Seznam nalezených keší bez Found logu

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')
);

Seznam keší, na kterých má uživatel GeoGetu vícenásobný nález

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;

Statistika logů na keši po posledním Found it logu

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;

Seznam velikostí keší v databázi

SELECT DISTINCT cachesize FROM geocache

Výpis keší s více finálovými waypointy

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
1) 2.6.5
user/databaze.txt · Last modified: 2012/05/02 12:13 by petulinka1
CC Attribution-Noncommercial 3.0 Unported
www.chimeric.de Driven by DokuWiki Recent changes RSS feed