Spojení s databázemi

Databázové funkce v Tcl/Tk GUI nejsou podporovány (kromě standardního rozhraní k db.* modulům.

  1. Výpis aktuálního spojení:

    GRASS> db.connect -p
    
    driver:dbf
    database: $GISDBASE/$LOCATION\_NAME/$MAPSET/dbf/
    schema:(null)
    group:(null)
  2. Spojení vektorové mapy s tabulkou

    GRASS> v.db.connect -p pudy
    
    Vector map <pudy> is connected by:
    layer <1> table <pudy> in database
    </home/jachym/grassdata/spearfish60/jachym/dbf/> through driver <dbf> with key <cat>
  3. 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
  4. Přepsání spojení [1]

    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ě

Poznámka

Pracujte na kopii mapy soils jménem pudy

Textové rozhraní

GRASS> d.what.vect pudy

Vytvářím prostorový index ...
100 %

Tlačítka
 Levé:  copak je tu
 Pravé: ukončit
../_images/d-what-vect.png

Grafické rozhraní

GUI používá na pozadí modul v.what

../_images/d-what-vect-gui.png

Výběr hodnot z databáze

Pro výběr hodnot z atributové tabulky slouží modul db.select. Od GRASSu 6.3 je možné použít modul v.db.select, který vybere data z atributové tabulky spojené s vektorovou mapou.

Pro 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"

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
  1. Tvorba náhodného bodového pole:

    GRASS> v.random out=vzorky n=1000
  2. Vektorová mapa vzorky ale nemá definovány u bodů jejich

    kategorie a proto ji nelze připojit k atributové tabulce. Kategorie přidáme module v.category:

    GRASS> v.category vzorky option=add out=vzorkycat
  3. Spojení s databází ale nebylo definováno:

    GRASS> v.db.connect -p vzorkycat
    
    CHYBA: Spojení s databází pro mapu <vzorkycat@jachym>nebylo definováno v
       DB souboru
  4. Vytvoříme tabulku vzorkycat se sloupečky

    pomocí db.execute

    GRASS> echo "CREATE TABLE vzorkycat (cat integer, raster double, vector double)"|db.execute
    GRASS> v.db.connect map=vzorkycat table=vzorkycat

    pomocí 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'
    ../_images/v_db_add_table.png
  5. 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 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 vzorkycat, resp. její kategorie:

    GRASS> d.vect vzorkycat display=cat
    ../_images/d_vect_category.png
  6. Konečně můžeme uložit hodnotu rastru jako atribut vektoru. K tomuto

    účelu se použije modul 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
    ...
    ../_images/v_what_rast.png

Uložení hodnot vektoru do databáze

Modul v.what.vect funguje podobně, jako 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
../_images/v_what_vect.png
[1]Databáze SQLite musí být nainstalována a GRASS musí být zkompilován s její podporou