******************** Spojení s databázemi ******************** Databázové funkce v Tcl/Tk GUI nejsou podporovány (kromě standardního rozhraní k :command:`db.*` modulům. #. Výpis aktuálního spojení:: GRASS> db.connect -p driver:dbf database: $GISDBASE/$LOCATION\_NAME/$MAPSET/dbf/ schema:(null) group:(null) #. Spojení vektorové mapy s tabulkou :: GRASS> v.db.connect -p pudy Vector map is connected by: layer <1> table in database through driver with key #. Vypsání ve formátu zpracovávatelném ve skriptech:: GRASS> v.db.connect -g pudy 1 pudy cat /home/jachym/grassdata/spearfish60/jachym/dbf/ dbf #. Přepsání spojení [#f1]_ :: GRASS> v.db.connect -o map=pudy table=pudy_legenda database=pudy_legenda.db driver=sqlite key=id ======================== Atributy vektorových map ======================== ----------------------------- Získání atributů Interaktivně ----------------------------- .. note:: Pracujte na kopii mapy :file:`soils` jménem :file:`pudy` """""""""""""""" Textové rozhraní """""""""""""""" :: GRASS> d.what.vect pudy Vytvářím prostorový index ... 100 % Tlačítka Levé: copak je tu Pravé: ukončit .. image:: ../../images/d-what-vect.png """"""""""""""""" Grafické rozhraní """"""""""""""""" GUI používá na pozadí modul :command:`v.what` .. image:: ../../images/d-what-vect-gui.png ----------------------- Výběr hodnot z databáze ----------------------- Pro výběr hodnot z atributové tabulky slouží modul :command:`db.select`. Od GRASSu 6.3 je možné použít modul :command:`v.db.select`, který vybere data z atributové tabulky spojené s vektorovou mapou. Pro :command:`db.select` můžeme použít tzv. Unix piping:: GRASS> echo "SELECT * FROM pudy"|db.select nebo parametr:: GRASS> db.select sql="SELECT * FROM pudy" :command:`v.db.select` je přímočařejší:: GRASS> v.db.select map=pudy cat|label 1|Aab 2|Ba 3|Bb 4|BcB ... --------------------------------- Uložení hodnot rastru do databáze --------------------------------- * Vytvoříme návhodné bodové pole * Vytvoříme novou atributovou tabulku * Spojíme mapu s databází * Do sloupečku tabulky uložíme hodnoty rastrové mapy #. Tvorba náhodného bodového pole:: GRASS> v.random out=vzorky n=1000 #. Vektorová mapa :file:`vzorky` ale nemá definovány u bodů jejich kategorie a proto ji nelze připojit k atributové tabulce. Kategorie přidáme module :command:`v.category`:: GRASS> v.category vzorky option=add out=vzorkycat #. Spojení s databází ale nebylo definováno:: GRASS> v.db.connect -p vzorkycat CHYBA: Spojení s databází pro mapu nebylo definováno v DB souboru #. Vytvoříme tabulku :file:`vzorkycat` se sloupečky pomocí :command:`db.execute` :: GRASS> echo "CREATE TABLE vzorkycat (cat integer, raster double, vector double)"|db.execute GRASS> v.db.connect map=vzorkycat table=vzorkycat pomocí :command:`v.db.addtable`, o spojení se již nemusíme starat:: GRASS> v.db.addtable map=vzorkycat layer=1 'columns=cat integer, raster double, vector double' .. image:: ../../images/v_db_add_table.png #. Nyní máme tabulku, která je ovšem prázdná (viz ``v.db.select vzorky``) a potřebujeme naplnit její sloupeček ``cat`` identifikátorem vektorových prvků. Modul :command:`v.to.db` umí uložit rozličné vlastnosti vektorových dat do databáze:: GRASS> v.to.db map=vzorkycat column=cat option=cat GRASS> v.db.select vzorkycat Zobrazte mapu :file:`vzorkycat`, resp. její kategorie:: GRASS> d.vect vzorkycat display=cat .. image:: ../../images/d_vect_category.png #. Konečně můžeme uložit hodnotu rastru jako atribut vektoru. K tomuto účelu se použije modul :command:`v.what.rast`:: GRASS> v.what.rast --help GRASS> v.what.rast vect=vzorkycat raster=elevation.dem column=raster GRASS> v.db.select vzorkycat cat|raster 1|1231 2|1240 3|1344 4|1537 5|1172 6|1316 7|1408 8|1287 ... .. image:: ../../images/v_what_rast.png ---------------------------------- Uložení hodnot vektoru do databáze ---------------------------------- Modul :command:`v.what.vect` funguje podobně, jako :command:`v.what.rast`:: GRASS> v.what.vect --help GRASS> v.what.vect vect=vzorkycat qvect=pudy column=vector qcolumn=plocha GRASS> v.db.select vzorkycat .. image:: ../../images/v_what_vect.png .. [#f1] Databáze SQLite musí být nainstalována a GRASS musí být zkompilován s její podporou