Konferenz 2006/GRASS: Unterschied zwischen den Versionen

Aus FOSSGIS Wiki
Zur Navigation springenZur Suche springen
K (GRASS-GIS - Vektoren in der dritten Dimension (Arbeitstitel) moved to GRASS-GIS - Vektoren in der dritten Dimension)
K (cat)
 
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== Zusammenfassung ===
=GRASS-GIS - Vektoren in der dritten Dimension=
=Einführung in die GRASS Vektorarchitektur=
==GRASS Version  6.0==
In der gute alte Zeit, in der GIS GRASS in der Version 5.0 war, mussten wir mit mehreren Beschränkungen leben:
* Man konnte nur einen Attribut zu einem Vektorobjekt zuweisen
* Die Vektordaten waren nur zweidimensionell
* Das Digitalisierungsmodule und andere Module waren nur text-orientiert, was ziemlich anspruchsvoll vor allem für die Anfänger war.
* Neben wirklichen Vektorobjekten - Linien, Punkten und Grenzen, gab es noch ein sogenanntes Sites Format -- spezielles Punktenformat


Der Vortrag behandelt die folgenden Punkte:
==GRASS Version = 6.0==
Ab Version 5.1 (Entwicklung) oder 6.0 (Stabil) besitzt GRASS eine erwachsene Vektorarchitektur [http://www.ing.unitn.it/~grass/conferences/GRASS2002/proceedings/proceedings/pdfs/Blazek_Radim.pdf]:
* Multi-Layer heisst, dass die Vektorobjekte mit mehreren Datenbanktabellen verknüpft werden können
* Multi-Attribut bedeutet, dass man die Attribute sowohl  im internen (dbf) als auch in externen (MySQL, PostgreSQL, ...) Datenbanken speichern kann.
* GRASS ist ein topologisches GIS. Die Topologie kann bis jetzt aber nur für 2D-Objekte aufgebaut werden.
* Vektorobjekte können allerdings auch drei dimensionel dargestellt werden.


  * GRASS Vektorarchitektur
In GRASS 6.x unterscheidet man folgende Vektorobjekte: Point, Line, Boundary, Centroid, Face und Kernel. Face ist ein spezieller Fall von Boundary, der zur Darstellung 3D-Objekte dient. Kernel ist dann entsprechend ein Centroid für 3D-Objekte.
  * Neugigkeiten in GRASS 6.X
 
  * 3D-Möglichkeiten mit GRASS - wie funktioniert das?
=3D-Vektoren und wie man sie selbst machen kann=
  * Visualisieren der Daten mit NVIZ
Das beste Modul, das zu Erzeugung von 3D-Vektorobjekten dient, ist '''v.in.ascii''':
   * Landschaftsmodelle mit GRASS
   
  * Module v.extrude und v.trees3d
    v.in.ascii -z in=datei out=vector3d
 
oder
 
    cat datei | v.in.ascii -z out=vector3d
 
Mit v.in.ascii kann GRASS das sog. GRASS-Ascii Format einlesen. Beispiel für eine Vektorlinie, die aus 6 Knoten besteht:
    B  6 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
    1 1
 
Ein Vektorobjekt besteht aus 3 Teilen:
   
    B 6 1
 
Das zeigt uns, dass es sich um eine Grenze (Boundary) handelt, die aus sechs Knoten besteht. Die Linie wird nur eine Category haben - man kann zu diesem Objekt nur eine Attributtabelle zuweisen.
 
 
    ...
    5958812.48844435 3400828.8422101 10
    ...
 
Danach folgen die Zeilen mit jeweiligen Koordinaten in dem X,Y,Z Format. Die Koordinate sind durch Leerzeichen getrennt.
 
    1 1
 
Die letzte Zeile bestimmt die Objektkategorien für jeden Layer. In unserem Beispiel haben wir nur eine Kategorie pro Vektorobjekt. Mit der Zeile sagen wir also, dass die erste (und zufällig auch letzte) Objektkategorienummer eins haben soll.
 
Die gesamte Datei kann in GRASS eingelesen werden:
 
    echo B  6 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
    1 1 | v.in.ascii -zn out=linie3d format=standard
 
oder in bisschen übersichtlicher Form:
 
    v.in.ascii -zn out=linie3d format=standard  EOF
    B  6 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
    1 1
    EOF
 
Das Ergebnis kann man sich mit dem Modul '''nviz''' anzeigen lassen:
   
    # Region entsprechend einstellen
    g.region vect=linie3d
    # Eine Basiskarte als Ebene berechnen
    r.mapcalc dgm=0
    # Visualisierung
    nviz elev=dgm vect=linie3d
 
Als anderes Objekt kann man sich einen Face -- 3D-Fläche herstellen:
 
    v.in.ascii -zn out=face3d format=standard  EOF
    F 7 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
    5958812.48844435 3400828.8422101 10
    1 1
    EOF
 
Das einzige Unterschied ist, dass der erste und letzte Punkt die selben Koordinate haben muss.
 
==Weiteres Beispiel: Ein Haus==
Es sei ein Haus-Umriss:
 
    v.in.ascii -n out=haus format=standard  EOF
    L  2
        13.375      17.5       
        13.375      13.5625   
    L  2
        13.375      13.5625   
        18.9375      13.5625   
    L  2
        18.9375      13.5625   
        18.9375      17.3125   
    L  2
        18.9375      17.3125   
        13.375      17.5       
    EOF
    g.region vect=haus
    d.vect haus
 
Man kann sich ein einfaches Skript schreiben, das die jeweiligen Wände in einer dritten Dimension extrudet:
 
    #!/bin/sh
    nr=1;
    for line in $( v.out.ascii in=$1 format=standard | \
        grep [0-9]*\.[0-9]* *[0-9]*\.[0-9]* * | \
        sed s/^ *\(.*\)$/\1/ | sed s/  */_/ ); do
 
        line=$( echo $line | sed s/_/ / )
 
        if [ $nr = 1 ]; then
            start=$line; nr=2;
            echo  F 5;
            echo $line  0; echo $line 10;
        else
            echo $line 10; echo $line 0;
            echo $start 0;
            nr=1;
        fi;
    done
 
Den Output aus dem Script kann man dann über eine '''Pipe''' in '''v.in.ascii''' umleiten und dann visualisieren:
 
    haus.sh haus | v.in.asii out=haus3d format=standard
    g.region vect=haus
    r.mapcalc dgm=0
    nviz elev=dgm vect=haus3d
 
=3D-Vektormodule im GRASS=
==v.extrude==
v.extrude ist ein Modul, welches 2D-Vektorobjekte zu 3D macht. Das Modul ist in der Entwicklungsversion von GRASS ab Januar 2006 vorhanden. Die Höhe eines Objektes kann entweder fest gesetzt werden oder aus der Attributtabelle gelesen werden.
 
Beispiel:
       
        db.columns haeuser
        CAT
        HOEHE
        v.extrude in=haeuser out=haeuser3d elev=dem hcol=HOEHE
        nviz elev=dem vect=haeuser3d
 
==v.trees3d==
Das Modul erzeugt aus Punkten 3D-Bäume. Das Modul kann entweder einen allgemeinen Wald erzeugen, mit  definierten Baumartmischung und durschnittliche Baumhöhe und Kronenbreite oder kann die jeweilige Parameter für jeden Baum aus einer Attributtabelle einlesen:
 
 
    v.trees3d in=baeume out=baeume3d elev=dmt diam=6 height=20 hvar=3 vvar=4 hvar=20 spruce=50 beech=25 fir=25
    #
    v.trees3d in=wald out=wald3d elev=dmt diam=6 hcol=hoehe specol=baumart hvar=3 clength=60
 
Das Verfahren, wie man aus einer Bestandeskarte (Polygone), die Attribute über Baumart und Baumhöhe für jeden Bestand einliest, ist wie verfolgt:
 
    # Entsprechende Auflösung für Rasterkarten einstellen ( ~ Kronenbreite ):
    g.region res=6
    # Vektorkarte auf Rasterkarte umwandeln
    v.to.rast in=bestandeskarte out=wald
    # Rasterkarte auf Punktenkarte umwandeln
    r.to.vect in=wald out=wald feature=point
    # Zu jedem Punkt Höhe und Baumartattribut aus der Bestandskarte einlesen:
    v.what.vect vector=wald qvector=bestandskarte column=hoehe qcolumn=hoehe
    v.what.vect vector=wald qvector=bestandskarte column=baumart qcolumn=baumart
    # 3D-Vektorkarte erstellen:
    v.trees3d in=wald out=wald3d elev=dmt diam=6 hcol=hoehe specol=baumart hvar=3 clength=60
 
=Visualisierung=
==NVIZ==
NVIZ ist ein GRASS-Modul, dass zu der Visualisierung von 3D-Daten (Vektor und Raster) geeignet ist. Es ist in GRASS ab Version 5.0 vorhanden. Man kann mit NVIZ einfache Abbildungen darstellen oder ganze Animationen erzeugen.
 
==Paraview==
Paraview ist eine Applikation, die für Visualisierung großer Datasets geeignet ist. Es ist eine Open-Source Software, die platform unabhängig (multiplatform) bei der Firma Kitware Inc. programmiert ist. Im GRASS kann man für's Export von Raster- und Vektordaten in das VTK-Format die Module v.out.vtk, r.out.vtk, r3.out.vtk benutzen.
 
==Povray==
Povray steht für The Persistence of Vision Raytracer. Es ist ein professionelles Tool, das man leider nicht ohne weiteres Studium benutzen kann. Im GRASS sind die Module v.out.pov und r.out.pov vorhanden, die die Raster- und Vektordaten in das Povray-Format exportieren können.
 
=Danksagung=
This article was published with support of IGA University of Agriculture and Forestry in Brno 49/2006.
 
=Folien als PDF=
Die Folien zu diesem Vortrag können [http://les-ejk.cz/doc/bonn_foss-beemer.pdf hier] heruntergeladen werden.
    
=Referenzen=
* Blazek Radim, Neteler Markus, Micarelli Roberto: The New Grass 5.1 Vector Architecture, Open Source Free Software GIS - GRASS users conference 2002 [http://www.ing.unitn.it/~grass/conferences/GRASS2002/proceedings/proceedings/pdfs/Blazek_Radim.pdf PDF]
* Pretz, Hans 2002:Grundlagen der Waldwachstumsforschung, Parey Buchverlag. Berlin, Wien, ISBN: 3-8263-3223-7, s.208
* [http://grass.itc.it/nviz NVIZ]
* [http://grass.itc.it/grass61/manuals/html61_user/v.in.ascii.html v.in.ascii]
* [http://grass.itc.it/grass61/manuals/html61_user/v.out.ascii.html v.out.ascii]
* [http://grass.itc.it/grass61/manuals/html61_user/v.extrude.html v.extrude]
* [http://les-ejk.cz/?cat=grass Les-ejk: GRASS Modules]
* [http://www.paraview.org/ ParaView]
* [http://www.povray.org/ Povray]
* [http://www-pool.math.tu-berlin.de/~soeren/grass/modules/ Hydrogeologie und GRASS: GRASS Modules]
 
[[Kategorie:FOSSGIS Konferenz 2006]]
[[Kategorie:GRASS]]

Aktuelle Version vom 29. Oktober 2013, 13:35 Uhr

GRASS-GIS - Vektoren in der dritten Dimension[Bearbeiten | Quelltext bearbeiten]

Einführung in die GRASS Vektorarchitektur[Bearbeiten | Quelltext bearbeiten]

GRASS Version 6.0[Bearbeiten | Quelltext bearbeiten]

In der gute alte Zeit, in der GIS GRASS in der Version 5.0 war, mussten wir mit mehreren Beschränkungen leben:

  • Man konnte nur einen Attribut zu einem Vektorobjekt zuweisen
  • Die Vektordaten waren nur zweidimensionell
  • Das Digitalisierungsmodule und andere Module waren nur text-orientiert, was ziemlich anspruchsvoll vor allem für die Anfänger war.
  • Neben wirklichen Vektorobjekten - Linien, Punkten und Grenzen, gab es noch ein sogenanntes Sites Format -- spezielles Punktenformat

GRASS Version = 6.0[Bearbeiten | Quelltext bearbeiten]

Ab Version 5.1 (Entwicklung) oder 6.0 (Stabil) besitzt GRASS eine erwachsene Vektorarchitektur [1]:

  • Multi-Layer heisst, dass die Vektorobjekte mit mehreren Datenbanktabellen verknüpft werden können
  • Multi-Attribut bedeutet, dass man die Attribute sowohl im internen (dbf) als auch in externen (MySQL, PostgreSQL, ...) Datenbanken speichern kann.
  • GRASS ist ein topologisches GIS. Die Topologie kann bis jetzt aber nur für 2D-Objekte aufgebaut werden.
  • Vektorobjekte können allerdings auch drei dimensionel dargestellt werden.

In GRASS 6.x unterscheidet man folgende Vektorobjekte: Point, Line, Boundary, Centroid, Face und Kernel. Face ist ein spezieller Fall von Boundary, der zur Darstellung 3D-Objekte dient. Kernel ist dann entsprechend ein Centroid für 3D-Objekte.

3D-Vektoren und wie man sie selbst machen kann[Bearbeiten | Quelltext bearbeiten]

Das beste Modul, das zu Erzeugung von 3D-Vektorobjekten dient, ist v.in.ascii:

   v.in.ascii -z in=datei out=vector3d

oder

   cat datei | v.in.ascii -z out=vector3d

Mit v.in.ascii kann GRASS das sog. GRASS-Ascii Format einlesen. Beispiel für eine Vektorlinie, die aus 6 Knoten besteht:

   B  6 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
   1 1

Ein Vektorobjekt besteht aus 3 Teilen:

   B 6 1

Das zeigt uns, dass es sich um eine Grenze (Boundary) handelt, die aus sechs Knoten besteht. Die Linie wird nur eine Category haben - man kann zu diesem Objekt nur eine Attributtabelle zuweisen.


   ...
   5958812.48844435 3400828.8422101 10
   ...

Danach folgen die Zeilen mit jeweiligen Koordinaten in dem X,Y,Z Format. Die Koordinate sind durch Leerzeichen getrennt.

   1 1

Die letzte Zeile bestimmt die Objektkategorien für jeden Layer. In unserem Beispiel haben wir nur eine Kategorie pro Vektorobjekt. Mit der Zeile sagen wir also, dass die erste (und zufällig auch letzte) Objektkategorienummer eins haben soll.

Die gesamte Datei kann in GRASS eingelesen werden:

   echo B  6 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
   1 1 | v.in.ascii -zn out=linie3d format=standard

oder in bisschen übersichtlicher Form:

   v.in.ascii -zn out=linie3d format=standard  EOF
   B  6 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
   1 1
   EOF

Das Ergebnis kann man sich mit dem Modul nviz anzeigen lassen:

   # Region entsprechend einstellen
   g.region vect=linie3d 
   # Eine Basiskarte als Ebene berechnen
   r.mapcalc dgm=0
   # Visualisierung
   nviz elev=dgm vect=linie3d

Als anderes Objekt kann man sich einen Face -- 3D-Fläche herstellen:

   v.in.ascii -zn out=face3d format=standard  EOF
   F 7 1
    5958812.48844435 3400828.8422101 10
    5958957.29887089 3400877.1123522 10
    5959021.65906046 3400930.7458436 10
    5959048.47580612 3400973.6526366 20
    5959069.92920264 3401032.6494770 20
    5958812.48844435 3400828.8422101 10
    5958812.48844435 3400828.8422101 10
   1 1
   EOF

Das einzige Unterschied ist, dass der erste und letzte Punkt die selben Koordinate haben muss.

Weiteres Beispiel: Ein Haus[Bearbeiten | Quelltext bearbeiten]

Es sei ein Haus-Umriss:

   v.in.ascii -n out=haus format=standard  EOF
   L  2
       13.375       17.5        
       13.375       13.5625     
   L  2
       13.375       13.5625     
       18.9375      13.5625     
   L  2
       18.9375      13.5625     
       18.9375      17.3125     
   L  2
       18.9375      17.3125     
       13.375       17.5        
   EOF
   g.region vect=haus
   d.vect haus

Man kann sich ein einfaches Skript schreiben, das die jeweiligen Wände in einer dritten Dimension extrudet:

   #!/bin/sh
   nr=1;
   for line in $( v.out.ascii in=$1 format=standard | \
       grep [0-9]*\.[0-9]* *[0-9]*\.[0-9]* * | \
       sed s/^ *\(.*\)$/\1/ | sed s/  */_/ ); do
       line=$( echo $line | sed s/_/ / )
       if [ $nr = 1 ]; then
           start=$line; nr=2;
           echo  F 5;
           echo $line  0; echo $line 10;
       else
           echo $line 10; echo $line 0;
           echo $start 0;
           nr=1;
       fi;
   done

Den Output aus dem Script kann man dann über eine Pipe in v.in.ascii umleiten und dann visualisieren:

   haus.sh haus | v.in.asii out=haus3d format=standard
   g.region vect=haus
   r.mapcalc dgm=0
   nviz elev=dgm vect=haus3d

3D-Vektormodule im GRASS[Bearbeiten | Quelltext bearbeiten]

v.extrude[Bearbeiten | Quelltext bearbeiten]

v.extrude ist ein Modul, welches 2D-Vektorobjekte zu 3D macht. Das Modul ist in der Entwicklungsversion von GRASS ab Januar 2006 vorhanden. Die Höhe eines Objektes kann entweder fest gesetzt werden oder aus der Attributtabelle gelesen werden.

Beispiel:

       db.columns haeuser
       CAT
       HOEHE
       v.extrude in=haeuser out=haeuser3d elev=dem hcol=HOEHE
       nviz elev=dem vect=haeuser3d

v.trees3d[Bearbeiten | Quelltext bearbeiten]

Das Modul erzeugt aus Punkten 3D-Bäume. Das Modul kann entweder einen allgemeinen Wald erzeugen, mit definierten Baumartmischung und durschnittliche Baumhöhe und Kronenbreite oder kann die jeweilige Parameter für jeden Baum aus einer Attributtabelle einlesen:


   v.trees3d in=baeume out=baeume3d elev=dmt diam=6 height=20 hvar=3 vvar=4 hvar=20 spruce=50 beech=25 fir=25
   #
   v.trees3d in=wald out=wald3d elev=dmt diam=6 hcol=hoehe specol=baumart hvar=3 clength=60

Das Verfahren, wie man aus einer Bestandeskarte (Polygone), die Attribute über Baumart und Baumhöhe für jeden Bestand einliest, ist wie verfolgt:

   # Entsprechende Auflösung für Rasterkarten einstellen ( ~ Kronenbreite ):
   g.region res=6
   # Vektorkarte auf Rasterkarte umwandeln
   v.to.rast in=bestandeskarte out=wald 
   # Rasterkarte auf Punktenkarte umwandeln
   r.to.vect in=wald out=wald feature=point
   # Zu jedem Punkt Höhe und Baumartattribut aus der Bestandskarte einlesen:
   v.what.vect vector=wald qvector=bestandskarte column=hoehe qcolumn=hoehe
   v.what.vect vector=wald qvector=bestandskarte column=baumart qcolumn=baumart
   # 3D-Vektorkarte erstellen:
   v.trees3d in=wald out=wald3d elev=dmt diam=6 hcol=hoehe specol=baumart hvar=3 clength=60

Visualisierung[Bearbeiten | Quelltext bearbeiten]

NVIZ[Bearbeiten | Quelltext bearbeiten]

NVIZ ist ein GRASS-Modul, dass zu der Visualisierung von 3D-Daten (Vektor und Raster) geeignet ist. Es ist in GRASS ab Version 5.0 vorhanden. Man kann mit NVIZ einfache Abbildungen darstellen oder ganze Animationen erzeugen.

Paraview[Bearbeiten | Quelltext bearbeiten]

Paraview ist eine Applikation, die für Visualisierung großer Datasets geeignet ist. Es ist eine Open-Source Software, die platform unabhängig (multiplatform) bei der Firma Kitware Inc. programmiert ist. Im GRASS kann man für's Export von Raster- und Vektordaten in das VTK-Format die Module v.out.vtk, r.out.vtk, r3.out.vtk benutzen.

Povray[Bearbeiten | Quelltext bearbeiten]

Povray steht für The Persistence of Vision Raytracer. Es ist ein professionelles Tool, das man leider nicht ohne weiteres Studium benutzen kann. Im GRASS sind die Module v.out.pov und r.out.pov vorhanden, die die Raster- und Vektordaten in das Povray-Format exportieren können.

Danksagung[Bearbeiten | Quelltext bearbeiten]

This article was published with support of IGA University of Agriculture and Forestry in Brno 49/2006.

Folien als PDF[Bearbeiten | Quelltext bearbeiten]

Die Folien zu diesem Vortrag können hier heruntergeladen werden.

Referenzen[Bearbeiten | Quelltext bearbeiten]