Tips and Tricks: Difference between revisions
Line 100: | Line 100: | ||
The next example illustrates the process for line vector ''mylines''. We want to be able to draw an arrow head at the to-node lines for which attribute ''code'' equals 3 or 5 : | The next example illustrates the process for line vector ''mylines''. We want to be able to draw an arrow head at the to-node lines for which attribute ''code'' equals 3 or 5 : | ||
<pre> | <pre> | ||
for i in `v.out.ascii input=mylines format=standard where= | for i in `v.out.ascii input=mylines format=standard where="code=3 or code=5" \ | ||
| grep -n 'L ' | sed s/\:/' '/ | sed s/' '/' '/ | awk '{print $1+$3-1}'`; \ | | grep -n 'L ' | sed s/\:/' '/ | sed s/' '/' '/ | awk '{print $1+$3-1}'`; \ | ||
do v.out.ascii input=mylines format=standard | sed -n ${i},$((i+2))p | do v.out.ascii input=mylines format=standard where="code=3 or code=5" \ | ||
| awk 'NR == 2 {x=$1;y=$2} NR == 1 {xi=$1;yi=$2} NR == 3 {cat=$2} END {pi=3.14159;OFS="|";\ | | sed -n ${i},$((i+2))p | awk 'NR == 2 {x=$1;y=$2} NR == 1 {xi=$1;yi=$2} \ | ||
NR == 3 {cat=$2} END {pi=3.14159;OFS="|";\ | |||
print cat,x,y,atan2(yi-y,xi-x)/pi*180}'; done \ | print cat,x,y,atan2(yi-y,xi-x)/pi*180}'; done \ | ||
| v.in.ascii -n out=myarrowheads x=2 y=3 cat=1 \ | | v.in.ascii -n out=myarrowheads x=2 y=3 cat=1 \ |
Revision as of 17:29, 3 March 2013
Tips and Tricks
Using QGIS as a frontend to GRASS
- QGIS started as a simple viewer for geodata. And that's really what it still is: a simple-to-use geodata viewer with some editing capabilities. That's what it was designed to be and that's what it can do really well. QGIS does not have built-in capabilities for geodata processing and analysis.
- However, a while back, Radim Blazek, who was then a core developer of the GRASS 6 system, decided to write a plugin for QGIS that would make it possible to access GRASS functionality from within the QGIS GUI.
- And that's what you get today, when you download a binary version of QGIS for your platform: QGIS + GRASS 6 plus a plugin that makes using GRASS from QGIS simple and fun.
QGIS can run as a frontend to GRASS. There is support for displaying maps, editing maps, and execution of simple GIS functions. The GDAL/OGR library is a requirement for that (but for GRASS anyway):
- QGIS homepage: http://qgis.org
- GDAL homepage: http://www.gdal.org
Here is a nice tutorial for editing vectors using QGIS as a frontend to GRASS: Editing_GRASS_vectors_with_QGIS (where did it go? unported from old wiki site? )
To use GDAL and GRASS together, the GDAL-GRASS plugin must be installed:
Test that the GDAL-GRASS plugin is available with this command:
gdalinfo --formats
Look for a line like "GRASS (ro): GRASS Database Rasters (5.7+)"
Enable the QGIS GRASS plugin from QGIS:
GUI: Plugins / Plugin Manager / Check the GRASS checkbox
The GRASS toolbar should now be visible. While not a firm requirement, it is easier to start QGIS from within a GRASS session.
- QGIS GRASS Cookbook - Recipes for common tasks
Importing SRTM30plus data
See Global datasets page
GMT (The Generic Mapping Tools)
GMT (Generic Mapping Tools) is a Free software package for creating publication quality cartography.
GMT homepage: http://gmt.soest.hawaii.edu
Interfacing R-Statistics with GRASS
GRASS may be combined with R-Statistics to create a very powerful geostatistical analysis platform.
R-Statistics homepage http://www.r-project.org
Using GRASS with an on-line Web-GIS
see:
(please expand)
Starting and running GRASS from a script
See GRASS and Shell.
Running GRASS remotely on OS X
Tiger (OS 10.4) changed the default configuration of SSH from previous versions of OS X. You can no longer start an ssh session with the -X flag and display the Tcl/Tk components of the GRASS GUI remotely. If you are running grass on OS X (10.4) between hosts on a network (i.e. running it on one machine but displaying it on another), you will need to use the "trusted forwarding" mode of SSH in order for the Tcl/Tk generated graphics, such as d.m or gis.m in order for the GUI graphics to make it through your connection. This can be done using the -Y flag when you start the ssh session:
ssh -Y remotehost
or add this to ~/.ssh/config:
Host hostname ForwardX11 yes ForwardX11Trusted yes
Using the -X flag, or simply turning on X11Forwarding in the SSH configuration files, is not enough: the symptoms in this case are that a d.mon window will function fine, but none of the Tcl/Tk dialogues will work, failing with an error message complaining either about Wish not behaving as expected, or a "Bad Atom".
Quick tips
Checking categories pertainig to more than one feature
v.build op=cdump map=mymap | gawk -F"|" '{print $1}' | uniq -dc
returns, e.g.
5 35347
(5 features with cat 35347)
Compensate the lack of line ends symbology in ps.map
ps.map does not allow to specify line-end (from- and to-nodes) symbols oriented in the same direction as the last (resp. first) segment. Typically you want to add arrowheads to a line vector. Here we suggest a one-line gas (grep/awk/sed) solution. The idea is to output a bunch of selected lines ("where" argument), extract concerned couples of vertices, calculate a position and an angle for each tip, then import this set of data in a point vector. This point vector can latter be invoked in a command file.
The next example illustrates the process for line vector mylines. We want to be able to draw an arrow head at the to-node lines for which attribute code equals 3 or 5 :
for i in `v.out.ascii input=mylines format=standard where="code=3 or code=5" \ | grep -n 'L ' | sed s/\:/' '/ | sed s/' '/' '/ | awk '{print $1+$3-1}'`; \ do v.out.ascii input=mylines format=standard where="code=3 or code=5" \ | sed -n ${i},$((i+2))p | awk 'NR == 2 {x=$1;y=$2} NR == 1 {xi=$1;yi=$2} \ NR == 3 {cat=$2} END {pi=3.14159;OFS="|";\ print cat,x,y,atan2(yi-y,xi-x)/pi*180}'; done \ | v.in.ascii -n out=myarrowheads x=2 y=3 cat=1 \ columns='cat int, x double precision, y double precision, angle double precision'
It results in a point vector named myarrowheads. Attribute field angle contains the rotation angle value fitting with to-node last segment direction.
ps.map command allowing to hardcopy arrows would look like this :
vlines mylines width 0.6 color black end vpoints myarrowheads color black symbol extra/n_arrow1 rotatecolumn angle+90 size 2 end