<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E2%9A%A0%EF%B8%8FGlynn</id>
	<title>GRASS-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%E2%9A%A0%EF%B8%8FGlynn"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/wiki/Special:Contributions/%E2%9A%A0%EF%B8%8FGlynn"/>
	<updated>2026-04-19T09:16:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_and_Python&amp;diff=9975</id>
		<title>GRASS and Python</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_and_Python&amp;diff=9975"/>
		<updated>2009-12-17T22:42:20Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: /* Example */ Fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''(for discussions on the new GRASS GUI, see [[GRASS GUI|here]])''&lt;br /&gt;
&lt;br /&gt;
==Python SIGs==&lt;br /&gt;
Python Special Interest Groups are focused collaborative efforts to develop, improve, or maintain specific Python resources. Each SIG has a charter, a coordinator, a mailing list, and a directory on the Python website. SIG membership is informal, defined by subscription to the SIG's mailing list. Anyone can join a SIG, and participate in the development discussions via the SIG's mailing list. Below is the list of currently active Python SIGs, with links to their resources. &lt;br /&gt;
&lt;br /&gt;
See more at http://www.python.org/community/sigs/&lt;br /&gt;
&lt;br /&gt;
==Writing Python scripts in GRASS==&lt;br /&gt;
&lt;br /&gt;
Python is a programming language which is more powerful than shell scripting but easier and more forgiving than C.&lt;br /&gt;
The Python script can contain simple module description definitions which will be processed with {{cmd|g.parser}}, as shown in the example below. In this way with no extra coding a GUI can be built, inputs checked, and a skeleton help page can be generated automatically. In addition it adds links to the GRASS message translation system.&lt;br /&gt;
For code which needs access to the power of C, you can access the GRASS C library functions via the SWIG interface.&lt;br /&gt;
&lt;br /&gt;
* GRASS Python interface to library functions: http://download.osgeo.org/grass/grass6_progman/swig/&lt;br /&gt;
* GRASS Python scripting library: http://download.osgeo.org/grass/grass6_progman/pythonlib.html&lt;br /&gt;
&lt;br /&gt;
Code style: Have a look at [http://trac.osgeo.org/grass/browser/grass/trunk/SUBMITTING_PYTHON SUBMITTING_PYTHON].&lt;br /&gt;
&lt;br /&gt;
=== Running external commands from Python ===&lt;br /&gt;
For information on running external commands from Python, see:&lt;br /&gt;
http://docs.python.org/lib/module-subprocess.html&lt;br /&gt;
&lt;br /&gt;
Avoid using the older os.* functions. Section 17.1.3 lists equivalents&lt;br /&gt;
using the Popen() interface, which is more robust (particularly on&lt;br /&gt;
Windows).&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
Example of Python script, which is processed by g.parser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
############################################################################&lt;br /&gt;
#&lt;br /&gt;
# MODULE:      d.shadedmap&lt;br /&gt;
# AUTHOR(S):   Unknown; updated to GRASS 5.7 by Michael Barton&lt;br /&gt;
#              Converted to Python by Glynn Clements&lt;br /&gt;
# PURPOSE:     Uses d.his to drape a color raster over a shaded relief map&lt;br /&gt;
# COPYRIGHT:   (C) 2004,2008,2009 by the GRASS Development Team&lt;br /&gt;
#&lt;br /&gt;
#              This program is free software under the GNU General Public&lt;br /&gt;
#              License (&amp;gt;=v2). Read the file COPYING that comes with GRASS&lt;br /&gt;
#              for details.&lt;br /&gt;
#&lt;br /&gt;
#############################################################################&lt;br /&gt;
&lt;br /&gt;
#%Module&lt;br /&gt;
#% description: Drapes a color raster over a shaded relief map using d.his&lt;br /&gt;
#%End&lt;br /&gt;
#%option&lt;br /&gt;
#% key: reliefmap&lt;br /&gt;
#% type: string&lt;br /&gt;
#% gisprompt: old,cell,raster&lt;br /&gt;
#% description: Name of shaded relief or aspect map&lt;br /&gt;
#% required : yes&lt;br /&gt;
#%end&lt;br /&gt;
#%option&lt;br /&gt;
#% key: drapemap&lt;br /&gt;
#% type: string&lt;br /&gt;
#% gisprompt: old,cell,raster&lt;br /&gt;
#% description: Name of raster to drape over relief map&lt;br /&gt;
#% required : yes&lt;br /&gt;
#%end&lt;br /&gt;
#%option&lt;br /&gt;
#% key: brighten&lt;br /&gt;
#% type: integer&lt;br /&gt;
#% description: Percent to brighten&lt;br /&gt;
#% options: -99-99&lt;br /&gt;
#% answer: 0&lt;br /&gt;
#%end&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
from grass.script import core as grass&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    drape_map = options['drapemap']&lt;br /&gt;
    relief_map = options['reliefmap']&lt;br /&gt;
    brighten = options['brighten']&lt;br /&gt;
    ret = grass.run_command(&amp;quot;d.his&amp;quot;, h_map = drape_map,  i_map = relief_map, brighten = brighten)&lt;br /&gt;
    sys.exit(ret)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    options, flags = grass.parser()&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Python extensions for GRASS GIS==&lt;br /&gt;
=== wxPython GUI development for GRASS ===&lt;br /&gt;
&lt;br /&gt;
* See the [[GRASS GUI]] wiki page&lt;br /&gt;
&lt;br /&gt;
=== GRASS Python library ===&lt;br /&gt;
&lt;br /&gt;
See [http://download.osgeo.org/grass/grass6_progman/pythonlib.html GRASS Python library]&lt;br /&gt;
&lt;br /&gt;
=== Python-SWIG-GRASS interface ===&lt;br /&gt;
There is a prototype GRASS-SWIG interface available (thanks to Sajith VK), find it in GRASS 6-CVS: '''swig/python/'''. Draft documentation is [http://download.osgeo.org/grass/grass6_progman/swig/ here]. It now wraps both raster and vector data C functions plus the general GIS (G_*()) functions.&lt;br /&gt;
&lt;br /&gt;
Background: [http://www.swig.org SWIG] (Simplified Wrapper and Interface Generator) is: &lt;br /&gt;
&lt;br /&gt;
* A compiler that turns ANSI C/C++ declarations into scripting language interfaces.&lt;br /&gt;
* Completely automated (produces a fully working Python extension module). &lt;br /&gt;
* Language neutral. SWIG can also target Tcl, Perl, Guile, MATLAB (try PyLab+Matplotlib from python), etc... &lt;br /&gt;
* Attempts to eliminate the tedium of writing extension modules.&lt;br /&gt;
&lt;br /&gt;
==== Python-SWIG examples ====&lt;br /&gt;
&lt;br /&gt;
* Latest and greatest: [[http://trac.osgeo.org/grass/browser/grass/trunk/scripts GRASS 7 Python scripts]]&lt;br /&gt;
&lt;br /&gt;
* [[PythonSwigExamples|More complicated examples]]&lt;br /&gt;
&lt;br /&gt;
Sample script for GRASS 6 raster access (use within GRASS, Spearfish session):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import os, sys&lt;br /&gt;
from grass.lib import grass&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;GISBASE&amp;quot; not in os.environ:&lt;br /&gt;
    print &amp;quot;You must be in GRASS GIS to run this program.&amp;quot;&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv)==2:&lt;br /&gt;
  input = sys.argv[1]&lt;br /&gt;
else:&lt;br /&gt;
  input = raw_input(&amp;quot;Raster Map Name? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# initialize&lt;br /&gt;
grass.G_gisinit('')&lt;br /&gt;
&lt;br /&gt;
# find map in search path&lt;br /&gt;
mapset = grass.G_find_cell2(input, '')&lt;br /&gt;
&lt;br /&gt;
# determine the inputmap type (CELL/FCELL/DCELL) */&lt;br /&gt;
data_type = grass.G_raster_map_type(input, mapset)&lt;br /&gt;
&lt;br /&gt;
infd = grass.G_open_cell_old(input, mapset)&lt;br /&gt;
inrast = grass.G_allocate_raster_buf(data_type)&lt;br /&gt;
&lt;br /&gt;
rown = 0&lt;br /&gt;
while True:&lt;br /&gt;
    myrow = grass.G_get_raster_row(infd, inrast, rown, data_type)&lt;br /&gt;
    print rown, myrow[0:10]&lt;br /&gt;
    rown += 1&lt;br /&gt;
    if rown == 476:&lt;br /&gt;
        break&lt;br /&gt;
&lt;br /&gt;
grass.G_close_cell(inrast)&lt;br /&gt;
grass.G_free(cell)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample script for vector access (use within GRASS, Spearfish session):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
# run within GRASS Spearfish session&lt;br /&gt;
# run this before starting python to append module search path:&lt;br /&gt;
#   export PYTHONPATH=/usr/src/grass70/swig/python&lt;br /&gt;
#   check with &amp;quot;import sys; sys.path&amp;quot;&lt;br /&gt;
# or:&lt;br /&gt;
#   sys.path.append(&amp;quot;/usr/src/grass70/swig/python&amp;quot;)&lt;br /&gt;
# FIXME: install the grass bindings in $GISBASE/lib/ ?&lt;br /&gt;
&lt;br /&gt;
import os, sys&lt;br /&gt;
from grass.lib import grass&lt;br /&gt;
from grass.lib import vector as grassvect&lt;br /&gt;
&lt;br /&gt;
if &amp;quot;GISBASE&amp;quot; not in os.environ:&lt;br /&gt;
    print &amp;quot;You must be in GRASS GIS to run this program.&amp;quot;&lt;br /&gt;
    sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv)==2:&lt;br /&gt;
  input = sys.argv[1]&lt;br /&gt;
else:&lt;br /&gt;
  input = raw_input(&amp;quot;Vector Map Name? &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# initialize&lt;br /&gt;
grass.G_gisinit('')&lt;br /&gt;
&lt;br /&gt;
# find map in search path&lt;br /&gt;
mapset = grass.G_find_vector2(input,'')&lt;br /&gt;
&lt;br /&gt;
# define map structure&lt;br /&gt;
map = grassvect.Map_info()&lt;br /&gt;
&lt;br /&gt;
# define open level (level 2: topology)&lt;br /&gt;
grassvect.Vect_set_open_level (2)&lt;br /&gt;
&lt;br /&gt;
# open existing map&lt;br /&gt;
grassvect.Vect_open_old(map, input, mapset)&lt;br /&gt;
&lt;br /&gt;
# query&lt;br /&gt;
print 'Vect map: ', input&lt;br /&gt;
print 'Vect is 3D: ', grassvect.Vect_is_3d (map)&lt;br /&gt;
print 'Vect DB links: ', grassvect.Vect_get_num_dblinks(map)&lt;br /&gt;
print 'Map Scale:  1:', grassvect.Vect_get_scale(map)&lt;br /&gt;
print 'Number of areas:', grassvect.Vect_get_num_areas(map)&lt;br /&gt;
&lt;br /&gt;
# close map&lt;br /&gt;
grassvect.Vect_close(map)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== TODO ====&lt;br /&gt;
&lt;br /&gt;
* Implement modules support in a Python class using --interface-description and a Python-XML parser. This should be a generic class with module's name as parameter, returning back an object which describes the module (description, flags, parameters, status of not/required). See [http://trac.osgeo.org/grass/browser/grass/trunk/gui/wxpython/ GRASS 6 wxPython interface] for inspiration. Important is to auto-generate the GRASS-Python class at compile time with a Python script.&lt;br /&gt;
&lt;br /&gt;
=== Python-GRASS add-ons ===&lt;br /&gt;
&lt;br /&gt;
Stand-alone addons:&lt;br /&gt;
&lt;br /&gt;
# Jáchym Čepický's G-ps.map, a GUI to typeset printable maps with ps.map (http://193.84.38.2/~jachym/index.py?cat=gpsmap)&lt;br /&gt;
# Jáchym Čepický's v.pydigit, a GUI to v.edit (http://les-ejk.cz/?cat=vpydigit)&lt;br /&gt;
# Jáchym Čepický's PyWPS, GRASS-Web Processing Service (http://pywps.wald.intevation.org)&lt;br /&gt;
&lt;br /&gt;
=== Using GRASS gui.tcl in Python ===&lt;br /&gt;
&lt;br /&gt;
Here is some example code to use the grass automatically generated guis in python code. This could (should) all be bundled up and abstracted away so that the implementation can be replaced later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import Tkinter&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
# Startup (once):&lt;br /&gt;
&lt;br /&gt;
tk = Tkinter.Tk()&lt;br /&gt;
tk.eval (&amp;quot;wm withdraw .&amp;quot;)&lt;br /&gt;
tk.eval (&amp;quot;source $env(GISBASE)/etc/gui.tcl&amp;quot;)&lt;br /&gt;
# Here you could do various things to change what the gui does&lt;br /&gt;
# See gui.tcl and README.GUI&lt;br /&gt;
&lt;br /&gt;
# Make a gui (per dialog)&lt;br /&gt;
# This sets up a window for the command.&lt;br /&gt;
# This can be different to integrate with tkinter:&lt;br /&gt;
tk.eval ('set path &amp;quot;.dialog$dlg&amp;quot;')&lt;br /&gt;
tk.eval ('toplevel .dialog$dlg')&lt;br /&gt;
# Load the code for this command:&lt;br /&gt;
fd = os.popen (&amp;quot;d.vect --tcltk&amp;quot;)&lt;br /&gt;
gui = fd.read()&lt;br /&gt;
# Run it&lt;br /&gt;
tk.eval(gui)&lt;br /&gt;
dlg = tk.eval('set dlg') # This is used later to get and set &lt;br /&gt;
&lt;br /&gt;
# Get the current command in the gui we just made:&lt;br /&gt;
currentcommand = tk.eval (&amp;quot;dialog_get_command &amp;quot; + dlg)&lt;br /&gt;
&lt;br /&gt;
# Set the command in the dialog we just made:&lt;br /&gt;
tk.eval (&amp;quot;dialog_set_command &amp;quot; + dlg + &amp;quot; {d.vect map=roads}&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== General guides ===&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikibooks.org/wiki/Python_Programming/ Wikibook Python Programming]&lt;br /&gt;
* [http://www.poromenos.org/tutorials/python Quick Python tutorial] for programmers of other languages&lt;br /&gt;
: [http://wiki.python.org/moin/BeginnersGuide/Programmers More Python tutorials] for programmers&lt;br /&gt;
* [http://www.python.org/dev/peps/pep-0008/ Python programming style guide]&lt;br /&gt;
&lt;br /&gt;
=== Programming ===&lt;br /&gt;
&lt;br /&gt;
* Python and GRASS:&lt;br /&gt;
** GRASS Python interface to library functions: http://download.osgeo.org/grass/grass6_progman/swig/ based on SWIG http://www.swig.org/&lt;br /&gt;
** GRASS Python scripting library: http://download.osgeo.org/grass/grass6_progman/pythonlib.html&lt;br /&gt;
** PyWPS, GRASS-Web Processing Service http://pywps.wald.intevation.org&lt;br /&gt;
&lt;br /&gt;
* Python and OSGeo:&lt;br /&gt;
** [http://wiki.osgeo.org/wiki/OSGeo_Python_Library OSGeo Python Library]&lt;br /&gt;
&lt;br /&gt;
* Python and GDAL/OGR:&lt;br /&gt;
** [http://mapserver.gis.umn.edu/community/conferences/MUM3/workshop/python Open Source Python GIS Hacks Mum'03]&lt;br /&gt;
** http://hobu.biz/software/OSGIS_Hacks - Python OSGIS Hacks '05&lt;br /&gt;
** http://zcologia.com/news/categorylist_html?cat_id=8&lt;br /&gt;
** http://www.perrygeo.net/wordpress/?p=4&lt;br /&gt;
&lt;br /&gt;
* Python bindings to PROJ:&lt;br /&gt;
** http://www.cdc.noaa.gov/people/jeffrey.s.whitaker/python/pyproj.html&lt;br /&gt;
&lt;br /&gt;
* Python and GIS:&lt;br /&gt;
** [http://gispython.org/ Open Source GIS-Python Laboratory]&lt;br /&gt;
&lt;br /&gt;
* Python and Statistics:&lt;br /&gt;
** [http://rpy.sourceforge.net/ RPy] - Python interface to the R-statistics programming language&lt;br /&gt;
&lt;br /&gt;
* Bindings:&lt;br /&gt;
** SIP (C/C++ bindings generator) http://directory.fsf.org/all/Python-SIP.html&lt;br /&gt;
** [http://www.cython.org/ Cython] - C-Extensions for Python (compile where speed is needed)&lt;br /&gt;
&lt;br /&gt;
* Other external projects&lt;br /&gt;
** [http://www.scipy.org Scientific Python]&lt;br /&gt;
** [http://wiki.python.org/moin/NumericAndScientific Numeric and Scientific]&lt;br /&gt;
** [http://w3.pppl.gov/~hammett/comp/python/python.html Info on Python for Scientific Applications]&lt;br /&gt;
&lt;br /&gt;
=== Presentations ===&lt;br /&gt;
&lt;br /&gt;
From FOSS4G2006:&lt;br /&gt;
* [http://www.foss4g2006.org/materialDisplay.py?contribId=136&amp;amp;amp;sessionId=48&amp;amp;amp;materialId=slides&amp;amp;amp;confId=1 A Python sweeps in the GRASS] - A. Frigeri 2006&lt;br /&gt;
* [http://www.foss4g2006.org/materialDisplay.py?contribId=67&amp;amp;amp;sessionId=48&amp;amp;amp;materialId=slides&amp;amp;amp;confId=1 GRASS goes web: PyWPS] - J. Cepicky 2006&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Linking to other languages]]&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=WinGRASS_6_Current_Status&amp;diff=7702</id>
		<title>WinGRASS 6 Current Status</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=WinGRASS_6_Current_Status&amp;diff=7702"/>
		<updated>2008-10-19T21:23:05Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: /* Won't fix (at least not immediately) */  Status update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
See also '''[http://trac.osgeo.org/grass/wiki/BuildingOnWindows http://trac.osgeo.org/grass/wiki/BuildingOnWindows]'''&lt;br /&gt;
&lt;br /&gt;
This page describes the current status of winGRASS development:&lt;br /&gt;
* Precompiled winGRASS/Cygwin packages are available for [http://grass.itc.it/grass63/binary/mswindows/cygwin/ GRASS 6.3], &lt;br /&gt;
* native winGRASS packages [http://geog-pc40.ulb.ac.be/grass/wingrass/ GRASS 6.3],&lt;br /&gt;
* and the last native winGRASS [http://download.osgeo.org/grass/grass63/binary/mswindows/ Self Contained Package].&lt;br /&gt;
&lt;br /&gt;
== Current status - Summary ==&lt;br /&gt;
&lt;br /&gt;
The native windows port of GRASS is slowly coming to a stage where it can be considered beta status. All main functions seem to work, but much more testing is needed. The port is of the current cvs branch GRASS 6.3. There are no ports of earlier versions.&lt;br /&gt;
&lt;br /&gt;
The general idea is to reach a point where GRASS runs in Windows without any kind of unix emulation. Currently, this is possible, but limits the use to compiled modules as scripts are all of unix-shell type and cannot run within a Windows cmd.exe environment without a series of unix tools such as a shell, awk, sed, etc. So in order to run such scripts a collection of unix-like tools needs to be installed, such as Msys or Gnuwin32+Shell.&lt;br /&gt;
&lt;br /&gt;
Another major feature not available in the windows version are the old-style interactive X monitors (i.e. the x0, PNG, PS, Cairo, etc, monitors opened with '&amp;lt;tt&amp;gt;d.mon&amp;amp;nbsp;x0&amp;lt;/tt&amp;gt;'). Only direct rendering works currently. Display is thus &amp;quot;limited&amp;quot; to the Tcl/Tk and wxPython GUIs (the latter might still need some cleanup of unix-specific code). Modules like i.points and d.zoom will not work (see [[#Known_Issues]]).&lt;br /&gt;
&lt;br /&gt;
== Installing binary snapshots ==&lt;br /&gt;
&lt;br /&gt;
Regular binary snapshots for windows are available [http://geog-pc40.ulb.ac.be/grass/wingrass/ here]. To install them, just download and unzip. In order to be able to use the graphical user interface, you also have to download and install [http://www.activestate.com/products/activetcl/ ActiveState Tcl].&lt;br /&gt;
&lt;br /&gt;
You can then launch the GRASS GUI by clicking on the grass63.bat which is in c:\grass\bin\ (or wherever you unzipped the package). This should launch the GUI which gives you access to all GRASS modules.&lt;br /&gt;
&lt;br /&gt;
If you like the command line, you can launch Windows' cmd.exe via Start-&amp;gt;Run-&amp;gt;cmd.exe. Then type 'c:\grass\bin\grass63.bat -text' to launch grass without the GUI. If you want to access the GUI at a later stage, just type 'gis.m'.&lt;br /&gt;
&lt;br /&gt;
If you want to have access to shell scripts, you also have to install [http://sourceforge.net/project/downloading.php?groupname=mingw&amp;amp;filename=MSYS-1.0.11-2004.04.30-1.exe Msys] and then adapt the grass63.bat script according to the examples in the file.&lt;br /&gt;
&lt;br /&gt;
== Compiling by yourself ==&lt;br /&gt;
&lt;br /&gt;
(based on work from Paul Kelly - [http://lists.osgeo.org/pipermail/grass-dev/2006-December/028097.html his message])&lt;br /&gt;
&lt;br /&gt;
... or see new [http://www.webalice.it/marco.pasetti/grass/BuildFromSource.html GRASS Windows Native Binary Building Guide]&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
* To compile winGRASS natively, you need the following additional libraries: ''libpng, PROJ.4, GDAL, Zlib, XDR''. They are available in a gzipped tar file (to get started quickly): http://www.stjohnspoint.co.uk/grass/ (get wingrass-extralibs.tar.gz).&lt;br /&gt;
* Additionally, you need [http://www.mingw.org/download.shtml Msys &amp;amp; MingW] (current version)&lt;br /&gt;
* [http://www.mingw.org/MinGWiki/index.php/bison bison]&lt;br /&gt;
* [http://www.mingw.org/MinGWiki/index.php/flex flex]&lt;br /&gt;
&lt;br /&gt;
Decompressing bison and flex in the root msys directory should position the files in the correct directories.&lt;br /&gt;
&lt;br /&gt;
'''Optionally:'''&lt;br /&gt;
* Freetype&lt;br /&gt;
* FFTW&lt;br /&gt;
* PDCurses&lt;br /&gt;
&lt;br /&gt;
''TODO: is PDCurses really optionally?''&lt;br /&gt;
&lt;br /&gt;
=== Configuration and compilation ===&lt;br /&gt;
&lt;br /&gt;
The prefix where you untar that file you will need to supply to the GRASS configure as:&lt;br /&gt;
&lt;br /&gt;
      --with-includes=prefix --with-libs=prefix&lt;br /&gt;
&lt;br /&gt;
Before compilation, you need to set your path in msys in order to add the path to the lib/ and bin/ directories of Paul's tarball before compiling. You might also need to edit the first few lines of the gdal-config script in the bin/ directory, to reflect the path where it is actually installed.&lt;br /&gt;
&lt;br /&gt;
You also have to erase $(MANDIR) $(MANPAGES) from line 13 of man/Makefile, i.e. 'default: $(MANDIR) $(MANPAGES)' -&amp;gt; 'default:'.&lt;br /&gt;
&lt;br /&gt;
If you get an error such as 'cannot open file `/msys/share/bison/m4sugar/m4sugar.m4': No such file or directory', one solution is to move around the msys bison installation a bit, so that m4sugar.m4 is available in the indicated path.&lt;br /&gt;
&lt;br /&gt;
A working configure line is:&lt;br /&gt;
      ./configure --prefix=c:/grass --bindir=c:/grass/bin \&lt;br /&gt;
      --with-includes=/c/grass/forgrass/include \&lt;br /&gt;
      --with-libs=/c/grass/forgrass/lib --with-cxx --without-jpeg --without-tiff \&lt;br /&gt;
      --without-postgres --with-opengl=windows --without-fftw --without-x \&lt;br /&gt;
      --enable-shared=yes --with-tcltk-includes=/c/tcl/include \&lt;br /&gt;
      --with-tcltk-libs=/c/tcl/bin&lt;br /&gt;
&lt;br /&gt;
The configure line used for the current binary snapshots can be seen [http://geog-pc40.ulb.ac.be/grass/wingrass/winconfig.log here].&lt;br /&gt;
&lt;br /&gt;
Compile with make.&lt;br /&gt;
&lt;br /&gt;
After compiling you should copy libxdr.dll, libproj.dll, libpng.dll, libgdal-1.dll and libz.dll.1.2.3 into the GRASS lib directory and all the GDAL and PROJ .exe files in the bin directory into the GRASS bin directory, and then you have a more or less self-contained GRASS distribution.&lt;br /&gt;
&lt;br /&gt;
For the GUI, including for displaying anything, you need to install [http://www.activestate.com/downloads/ Activestate Tcl/Tk] 8.4.13 (in c:\tcl).&lt;br /&gt;
&lt;br /&gt;
=== Nullsoft installer ===&lt;br /&gt;
&lt;br /&gt;
See http://trac.osgeo.org/grass/browser/grass/branches/develbranch_6/mswindows&lt;br /&gt;
&lt;br /&gt;
[[Image:Wingrass63 installer1.jpg|220px|New winGRASS installer 1]]&lt;br /&gt;
[[Image:Wingrass63 installer2.jpg|220px|New winGRASS installer 2]]&lt;br /&gt;
[[Image:Wingrass63 installer3.jpg|220px|New winGRASS installer 3]]&lt;br /&gt;
&lt;br /&gt;
== Known Issues  ==&lt;br /&gt;
&lt;br /&gt;
See also [http://www.nabble.com/forum/Search.jtp?query=wingrass&amp;amp;sort=date&amp;amp;local=y&amp;amp;forum=1200 GRASS Mailing list archives] and the compilation error log [http://geog-pc40.ulb.ac.be/grass/wingrass/winmakeerror.log here].&lt;br /&gt;
&lt;br /&gt;
=== Won't fix (at least not immediately) ===&lt;br /&gt;
&lt;br /&gt;
Issues listed here are rather impossible to fix due to the different nature of native Windows. Or, lend us a hand and let's try harder!&lt;br /&gt;
&lt;br /&gt;
* No monitors&lt;br /&gt;
&lt;br /&gt;
This means that you cannot launch any monitor launched with d.mon (x0, PNG, PS, etc). The only way you can render is directly to a file. But you cannot directly display to screen from the command line. This will be solved in GRASS 7 with a new rendering system and possibly via the new wxgrass GUI. So no work will probably be put into this until then. &lt;br /&gt;
&lt;br /&gt;
The absence of monitors also makes impossible the use of interactive modules based on these monitors, such as:&lt;br /&gt;
&lt;br /&gt;
** i.class&lt;br /&gt;
** i.ortho.photo/photo.2image&lt;br /&gt;
** i.ortho.photo/photo.2target&lt;br /&gt;
** i.points&lt;br /&gt;
** i.vpoints&lt;br /&gt;
&lt;br /&gt;
i.points and i.vpoints have already been replaced by the gis.m georectifier module (File -&amp;gt; Georectify). In replacement of i.class you can digitize training areas with v.digit. This will not however, give you all the information i.class provides, such as the histogram of the region, the statistics and the display of matches. These modules will have to be rewritten to clearly separate display and backend parts, so that the backend can be run on the command line or from any GUI frontend. '''Volunteers needed.'''&lt;br /&gt;
&lt;br /&gt;
Another module affected is d.vect.thematic which uses monitors. This will hopefully be replaced by a C-version in a not too far future.&lt;br /&gt;
&lt;br /&gt;
* Scripts need *nix-like shell&lt;br /&gt;
&lt;br /&gt;
All current GRASS scripts are written in shell language. This means they need a shell, and several related tools (awk, sed, etc), to function. This means that whoever wants to be able to run these scripts has to install a shell with these tools. Currently recommended is [http://sourceforge.net/project/downloading.php?groupname=mingw&amp;amp;filename=MSYS-1.0.11-2004.04.30-1.exe Msys] as this is a simple install of a package containing everything which is needed.&lt;br /&gt;
&lt;br /&gt;
In 7.0, these scripts have been rewritten in Python, thus totally eliminating the need for any shell.&lt;br /&gt;
&lt;br /&gt;
=== Platform specific issues ===&lt;br /&gt;
&lt;br /&gt;
==== XP/2000 ====&lt;br /&gt;
nothing known specifically related to MS Windows XP/2000&lt;br /&gt;
&lt;br /&gt;
==== Vista ====&lt;br /&gt;
&lt;br /&gt;
* sometimes r.patch fails: http://trac.osgeo.org/grass/ticket/118&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== ToDo ===&lt;br /&gt;
&lt;br /&gt;
==== Installer ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;change the Uninstall icon&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;fix the language errors in the StartMenu link's descriptions&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;change the name of the South-Dakota sample database to Spearfish60&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;add a GRASS Command Line link (cmd.exe) into the GRASS StartMenu group&amp;lt;/strike&amp;gt;&lt;br /&gt;
* create a GRASS Addons installer or integrate the GRASS Addons in the current installer as downloadable options&lt;br /&gt;
&lt;br /&gt;
==== Dependencies ====&lt;br /&gt;
&lt;br /&gt;
===== GRASS Dependencies =====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;add the Indipendent JPEG support to GRASS *&amp;lt;/strike&amp;gt;&lt;br /&gt;
* add the FFMPEG support in GRASS (reports an error in building OGSF library; probably needs to specify -lavutil in gcc command) ***&lt;br /&gt;
* add the NLS support in GRASS (needs gettext)&lt;br /&gt;
* add the wxWidgets support in GRASS (for the wxPython GUI v.digit replacement)&lt;br /&gt;
&lt;br /&gt;
===== GDAL Dependencies =====&lt;br /&gt;
&lt;br /&gt;
* add the ECW support in GDAL */**&lt;br /&gt;
* add the JPEG2000 support in GDAL (through Jasper or Kadaku *) **&lt;br /&gt;
* add the OGDI support in GDAL *&lt;br /&gt;
* add the MrSID support in GDAL */**&lt;br /&gt;
&lt;br /&gt;
===== GRASS and GDAL Dependencies =====&lt;br /&gt;
&lt;br /&gt;
* add the Xerces support in both GDAL and GRASS *&lt;br /&gt;
* add the ODBC support in both GDAL and GRASS */**&lt;br /&gt;
* add the MySQL support in both GDAL and GRASS */**&lt;br /&gt;
&lt;br /&gt;
===== Miscellaneus Dependencies =====&lt;br /&gt;
&lt;br /&gt;
* add the OpenSSL support in both PostgreSQL and SQLite *&lt;br /&gt;
* &amp;lt;strike&amp;gt;add the AVCE00 tools (build from source in minGW)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;add the E00compr tools (build from source in minGW)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;add the GPSBabel tool (use prebuilt binaries from GPSBabel Web Site)&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; needs to build related libraries from source in MinGW&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; needs to check the licences first&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;***&amp;lt;/nowiki&amp;gt; FFMPEG has been already succesfully built on MinGW&lt;br /&gt;
&lt;br /&gt;
==== Internal Libraries ====&lt;br /&gt;
&lt;br /&gt;
* parser: find out why launching a module from the command line without parameters does not call module GUI&lt;br /&gt;
&lt;br /&gt;
==== Vector modules ====&lt;br /&gt;
&lt;br /&gt;
* v.in.ascii crashes on files with irregular line length (see [http://lists.osgeo.org/pipermail/grass-dev/2008-February/035268.html this thread])&lt;br /&gt;
&lt;br /&gt;
==== Raster modules ====&lt;br /&gt;
* &amp;lt;strike&amp;gt;r.terraflow does not compile&amp;lt;/strike&amp;gt; fix backported 27/3/2008&lt;br /&gt;
: This seems to be due to the use of the function getrusage() which is not supported under MinGW. Check this octave patch [http://osdir.com/ml/gnu.octave.maintainers/2006-03/msg00083.html email thread].&lt;br /&gt;
&lt;br /&gt;
==== Other modules ====&lt;br /&gt;
* r.li moduels do not compile&lt;br /&gt;
: --HB:  ''why not? what's the error?''&lt;br /&gt;
&lt;br /&gt;
==== GRASS Addons ====&lt;br /&gt;
* compile the GRASS Addons&lt;br /&gt;
&lt;br /&gt;
==== TclTk issues ====&lt;br /&gt;
&lt;br /&gt;
* var=val style argument is not valid for batch files: equal sign is a separator like a space. http://support.microsoft.com/?kbid=71247 http://www.gatago.com/alt/msdos/batch/17358926.html&lt;br /&gt;
** Could you give an example of where this is a problem ?&lt;br /&gt;
* file command returns bad code (catch is needed): http://sources.redhat.com/ml/insight/2003-q1/msg00079.html&lt;br /&gt;
** catch {file copy}&lt;br /&gt;
** catch {file delete}&lt;br /&gt;
** catch {file rename -force} does not work. Delete old file first: catch {file delete}; catch {file rename}&lt;br /&gt;
** exec a batch file doing redirection (&amp;gt;&amp;amp;2, 2&amp;gt;&amp;amp;1)&lt;br /&gt;
* no -permissions file attributes&lt;br /&gt;
** catch {file attributes -permissions}&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous ====&lt;br /&gt;
&lt;br /&gt;
* metacharacter escape in &amp;quot;sh -c '$cmd'&amp;quot;&lt;br /&gt;
* modules not working: &amp;lt;strike&amp;gt;v.neighbors, v.kernel, r.cost&amp;lt;/strike&amp;gt;&lt;br /&gt;
* &amp;lt;strike&amp;gt;Cannot open Help pages.&amp;lt;/strike&amp;gt;&lt;br /&gt;
* Have to type &amp;quot;exit&amp;quot; in the console to save ~/.grassrc file. Then, close gis.m to finish the session.&lt;br /&gt;
* A previous installation of grass under cygwin is likely to cause problems with WinGrass. Follow the directions to remove cygwin at http://cygwin.com/faq/faq-nochunks.html#faq.setup.uninstall-all&lt;br /&gt;
&lt;br /&gt;
The following items cannot be fixed in the near future:&lt;br /&gt;
** can't read &amp;quot;_data(.gronsole.gronsole,4,donecmd)&amp;quot;: no such element in array error&lt;br /&gt;
*** Could you be more precise about this error ? When does it occur ?&lt;br /&gt;
&lt;br /&gt;
== Dealing with shell scripts or .bat files ==&lt;br /&gt;
&lt;br /&gt;
Bourne shell scripts require MSys (or some other Bourne shell), but you don't need to start GRASS from MSys.&lt;br /&gt;
&lt;br /&gt;
The main issue with scripts is that Windows doesn't understand the &amp;quot;#!&amp;quot; notation used to specify the interpreter.&lt;br /&gt;
&lt;br /&gt;
All of the supplied scripts in $GISBASE/scripts have a corresponding .bat file in $GISBASE/bin which invokes script via %GRASS_SH%. This allows you to run those scripts from the Windows command prompt.&lt;br /&gt;
&lt;br /&gt;
If you write scripts of your own, you need to either add a corresponding .bat file, or give the script a .sh extension and associate that with the shell, e.g. via the ftype and assoc commands. You can use the PATHEXT variable to eliminate the need to type the extension.&lt;br /&gt;
&lt;br /&gt;
== Other libraries ==&lt;br /&gt;
&lt;br /&gt;
GDAL&lt;br /&gt;
* lib/gis/OBJ.*/fmode.o is needed for any GRASS related modules.&lt;br /&gt;
* modified ltmain.sh to install binary files from wrapper scripts.&lt;br /&gt;
* see also [http://trac.osgeo.org/gdal/wiki/BuildingWithMinGW GDAL Building With MinGW]&lt;br /&gt;
&lt;br /&gt;
== Related efforts ==&lt;br /&gt;
&lt;br /&gt;
* http://wiki.osgeo.org/index.php/OSGeo_Win32_Installer&lt;br /&gt;
&lt;br /&gt;
[[Category: Development]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_and_Python&amp;diff=7648</id>
		<title>GRASS and Python</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_and_Python&amp;diff=7648"/>
		<updated>2008-10-08T12:26:05Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: Replace example script with real-world case (d.shadedmap) using &amp;quot;grass&amp;quot; module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''(for discussions on the new GRASS GUI, see [[GRASS GUI|here]])''&lt;br /&gt;
&lt;br /&gt;
==Python SIGs==&lt;br /&gt;
Python Special Interest Groups are focused collaborative efforts to develop, improve, or maintain specific Python resources. Each SIG has a charter, a coordinator, a mailing list, and a directory on the Python website. SIG membership is informal, defined by subscription to the SIG's mailing list. Anyone can join a SIG, and participate in the development discussions via the SIG's mailing list. Below is the list of currently active Python SIGs, with links to their resources. &lt;br /&gt;
&lt;br /&gt;
See more at http://www.python.org/community/sigs/&lt;br /&gt;
&lt;br /&gt;
==Writing Python scripts in GRASS==&lt;br /&gt;
&lt;br /&gt;
Python is a programming language which is more powerful than shell scripting but easier and more forgiving than C.&lt;br /&gt;
The Python script can contain simple module description definitions which will be processed with [http://grass.ibiblio.org/grass63/manuals/html63_user/g.parser.html g.parser], as shown in the example below. In this way with no extra coding a GUI can be built, inputs checked, and a skeleton help page can be generated automatically. In addition it adds links to the GRASS message translation system.&lt;br /&gt;
For code which needs access to the power of C, you can access the GRASS C library functions via the SWIG interface.&lt;br /&gt;
&lt;br /&gt;
Have a look at [http://trac.osgeo.org/grass/browser/grass/trunk/SUBMITTING_PYTHON SUBMITTING_PYTHON].&lt;br /&gt;
&lt;br /&gt;
=== Running external commands from Python ===&lt;br /&gt;
For information on running external commands from Python, see:&lt;br /&gt;
http://docs.python.org/lib/module-subprocess.html&lt;br /&gt;
&lt;br /&gt;
Avoid using the older os.* functions. Section 17.1.3 lists equivalents&lt;br /&gt;
using the Popen() interface, which is more robust (particularly on&lt;br /&gt;
Windows).&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
Example of Python script, which is processed by g.parser:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 #&lt;br /&gt;
 ############################################################################&lt;br /&gt;
 #&lt;br /&gt;
 # MODULE:	d.shadedmap&lt;br /&gt;
 # AUTHOR(S):	Unknown; updated to GRASS 5.7 by Michael Barton&lt;br /&gt;
 #		Converted to Python by Glynn Clements&lt;br /&gt;
 # PURPOSE:	Uses d.his to drape a color raster over a shaded relief map&lt;br /&gt;
 # COPYRIGHT:	(C) 2004,2008 by the GRASS Development Team&lt;br /&gt;
 #&lt;br /&gt;
 #		This program is free software under the GNU General Public&lt;br /&gt;
 #		License (&amp;gt;=v2). Read the file COPYING that comes with GRASS&lt;br /&gt;
 #		for details.&lt;br /&gt;
 #&lt;br /&gt;
 #############################################################################&lt;br /&gt;
 &lt;br /&gt;
 #%Module&lt;br /&gt;
 #% description: Drapes a color raster over a shaded relief map using d.his&lt;br /&gt;
 #%End&lt;br /&gt;
 #%option&lt;br /&gt;
 #% key: reliefmap&lt;br /&gt;
 #% type: string&lt;br /&gt;
 #% gisprompt: old,cell,raster&lt;br /&gt;
 #% description: Name of shaded relief or aspect map&lt;br /&gt;
 #% required : yes&lt;br /&gt;
 #%end&lt;br /&gt;
 #%option&lt;br /&gt;
 #% key: drapemap&lt;br /&gt;
 #% type: string&lt;br /&gt;
 #% gisprompt: old,cell,raster&lt;br /&gt;
 #% description: Name of raster to drape over relief map&lt;br /&gt;
 #% required : yes&lt;br /&gt;
 #%end&lt;br /&gt;
 #%option&lt;br /&gt;
 #% key: brighten&lt;br /&gt;
 #% type: integer&lt;br /&gt;
 #% description: Percent to brighten&lt;br /&gt;
 #% options: -99-99&lt;br /&gt;
 #% answer: 0&lt;br /&gt;
 #%end&lt;br /&gt;
 &lt;br /&gt;
 import sys&lt;br /&gt;
 import grass&lt;br /&gt;
 &lt;br /&gt;
 def main():&lt;br /&gt;
     drape_map = options['drapemap']&lt;br /&gt;
     relief_map = options['reliefmap']&lt;br /&gt;
     brighten = options['brighten']&lt;br /&gt;
     ret = grass.run_command(&amp;quot;d.his&amp;quot;, h_map = drapemap,  i_map = relief_map, brighten = brighten)&lt;br /&gt;
     sys.exit(ret)&lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
     options, flags = grass.parser()&lt;br /&gt;
     main()&lt;br /&gt;
&lt;br /&gt;
==Python extensions for GRASS GIS==&lt;br /&gt;
=== wxPython GUI development for GRASS ===&lt;br /&gt;
&lt;br /&gt;
* See the [[GRASS GUI]] wiki page&lt;br /&gt;
&lt;br /&gt;
=== Python-SWIG-GRASS interface ===&lt;br /&gt;
There is a prototype GRASS-SWIG interface available (thanks to Sajith VK), find it in GRASS 6-CVS: '''swig/python/'''. Draft documentation is [http://mpa.itc.it/markus/grass63progman/swig/ here]. It now wraps both raster and vector data C functions plus the general GIS (G_*()) functions.&lt;br /&gt;
&lt;br /&gt;
Background: [http://www.swig.org SWIG] (Simplified Wrapper and Interface Generator) is: &lt;br /&gt;
&lt;br /&gt;
* A compiler that turns ANSI C/C++ declarations into scripting language interfaces.&lt;br /&gt;
* Completely automated (produces a fully working Python extension module). &lt;br /&gt;
* Language neutral. SWIG can also target Tcl, Perl, Guile, MATLAB (try PyLab+Matplotlib from python), etc... &lt;br /&gt;
* Attempts to eliminate the tedium of writing extension modules.&lt;br /&gt;
&lt;br /&gt;
==== Python-SWIG examples ====&lt;br /&gt;
&lt;br /&gt;
* [[PythonSwigExamples|More complicated examples]]&lt;br /&gt;
&lt;br /&gt;
Sample script for raster access (use within GRASS, Spearfish session):&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import python_grass6 as g6lib&lt;br /&gt;
 &lt;br /&gt;
 input = 'roads'&lt;br /&gt;
 mapset = 'PERMANENT'&lt;br /&gt;
 &lt;br /&gt;
 # initialize&lt;br /&gt;
 g6lib.G_gisinit(&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
 infd = g6lib.G_open_cell_old(input, mapset)&lt;br /&gt;
 cell = g6lib.G_allocate_cell_buf()&lt;br /&gt;
 &lt;br /&gt;
 rown=0&lt;br /&gt;
 # the API still needs error checking to be added&lt;br /&gt;
 while 1:&lt;br /&gt;
     myrow = g6lib.G_get_map_row_nomask(infd, cell, rown)&lt;br /&gt;
     print rown,myrow[0:10]&lt;br /&gt;
     rown = rown+1&lt;br /&gt;
     if rown==476:break&lt;br /&gt;
 &lt;br /&gt;
 g6lib.G_close_cell(infd)&lt;br /&gt;
 g6lib.G_free(cell)&lt;br /&gt;
&lt;br /&gt;
Sample script for vector access (use within GRASS, Spearfish session):&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import python_grass6 as g6lib&lt;br /&gt;
 &lt;br /&gt;
 input = 'soils'&lt;br /&gt;
 mapset = 'PERMANENT'&lt;br /&gt;
 &lt;br /&gt;
 # initialize&lt;br /&gt;
 g6lib.G_gisinit(&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
 # define map structure&lt;br /&gt;
 map = g6lib.Map_info()&lt;br /&gt;
 &lt;br /&gt;
 # define open level (level 2: topology)&lt;br /&gt;
 g6lib.Vect_set_open_level (2)&lt;br /&gt;
 &lt;br /&gt;
 # open existing map&lt;br /&gt;
 g6lib.Vect_open_old(map, input, mapset)&lt;br /&gt;
 &lt;br /&gt;
 # query&lt;br /&gt;
 print 'Vect is 3D: ', g6lib.Vect_is_3d (map)&lt;br /&gt;
 print 'Vect DB links: ', g6lib.Vect_get_num_dblinks(map)&lt;br /&gt;
 print 'Map Scale:  1:', g6lib.Vect_get_scale(map)&lt;br /&gt;
 &lt;br /&gt;
 # close map&lt;br /&gt;
 g6lib.Vect_close(map)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== TODO ====&lt;br /&gt;
&lt;br /&gt;
* Implement modules support in a Python class using --interface-description and a Python-XML parser. This should be a generic class with module's name as parameter, returning back an object which describes the module (description, flags, parameters, status of not/required). See [http://freegis.org/cgi-bin/viewcvs.cgi/grass6/gui/wxpython/ GRASS 6 wxPython interface] for inspiration. Important is to auto-generate the GRASS-Python class at compile time with a Python script.&lt;br /&gt;
&lt;br /&gt;
=== Python-GRASS add-ons ===&lt;br /&gt;
&lt;br /&gt;
Stand-alone addons:&lt;br /&gt;
&lt;br /&gt;
# Jáchym Čepický's G-ps.map, a GUI to typeset printable maps with ps.map (http://193.84.38.2/~jachym/index.py?cat=gpsmap)&lt;br /&gt;
# Jáchym Čepický's v.pydigit, a GUI to v.edit (http://les-ejk.cz/?cat=vpydigit)&lt;br /&gt;
# Jáchym Čepický's PyWPS, GRASS-Web Processing Service (http://pywps.wald.intevation.org)&lt;br /&gt;
&lt;br /&gt;
=== Using Grass gui.tcl in python ===&lt;br /&gt;
&lt;br /&gt;
Here is some example code to use the grass automatically generated guis in python code. This could (should) all be bundled up and abstracted away so that the implementation can be replaced later.&lt;br /&gt;
&lt;br /&gt;
 import Tkinter&lt;br /&gt;
 import os&lt;br /&gt;
 &lt;br /&gt;
 # Startup (once):&lt;br /&gt;
 &lt;br /&gt;
 tk = Tkinter.Tk()&lt;br /&gt;
 tk.eval (&amp;quot;wm withdraw .&amp;quot;)&lt;br /&gt;
 tk.eval (&amp;quot;source $env(GISBASE)/etc/gui.tcl&amp;quot;)&lt;br /&gt;
 # Here you could do various things to change what the gui does&lt;br /&gt;
 # See gui.tcl and README.GUI&lt;br /&gt;
 &lt;br /&gt;
 # Make a gui (per dialog)&lt;br /&gt;
 # This sets up a window for the command.&lt;br /&gt;
 # This can be different to integrate with tkinter:&lt;br /&gt;
 tk.eval ('set path &amp;quot;.dialog$dlg&amp;quot;')&lt;br /&gt;
 tk.eval ('toplevel .dialog$dlg')&lt;br /&gt;
 # Load the code for this command:&lt;br /&gt;
 fd = os.popen (&amp;quot;d.vect --tcltk&amp;quot;)&lt;br /&gt;
 gui = fd.read()&lt;br /&gt;
 # Run it&lt;br /&gt;
 tk.eval(gui)&lt;br /&gt;
 dlg = tk.eval('set dlg') # This is used later to get and set &lt;br /&gt;
 &lt;br /&gt;
 # Get the current command in the gui we just made:&lt;br /&gt;
 currentcommand = tk.eval (&amp;quot;dialog_get_command &amp;quot; + dlg)&lt;br /&gt;
 &lt;br /&gt;
 # Set the command in the dialog we just made:&lt;br /&gt;
 tk.eval (&amp;quot;dialog_set_command &amp;quot; + dlg + &amp;quot; {d.vect map=roads}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== Programming ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.poromenos.org/tutorials/python Quick Python tutorial] for programmers of other languages&lt;br /&gt;
: [http://wiki.python.org/moin/BeginnersGuide/Programmers More Python tutorials] for programmers&lt;br /&gt;
&lt;br /&gt;
* [http://www.python.org/dev/peps/pep-0008/ Python programming style guide]&lt;br /&gt;
&lt;br /&gt;
* GRASS-SWIG interface http://download.osgeo.org/grass/grass6_progman/swig/ based on SWIG http://www.swig.org/&lt;br /&gt;
&lt;br /&gt;
* PyWPS, GRASS-Web Processing Service http://pywps.wald.intevation.org&lt;br /&gt;
&lt;br /&gt;
* SIP (C/C++ bindings generator) http://directory.fsf.org/all/Python-SIP.html&lt;br /&gt;
* [http://www.cython.org/ Cython] - C-Extensions for Python (compile where speed is needed)&lt;br /&gt;
&lt;br /&gt;
* Python and OSGeo:&lt;br /&gt;
** [http://wiki.osgeo.org/wiki/OSGeo_Python_Library OSGeo Python Library]&lt;br /&gt;
&lt;br /&gt;
* Python and GDAL/OGR:&lt;br /&gt;
** [http://mapserver.gis.umn.edu/community/conferences/MUM3/workshop/python Open Source Python GIS Hacks Mum'03]&lt;br /&gt;
** http://hobu.biz/software/OSGIS_Hacks - Python OSGIS Hacks '05&lt;br /&gt;
** http://zcologia.com/news/categorylist_html?cat_id=8&lt;br /&gt;
** http://www.perrygeo.net/wordpress/?p=4&lt;br /&gt;
&lt;br /&gt;
* Python bindings to PROJ:&lt;br /&gt;
** http://www.cdc.noaa.gov/people/jeffrey.s.whitaker/python/pyproj.html&lt;br /&gt;
&lt;br /&gt;
* [http://rpy.sourceforge.net/ RPy] - Python interface to the R-statistics programming language&lt;br /&gt;
&lt;br /&gt;
* [http://gispython.org/ Open Source GIS-Python Laboratory]&lt;br /&gt;
&lt;br /&gt;
* Other external projects&lt;br /&gt;
** [http://www.scipy.org Scientific Python]&lt;br /&gt;
** [http://wiki.python.org/moin/NumericAndScientific Numeric and Scientific]&lt;br /&gt;
** [http://w3.pppl.gov/~hammett/comp/python/python.html Info on Python for Scientific Applications]&lt;br /&gt;
&lt;br /&gt;
=== Presentations ===&lt;br /&gt;
&lt;br /&gt;
From FOSS4G2006:&lt;br /&gt;
* [http://www.foss4g2006.org/materialDisplay.py?contribId=136&amp;amp;amp;sessionId=48&amp;amp;amp;materialId=slides&amp;amp;amp;confId=1 A Python sweeps in the GRASS] - A. Frigeri 2006&lt;br /&gt;
* [http://www.foss4g2006.org/materialDisplay.py?contribId=67&amp;amp;amp;sessionId=48&amp;amp;amp;materialId=slides&amp;amp;amp;confId=1 GRASS goes web: PyWPS] - J. Cepicky 2006&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Linking to other languages]]&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Replacement_raster_format&amp;diff=7626</id>
		<title>Replacement raster format</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Replacement_raster_format&amp;diff=7626"/>
		<updated>2008-10-04T07:43:18Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: Disadvantages of tiled storage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MoveToTrac}}&lt;br /&gt;
  GRASS's long-standing raster format is overdue for a major overhaul.&amp;lt;BR&amp;gt;&lt;br /&gt;
  Below you will find some ideas and roadmaps for future work.&amp;lt;BR&amp;gt;&lt;br /&gt;
  The idea of this page is to collect ideas and flesh out a&lt;br /&gt;
  specification so that when the change occurs, all the&lt;br /&gt;
  components will be in place, pitfalls expected, and&lt;br /&gt;
  the implimentation, when it comes, quick and painless. Most&lt;br /&gt;
  importanly it can serve to keep interested parties informed&lt;br /&gt;
  and working together instead of in parallel forks.&amp;lt;BR&amp;gt;&lt;br /&gt;
  Any changes to the data format will necessitate a bump in&lt;br /&gt;
  major version number (i.e. from GRASS 6 to GRASS 7) so if&lt;br /&gt;
  possible changes should happen in the same development cycle,&lt;br /&gt;
  and relatively minor changes should be held back in&lt;br /&gt;
  experimental status until a major change is committed.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
see also [[GRASS 7 ideas collection#Raster]]&lt;br /&gt;
&lt;br /&gt;
==== Core raster format ====&lt;br /&gt;
''Lead developer: Glynn Clements''&lt;br /&gt;
&lt;br /&gt;
* Storage in tiles instead of by row.&lt;br /&gt;
** Reasoning:  Glynn said on the mailing list: &amp;quot;In most cases, single-level tiled storage will give you close to the same performance with a lot less complexity.&amp;quot;&lt;br /&gt;
** Function needed to check whether tiles are all null, or all the same value.&lt;br /&gt;
** What tile size should be used? Could be user/program specified, or standard value of something like 64x64. If there isn't a fixed value then there should be utility program that can convert tiled rasters to different tile sizes. - &lt;br /&gt;
*** However, row-oriented storage has the advantage that you can easily skip entire rows when downsampling. Using e.g. 64x1 &amp;quot;tiles&amp;quot; would provide both optimisations, but at the expense of reduced compression, as you need a pointer (8 bytes) for each tile, and the compression has to be restarted for each tile.&lt;br /&gt;
[[User:Ferrouswheel|Ferrouswheel]]&lt;br /&gt;
* Merge NULL file into main data array.&lt;br /&gt;
&lt;br /&gt;
==== Directory structure ====&lt;br /&gt;
&lt;br /&gt;
* Centralize map components in &amp;quot;&amp;lt;tt&amp;gt;$MAPSET/raster/$MAPNAME/*&amp;lt;/tt&amp;gt;&amp;quot; instead of many &amp;quot;&amp;lt;tt&amp;gt;$MAPSET/cell/$MAPNAME&amp;lt;/tt&amp;gt;&amp;quot;, etc. directories.&lt;br /&gt;
&lt;br /&gt;
Many library functions and modules will need to be updated.&lt;br /&gt;
The GRASS 6 vector format has already been ported to this structure.&lt;br /&gt;
&lt;br /&gt;
* demo 2-way conversion scripts: [http://wald.intevation.org/tracker/index.php?func=detail&amp;amp;aid=372&amp;amp;group_id=21&amp;amp;atid=205 Gforge patch #372]&lt;br /&gt;
&lt;br /&gt;
==== Meta-data support ====&lt;br /&gt;
&lt;br /&gt;
The existing raster meta-data handling is rather weak.&lt;br /&gt;
(currently stored in &amp;lt;tt&amp;gt;$MAPSET/hist/$MAPNAME&amp;lt;/tt&amp;gt;)&lt;br /&gt;
Total replacement will be the best option.&lt;br /&gt;
&lt;br /&gt;
Brad Douglas suggests:&lt;br /&gt;
  ''It would be very advantageous to at least support metadata as specified&lt;br /&gt;
  in [http://www.fgdc.gov/standards/projects/FGDC-standards-projects/csdgm_rs_ex/MetadataRemoteSensingExtens.pdf FGDC-STD-012-2002].&lt;br /&gt;
  XML is an ideal file format.''&lt;br /&gt;
&lt;br /&gt;
Nick Lawrence suggests:&lt;br /&gt;
The GIMP project is examining the concept of a general mult-layer bitmap format.&lt;br /&gt;
&lt;br /&gt;
[http://create.freedesktop.org/wiki/index.php/General_multilayered_bitmap_exchange_format OpenRaster - Create Wiki]&lt;br /&gt;
[http://pippin.gimp.org/OpenRaster/ OpenRaster Sandbox]&lt;br /&gt;
&lt;br /&gt;
==== Recent discussions ====&lt;br /&gt;
&lt;br /&gt;
* http://www.nabble.com/-GRASS5--Raster-files-suggestion%3A-new-directory-layout-td8588651.html&lt;br /&gt;
* http://lists.osgeo.org/pipermail/grass-dev/2008-April/036994.html&lt;br /&gt;
* http://lists.osgeo.org/pipermail/grass-dev/2008-April/037578.html&lt;br /&gt;
&lt;br /&gt;
Other suggestions:&lt;br /&gt;
* [[Time series in GRASS]] support&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_7_ideas_collection&amp;diff=7625</id>
		<title>GRASS 7 ideas collection</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_7_ideas_collection&amp;diff=7625"/>
		<updated>2008-10-04T07:33:39Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: Problems with allowing write access to other users' mapsets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MoveToTrac}}&lt;br /&gt;
== Maintenance of repository ==&lt;br /&gt;
&lt;br /&gt;
For grass7 development will be used svn-trunk, for grass6 development is used separated branch [https://svn.osgeo.org/grass/grass/branches/develbranch_6 develbranch_6].&lt;br /&gt;
&lt;br /&gt;
   Planning is continued here: http://trac.osgeo.org/grass/wiki/Grass7Planning&lt;br /&gt;
&lt;br /&gt;
== Terminology ==&lt;br /&gt;
&lt;br /&gt;
See [[GRASS 7 Terminology]].&lt;br /&gt;
&lt;br /&gt;
== API to access algorithms in modules ==&lt;br /&gt;
&lt;br /&gt;
We need to better expose the &amp;quot;knowledge&amp;quot; which is contained at module level. We want to have it accessible via API, exposed in various programming languages such as C, Python, Perl, Java, ..&lt;br /&gt;
&lt;br /&gt;
== Raster ==&lt;br /&gt;
&lt;br /&gt;
See also [[Replacement raster format]]&lt;br /&gt;
&lt;br /&gt;
=== Library ===&lt;br /&gt;
* allowing nulls to be embedded&lt;br /&gt;
* Split libgis into G_() part and Rast_() part&lt;br /&gt;
* Rewrite library from scratch. See [http://grass.itc.it/pipermail/grass-dev/2006-August/025025.html suggestions]&lt;br /&gt;
* Insert 'vertical' 2d rasters (e.g. [http://woodshole.er.usgs.gov/project-pages/longislandsound/images/Ghist_square2.jpg geophysical survey data])&lt;br /&gt;
* &amp;lt;strike&amp;gt;[http://freegis.org/cgi-bin/viewcvs.cgi/grass/gips/gip-0002.txt?rev=HEAD&amp;amp;content-type=text/vnd.viewcvs-markup GRASS raster &amp;quot;live links&amp;quot; via GDAL]&amp;lt;/strike&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
&lt;br /&gt;
==== rename ====&lt;br /&gt;
* rename r.in.gdal to r.import&lt;br /&gt;
* rename r.out.gdal to r.export&lt;br /&gt;
* rename r.volume 'data' parameter to something more standard like 'input' or 'map'&lt;br /&gt;
&lt;br /&gt;
==== remove ====&lt;br /&gt;
* Remove r.bitpattern since r.mapcalc does it more nicely now&lt;br /&gt;
* Remove r.in.arc and r.out.arc, '''if''' a [http://intevation.de/rt/webrt?serial_num=4897 related bug in r.in.gdal] is fixed. The [http://bugzilla.remotesensing.org/show_bug.cgi?id=1071 integer/floating point detection for AAIGrid driver in GDAL] was fixed after 1.3.2 release, so r.in.gdal and r.out.gdal should be enough now.&lt;br /&gt;
: see delta comment about r.out.tiff below, sometimes the simple stuff works best! --HB&lt;br /&gt;
&lt;br /&gt;
* remove '''r.resample''' and &amp;lt;strike&amp;gt;'''r.bilinear'''&amp;lt;/strike&amp;gt; in favor of '''r.resamp.interp'''&lt;br /&gt;
: TODO: double-check that r.resample is in fact fully replaced by 'r.resamp.interp's method=nearest'. ie check that an alternate useful method is not lost.&lt;br /&gt;
* &amp;lt;strike&amp;gt;remove '''r.univar.sh'''; newly implemented '''r.univar''' features cover it&amp;lt;/strike&amp;gt; '''done.'''&lt;br /&gt;
&lt;br /&gt;
* remove r.out.tiff. New C r.out.gdal should cover all it's option now (doublecheck!). See [http://intevation.de/rt/webrt?serial_num=3680 RT #3680] (starting with date Sun, Nov 26 2006 14:54:23).&lt;br /&gt;
: It might be worth keeping r.out.tiff! It makes a nice delta when things don't go well (eg [https://svn.qgis.org/trac/ticket/348 QGIS bug#348]) --HB&lt;br /&gt;
&lt;br /&gt;
* Remove remaining -v and -q flags for verbosity levels of modules.&lt;br /&gt;
&lt;br /&gt;
==== Merge ====&lt;br /&gt;
&lt;br /&gt;
* merge '''r.surf.idw''' and '''r.surf.idw2'''&lt;br /&gt;
: while r.surf.idw will only output CELL maps, it is Very Fast.&lt;br /&gt;
&lt;br /&gt;
* r.sum, r.mode, r.median, r.average, r.statistics, r.univar, r.univar2 - maybe they can be reduced to just r.statistics and r.univar? See [http://intevation.de/rt/webrt?serial_num=1848 RT #1848] and a [http://grass.itc.it/pipermail/grass-dev/2006-November/027665.html thread on the GRASS dev list]&lt;br /&gt;
&lt;br /&gt;
* r.resamp.rst: merge into r.resamp.interp to make resolution management identical to the other modules&lt;br /&gt;
&lt;br /&gt;
* r.in.wms and r.in.srtm into r.in.gdal thanks to native support for [http://www.gdal.org/frmt_wms.html WMS] and [http://www.gdal.org/frmt_various.html#SRTMHGT SRTM] in GDAL 1.5&lt;br /&gt;
* '''r.buffer''' and '''r.grow'''&lt;br /&gt;
&lt;br /&gt;
==== fix ====&lt;br /&gt;
* fix lseek() usage for Large File Support: see [http://grass.itc.it/pipermail/grass-dev/2006-December/028231.html list of affected modules]&lt;br /&gt;
* fix the raster map history management (truncating long history, odd storage). It should work like for vector maps in GRASS 6.&lt;br /&gt;
* r.volume centroids parameter only makes a level one vector with no attribute table; module should be updated to GRASS 6 vector library)&lt;br /&gt;
&lt;br /&gt;
==== Good coding practice ====&lt;br /&gt;
&lt;br /&gt;
* Input handling:&lt;br /&gt;
&lt;br /&gt;
 /* Define the different options */&lt;br /&gt;
 input1               = G_define_standard_option(G_OPT_R_INPUT) ;&lt;br /&gt;
 input1-&amp;gt;key          = _(&amp;quot;albedo&amp;quot;);&lt;br /&gt;
 input1-&amp;gt;description  =_(&amp;quot;Name of the Albedo map [0.0-1.0]&amp;quot;);&lt;br /&gt;
 input1-&amp;gt;answer       =_(&amp;quot;albedo&amp;quot;);&lt;br /&gt;
 input1-&amp;gt;guisection   = _(&amp;quot;Required&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
In here you can find G_define_standard_option(G_OPT_R_INPUT) assuming&lt;br /&gt;
already those:&lt;br /&gt;
   input1-&amp;gt;type       = TYPE_STRING;&lt;br /&gt;
   input1-&amp;gt;required   = YES;&lt;br /&gt;
   input1-&amp;gt;gisprompt  =_(&amp;quot;old,cell,raster&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
If your input is not required to run the module, you just create the&lt;br /&gt;
following line:&lt;br /&gt;
  input1-&amp;gt;required   = NO;&lt;br /&gt;
&lt;br /&gt;
* In a similar way, metadata/history storage:&lt;br /&gt;
&lt;br /&gt;
       G_short_history(result1, &amp;quot;raster&amp;quot;, &amp;amp;history);&lt;br /&gt;
       G_command_history(&amp;amp;history);&lt;br /&gt;
       G_write_history(result1,&amp;amp;history);&lt;br /&gt;
&lt;br /&gt;
* This is the standard incantation, but I have to find timestamp(), and&lt;br /&gt;
more details metadata maybe like sensor type for a start, or&lt;br /&gt;
source/origin of data... Can we make metadata having elements&lt;br /&gt;
(history-&amp;gt;processing, history-&amp;gt;timestamp, history-&amp;gt;source(or&lt;br /&gt;
history-&amp;gt;origin), etc?) then it could be filled up specifically.&lt;br /&gt;
&lt;br /&gt;
* Or color palettes application is nice:&lt;br /&gt;
&lt;br /&gt;
 /* Color table for biomass */&lt;br /&gt;
       G_init_colors(&amp;amp;colors);&lt;br /&gt;
       G_add_color_rule(0,0,0,0,1,255,255,255,&amp;amp;colors);&lt;br /&gt;
&lt;br /&gt;
* Changes (from Glynn):&lt;br /&gt;
I would prefer it if G_open_*_new() simply called&lt;br /&gt;
G_fatal_error() themselves if an error occurred. It's not as if there's&lt;br /&gt;
any reasonable alternative way to handle the error.&lt;br /&gt;
&lt;br /&gt;
* Changes:&lt;br /&gt;
&lt;br /&gt;
      input = G_define_option(G_OPT_F(D?)_INPUT) ;&lt;br /&gt;
      input-&amp;gt;key        =_(&amp;quot;parameter&amp;quot;);&lt;br /&gt;
      input-&amp;gt;type       = TYPE_DOUBLE;&lt;br /&gt;
      input-&amp;gt;required   = YES;&lt;br /&gt;
      input-&amp;gt;gisprompt  =_(&amp;quot;value, parameter&amp;quot;);&lt;br /&gt;
      input-&amp;gt;description=_(&amp;quot;Value of the parameter&amp;quot;);&lt;br /&gt;
      /*input-&amp;gt;answer     =_(&amp;quot;0.000&amp;quot;);*/&lt;br /&gt;
      input-&amp;gt;guisection = _(&amp;quot;Required&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
I could also think similarly for non-GRASS files actually&lt;br /&gt;
(configuration files sometimes need to be loaded separately)&lt;br /&gt;
&lt;br /&gt;
== Vector ==&lt;br /&gt;
=== Radim's TODO list ===&lt;br /&gt;
&lt;br /&gt;
[http://freegis.org/cgi-bin/viewcvs.cgi/grass6/doc/vector/TODO?rev=HEAD&amp;amp;content-type=text/vnd.viewcvs-markup Vector TODO list]&lt;br /&gt;
* Particularly important: &amp;quot;Keep topology and spatial index in file instead of in memory&amp;quot; --ML&lt;br /&gt;
&lt;br /&gt;
=== Library ===&lt;br /&gt;
* 2d 'vertical' vector data (e.g. [http://sofia.usgs.gov/publications/maps/florida_geology/Txsectionbh.jpg Geologic Cross Sections])&lt;br /&gt;
* implement transactions for geometry handling (esp. v.edit, v.digit and to avoid leftover files when a vector command fails)&lt;br /&gt;
* Assume '''cat 0''' as the first possible, instead of 1. GRASS has supported cat 0 since around 2005, but it hasn't been widely used. According to Radim, using cat 0 allows for [http://sourceforge.net/mailarchive/message.php?msg_name=340505ef0601170244n1b5fe25bhd0a3eba7342b78d4%40mail.gmail.com exact mapping from OGR FID (which can be 0) to GRASS cat].&lt;br /&gt;
* support for elliptical arcs, quadratic and cubic splines. Elliptical arcs or circular arcs are very common in Swiss survey data (Amtliche Vermessung)&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
&lt;br /&gt;
==== rename ====&lt;br /&gt;
* rename v.in.ogr to v.import&lt;br /&gt;
* rename v.out.ogr to v.export&lt;br /&gt;
* rename v.mkgrid to v.grid&lt;br /&gt;
* rename v.univar.sh to v.db.univar ([http://grass.itc.it/pipermail/grass-dev/2007-May/030883.html comment])&lt;br /&gt;
&lt;br /&gt;
==== remove ====&lt;br /&gt;
&lt;br /&gt;
* Remove [http://intevation.de/rt/webrt?serial_num=3600 doubled units in v.to.db GUI]&lt;br /&gt;
&lt;br /&gt;
==== merge ====&lt;br /&gt;
* merge v.select and v.overlay&lt;br /&gt;
: needs discussion, they are doing fundamentally different things --HB&lt;br /&gt;
&lt;br /&gt;
* merge v.sample and v.what.rast&lt;br /&gt;
: See a feature request [http://wald.intevation.org/tracker/index.php?func=detail&amp;amp;aid=506&amp;amp;group_id=21&amp;amp;atid=188 #506] in GForge.&lt;br /&gt;
&lt;br /&gt;
==== fix ====&lt;br /&gt;
* Fix the [http://intevation.de/rt/webrt?serial_num=3623 Column 'cat_' already exists (duplicate name)] in v.in.ogr. Maybe by creating columns ''cat_1'', ''cat_2'' etc.  each time a Grass vector is exported to shapefile and imported back to Grass?&lt;br /&gt;
* write Vect_map_exists() and implement in g.remove and v.digit -n (why wait for GRASS 7 ??)&lt;br /&gt;
* add '-d' dissolve to v.reclass&lt;br /&gt;
* add 'where=' to v.to.rast (why wait for GRASS 7 ??)&lt;br /&gt;
* &amp;lt;strike&amp;gt;implement Douglas-Peucker generalization ([http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhs/ C code file])to substitute prune tool of v.clean ([http://grass.itc.it/pipermail/grass-dev/2007-May/thread.html#31446 done]?, see also GSoC)&amp;lt;/strike&amp;gt;&lt;br /&gt;
** This is done. [http://grass.osgeo.org/grass63/manuals/html63_user/v.generalize.html v.generalize] does D-P and a lot more -WB&lt;br /&gt;
* Rewrite vector labeling. Needs more placement control options (may be db field value based), label overlapping prevention would be also good. May be we could borrow some ideas from MapServer? (ongoing: v.label.sa)&lt;br /&gt;
* v.what.vect - rename parameters &amp;amp;quot;vector&amp;amp;quot; to &amp;amp;quot;map&amp;amp;quot;, &amp;amp;quot;qvector&amp;amp;quot; to &amp;amp;quot;qmap&amp;amp;quot;&lt;br /&gt;
* v.type - change type= option to from= and to=.(code's already in there)&lt;br /&gt;
&lt;br /&gt;
==== enhance ====&lt;br /&gt;
* extend v.overlay to allow combination of all types (point, line, area)&lt;br /&gt;
* v.category: add possibility to create new layer categories on the basis of a column in the table linked to an existing layer&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
=== Library ===&lt;br /&gt;
* Add support for planetary bodies reference systems&lt;br /&gt;
* &amp;lt;strike&amp;gt;Add new partial differential equation (PDE) library with OpenMP support&amp;lt;/strike&amp;gt; (GRASS 6.3)&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
&lt;br /&gt;
* g.remove, g.mremove, g.rename, g.copy: don't allow for default datatype (which is currently raster) [http://intevation.de/rt/webrt?serial_num=3009].&lt;br /&gt;
: controversial, needs more discussion --HB&lt;br /&gt;
* g.region&lt;br /&gt;
** [http://grass.itc.it/pipermail/grassuser/2007-February/038337.html Glynn's notes] - cleaning the print flags and new &amp;lt;tt&amp;gt;print=&amp;lt;/tt&amp;gt; option&lt;br /&gt;
** &amp;lt;strike&amp;gt;Support '''vector's 3rd''' dimension in '''g.region vect= [-a]''', '''[res=]''', like the 2d extents are (or should be)&amp;lt;/strike&amp;gt; see [http://trac.osgeo.org/grass/ticket/121 trac #121]&lt;br /&gt;
&lt;br /&gt;
== Database ==&lt;br /&gt;
=== Library ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;establish SQLite as default DBMI driver (DBF is too limited).&amp;lt;/strike&amp;gt;  '''done May 2008.'''&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
* allow cross-mapset database access, i.e. parse the '@mapset' notation appended to vector names (requires access via possibly different DBMI drivers)&lt;br /&gt;
* rename db.in.ogr to db.import&lt;br /&gt;
&lt;br /&gt;
== Imagery ==&lt;br /&gt;
=== Library ===&lt;br /&gt;
&lt;br /&gt;
Do merge of image libraries:&lt;br /&gt;
&lt;br /&gt;
* A)&lt;br /&gt;
** lib/imagery/: standard lib, in use (i.* except for i.points3, i.rectify3)&lt;br /&gt;
** imagery/i.ortho.photo/libes/: standard lib, in use (i.ortho.photo, photo.*)&lt;br /&gt;
* B)&lt;br /&gt;
** lib/image3/: never finished improvement which integrated the standard lib and the ortho lib. Seems to provide also ortho rectification for satellite data (i.points3, i.rectify3)&lt;br /&gt;
* else&lt;br /&gt;
** the lib/imagery/c_*.c files should either be made part of i.cluster (nothing else uses it), or at&lt;br /&gt;
least split into a separate library.&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
&lt;br /&gt;
* merge of i.points, i.vpoints, i.points3&lt;br /&gt;
: drop these altogether? (loss of interactive XDRIVER)&lt;br /&gt;
* merge of i.rectify and i.rectify3&lt;br /&gt;
: maybe depend on gdalwarp C API for this?&lt;br /&gt;
* addition of new resampling algorithms such as bilinear, cubic convolution (take from r.proj?)&lt;br /&gt;
* add other warping methods (maybe thin splines from GDAL?)&lt;br /&gt;
* implement/finish linewise ortho-rectification of satellite data&lt;br /&gt;
* Depreciate tape functions in next major revision of GRASS and create a tape module that accomplishes tape access.&lt;br /&gt;
&lt;br /&gt;
== Raster3D ==&lt;br /&gt;
=== Library ===&lt;br /&gt;
* renaming of all G3D library functions to fulfil the grass coding standard&lt;br /&gt;
* extent/rewrite documentation &lt;br /&gt;
* localisation support (why wait for GRASS 7 ??)&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
* report and support modules like r3.stats, r3.support&lt;br /&gt;
* voxel -&amp;gt; vector (isosurfaces ...) and vector -&amp;gt; voxel (lines, faces, volumes) conversion modules&lt;br /&gt;
* module for 3d Kriging interpolation based on vector points&lt;br /&gt;
* a GRASS-Python/VTK visualisation/manipulation tool&lt;br /&gt;
&lt;br /&gt;
== Display ==&lt;br /&gt;
&lt;br /&gt;
=== New display architecture ===&lt;br /&gt;
&lt;br /&gt;
''Comments from Glynn Clements (from [http://www.nabble.com/Cairo-monitor-driver-tf4620004.html#a13206009 here]):''&lt;br /&gt;
&lt;br /&gt;
# Eliminating separate driver processes. Having to extend the protocol for each new operation has been a major drag on development.&lt;br /&gt;
# Use of floating-point for all graphics coordinates. For geographic data, the expected approach will be to set an appropriate transform then use cartographic coordinates. &lt;br /&gt;
# Common architecture for both video and hardcopy output. ps.map should be redundant. &lt;br /&gt;
&lt;br /&gt;
In retrospect, #1 means that we don't really need support for the Windows/MacOSX GUI, just the ability to generate image files.&lt;br /&gt;
&lt;br /&gt;
With X, we could take the shortcut of having d.* commands draw directly into an existing window, but I don't know whether that's possible on other platforms.&lt;br /&gt;
&lt;br /&gt;
OTOH, it might be useful to be able to use the same functions for self-contained GUI programs (e.g. vector digitising) as for d.* commands.&lt;br /&gt;
&lt;br /&gt;
=== Library ===&lt;br /&gt;
* Drop support for interactive xmon modules&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
* d.font etc.&lt;br /&gt;
** &amp;lt;strike&amp;gt;Huidae Cho merged d.text.freetype and d.text into d.text.new; drop them and rename d.text.new into d.text.&amp;lt;/strike&amp;gt; '''done.'''&lt;br /&gt;
** merge d.font and d.font.freetype too&lt;br /&gt;
: now done in 6.3?&lt;br /&gt;
&lt;br /&gt;
* d.vect&lt;br /&gt;
** consolidate parameter names (attrcol, wcolumn, rgb_column)&lt;br /&gt;
: -&amp;gt; attr_column, width_column, rgb_column?&lt;br /&gt;
&lt;br /&gt;
* remove d.ask, d.menu, d.linegraph(?), &amp;lt;strike&amp;gt;d.mapgraph, d.text.freetype, d.paint.labels (symlink)&amp;lt;/strike&amp;gt;, d.font.*&lt;br /&gt;
: rewrite d.ask, d.menu as WxGUI popup-window modules independent of display?&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strike&amp;gt;remove d.m.&amp;lt;/strike&amp;gt; '''done.'''&lt;br /&gt;
&lt;br /&gt;
* d.legend, d.barscale, d.text, etc: make at=0,0 origin identical!&lt;br /&gt;
: FWIW, I copied the d.legend at= syntax from d.frame --HB&lt;br /&gt;
&lt;br /&gt;
== Postscript ==&lt;br /&gt;
=== Modules ===&lt;br /&gt;
ps.map&lt;br /&gt;
* remove scale parameter&lt;br /&gt;
: -&amp;gt; from the command line, not the map instruction&lt;br /&gt;
* rename sizecol to sizecolumn (remove the given warning)&lt;br /&gt;
* use PAL/JPAL [http://geosysin.iict.ch/PAL cartographic labelling library] (GPL, C++ language, JNI wrapper)&lt;br /&gt;
&lt;br /&gt;
See also &amp;quot;New display architecture&amp;quot; comments above.&lt;br /&gt;
&lt;br /&gt;
== Parser ==&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Add another semantic meaning to the parser system for a type safe enumerated list&amp;quot; (Cedric's words commenting the bug that  [http://intevation.de/rt/webrt?serial_num=2969 '''v.type''' doesn't allow for selecting input and output type in '''GUI''']&lt;br /&gt;
&lt;br /&gt;
* Making GRASS modules be less verbose. Use --verbose flag and GRASS_VERBOSE environment variable. All output (G_message, G_percetn, G_warning) should go to GRASS_LOG file which could be grassdata/location/mapset/.grass.log by default.&lt;br /&gt;
: less verbose: this is well underway in 6.3&lt;br /&gt;
: Note warning and errors are already logged to GIS_ERROR_LOG (see variables.html)&lt;br /&gt;
&lt;br /&gt;
== Init shell and startup ==&lt;br /&gt;
&lt;br /&gt;
* .grassrc6 is not what you expect. It holds the g.gisenv GIS variables, it's not a shell script containing commands like .bashrc is.&lt;br /&gt;
: Suggestion: We should change the name for 7.x. It isn't an &amp;quot;rc&amp;quot; file in the conventional sense.&lt;br /&gt;
:: Suggestion: make it even a $HOME/.grass7/ directory to store settings etc (e.g., from r.li and others)&lt;br /&gt;
&lt;br /&gt;
* It is asked to run GRASS in its own shell to avoid portability issues [http://grass.itc.it/pipermail/grass-dev/2007-August/032607.html 1].&lt;br /&gt;
&lt;br /&gt;
* Eliminate Init.sh. Glynn explains on [http://www.nabble.com/forum/ViewPost.jtp?post=12914361&amp;amp;framed=y GRASS user ML]: &amp;quot;Most of the environment can be set up through an e.g. /etc/env.d/grass script. The database, location and mapset can be set through g.mapset. The only slight subtlety is if you want multiple independent sessions, but that can be done with a fraction of the code in Init.sh.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Provide a mechanism (g.access option?) to enable r/w access for users in mapsets they don't own. So that it they don't need to hack lib/gis/mapset_msc.c. Glynn explains on [http://www.nabble.com/forum/ViewPost.jtp?post=12914361&amp;amp;framed=y GRASS user ML]: &amp;quot;AFAICT, that restriction has been unnecessary ever since the lockfile was moved from the user's home directory to the mapset directory.&amp;quot;&lt;br /&gt;
: Actually, I (Glynn) no longer think it's that simple. If other users can create directories within your mapset, they can create directories which you cannot remove, and in which you cannot add, remove or modify files. And this is quite likely to happen: most users will have a umask of 0022 or worse, meaning that other users (i.e. you) cannot modify any files or directories which they create.&lt;br /&gt;
&lt;br /&gt;
== Data management ==&lt;br /&gt;
&lt;br /&gt;
* store vertical units on per-map base, using code from [http://www.gnu.org/software/units/ units] software&lt;br /&gt;
: Support for free form unit meta-data added in 6.3. I don't mind it as a guide, but we shouldn't be limited to units found in ''units''. --HB&lt;br /&gt;
&lt;br /&gt;
* store vertical map datum on per-location base (GDAL/OGR needs the same [http://lists.maptools.org/pipermail/gdal-dev/2005-October/006857.html enhancement])&lt;br /&gt;
: This requires more discussion. I'm not sure it's a good idea to do this location-wide. --HB&lt;br /&gt;
: On a per raster map basis done in 6.3 cvs.&lt;br /&gt;
&lt;br /&gt;
* add versioning for maps (to recover previous map versions)&lt;br /&gt;
: see &amp;quot;v.info -h&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
== Time series ==&lt;br /&gt;
&lt;br /&gt;
* Implement better [[Time series in GRASS]] support (series of satellite data etc)&lt;br /&gt;
: for example?&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
&lt;br /&gt;
* better support for faces and kernels in libgis&lt;br /&gt;
: not really Visualization, but....&lt;br /&gt;
&lt;br /&gt;
== CLI ==&lt;br /&gt;
&lt;br /&gt;
=== Parameters standardization ===&lt;br /&gt;
&lt;br /&gt;
* Fix the parameters and flags. Make it a concept. See proposal in GRASS 5 [http://freegis.org/cgi-bin/viewcvs.cgi/grass/documents/parameter_proposal.txt?rev=HEAD&amp;amp;content-type=text/vnd.viewcvs-markup documents/parameter_proposal.txt]&lt;br /&gt;
&lt;br /&gt;
=== Flags standardization ===&lt;br /&gt;
&lt;br /&gt;
* Get rid of 'quiet/verbose' flags, preparation in GRASS 6, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    /* please, remove before GRASS 7 released */&lt;br /&gt;
    if(q-&amp;gt;answer) {&lt;br /&gt;
        putenv(&amp;quot;GRASS_VERBOSE=0&amp;quot;);&lt;br /&gt;
        G_warning(_(&amp;quot;The '-q' flag is superseded and will be removed &amp;quot;&lt;br /&gt;
            &amp;quot;in future. Please use '--quiet' instead&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GUI ==&lt;br /&gt;
&lt;br /&gt;
* Multiplatform&lt;br /&gt;
* Fast, minimalist, number of windows reduced&lt;br /&gt;
* Manageable also from command line via d.* modules&lt;br /&gt;
* Facilitating easy development of custom GUI application based on GRASS&lt;br /&gt;
* &amp;lt;strike&amp;gt;drop '''d.m'''&amp;lt;/strike&amp;gt; '''done.'''&lt;br /&gt;
* drop '''gis.m''' ??&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;rarr; [[WxPython-based GUI for GRASS]]&lt;br /&gt;
&lt;br /&gt;
== Conceptual changes ==&lt;br /&gt;
&lt;br /&gt;
* File organization in binaries:&lt;br /&gt;
** the grass etc dir is a mess... module should maintain arch-deps and arch-indep things in different paths -- &amp;lt;cite&amp;gt; frankie at #grass irc&amp;lt;/cite&amp;gt;&lt;br /&gt;
** it's basically a FHS violation, i dunno if it is reported by lintian, anyway /usr/lib/grass should be used for arch-deps data, not for mixed stuff -- &amp;lt;cite&amp;gt; frankie at #grass irc&amp;lt;/cite&amp;gt;&lt;br /&gt;
* Creating $HOME/.grass7 directory for&lt;br /&gt;
** Custom fonts&lt;br /&gt;
** r.li and other modules temp. files&lt;br /&gt;
** GEM addons installation&lt;br /&gt;
** Default path for custom scripts&lt;br /&gt;
** Custom symbols and EPS fill patterns&lt;br /&gt;
** Custom color maps&lt;br /&gt;
** Add here new item&lt;br /&gt;
&lt;br /&gt;
== User Wishes ==&lt;br /&gt;
&lt;br /&gt;
''This section is not really development related...''&lt;br /&gt;
* Create 3D animation w nviz showing GRASS 3D coolness. [[User:MarisN|MarisN]] 12:00, 4 August 2006 (CEST)&lt;br /&gt;
* here are some examples to get inspired (apparently that's already possible):&lt;br /&gt;
** [http://skagit.meas.ncsu.edu/~helena/publwork/grasskey02/grass02talk10.html dynamic surfaces and volumes]&lt;br /&gt;
**[http://skagit.meas.ncsu.edu/~helena/wrriwork/cenntenial/water01dsmall.gif some water]&lt;br /&gt;
**[http://skagit.meas.ncsu.edu/~helena/wrriwork/balsam/fanimwalk.gif particles]&lt;br /&gt;
** [http://www.fhpv.unipo.sk/kagerr/pracovnici/hofierka/pv_results.html solar radiation and energy]&lt;br /&gt;
* Convince the users to use ParaView [http://www.paraview.org] for sophisticated animations --[[User:Huhabla|huhabla]] 20:47, 14 August 2006 (CEST)&lt;br /&gt;
**(Add support for Paraview in GDAL/OGR or add GDAL/OGR support in ParaView to read directly data from GRASS) see discussion&lt;br /&gt;
* Or use [http://www.llnl.gov/visit/ VisIt software], it should be able to read GRASS maps directly via GDAL&lt;br /&gt;
&lt;br /&gt;
== Complete GRASS Test Suite ==&lt;br /&gt;
* base a comprehensive test suite on [http://www-pool.math.tu-berlin.de/~soeren/grass/GRASS_TestSuite/?C=M;O=D Soeren's GRASS Test Suite]&lt;br /&gt;
* automated error checking on all modules to catch data corruption issues&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Release Roadmap]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=AreaFillPatterns&amp;diff=7513</id>
		<title>AreaFillPatterns</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=AreaFillPatterns&amp;diff=7513"/>
		<updated>2008-09-05T02:36:27Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: /* Example Pattern files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://grass.osgeo.org/grass64/manuals/html64_user/ps.map.html#vareas ps.map's vector area filling command] will let you set a fill pattern ([http://en.wikipedia.org/wiki/Hatching hatching]). You can create custom patterns. User contributed patterns can be found on this page.&lt;br /&gt;
&lt;br /&gt;
''Alternative'':&lt;br /&gt;
[http://www.qgis.org QGIS] will let you load a GRASS map (with the GDAL GRASS-plugin installed) and change the area fill pattern on-screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Contributions ===&lt;br /&gt;
&lt;br /&gt;
Please include a small example graphic. [[Special:Upload|Upload instructions]].&lt;br /&gt;
&lt;br /&gt;
Also please include your name and some sort of license information.&amp;lt;BR&amp;gt;&lt;br /&gt;
e.g. &amp;quot;&amp;amp;copy; 2006 Sara Grassuser, released into the public domain without restriction.&amp;quot; This way others may freely improve and further distribute your work (e.g. it can be distributed with the next official GRASS release).&lt;br /&gt;
&lt;br /&gt;
=== Authoring instructions ===&lt;br /&gt;
&lt;br /&gt;
Use the ps.map ''vareas'' command's '''pat''' instruction with the full path to pattern file. The pattern file contains header and simple PS commands. It is similar to EPS but more limited, meaning that while each pattern file is a true EPS file, most EPS files are not usually useful as pattern files because they contain restricted commands. Color and width of patterns are set by '''fcolor''' and '''width''' instructions until overwritten in the pattern file. The pattern may be scaled with the '''scale''' instruction. Several standard hatching patterns are provided in &amp;lt;TT&amp;gt;$GISBASE/etc/paint/patterns/&amp;lt;/TT&amp;gt;. You can also create your own custom pattern files in a text editor.&lt;br /&gt;
&lt;br /&gt;
=== Example use ===&lt;br /&gt;
&lt;br /&gt;
* [[Psmap_fill_patterns|Example ps.map script]] showing all standard fill patterns. Uses the [http://grass.osgeo.org/download/data6.php Spearfish sample dataset].&lt;br /&gt;
&lt;br /&gt;
 vareas fields&lt;br /&gt;
   pat $GISBASE/etc/paint/patterns/brick.eps&lt;br /&gt;
   where label ~ 'Natl. Forest'&lt;br /&gt;
   fcolor green&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
=== Example Pattern files ===&lt;br /&gt;
&lt;br /&gt;
* Standard pattern files can be found in &amp;lt;tt&amp;gt;$GISBASE/etc/paint/patterns/&amp;lt;/tt&amp;gt; or from the [http://trac.osgeo.org/grass/browser/grass/branches/develbranch_6/ps/ps.map/patterns/ SVN web interface].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
[[Image:Fillpatterns.png]]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
''[http://bambi.otago.ac.nz/hamish/grass/fillpatterns.ps PostScript version of this image]'' (created with {{cmd|ps.map}} and {{cmd|v.mkgrid}})&lt;br /&gt;
&lt;br /&gt;
==== Vertical line ====&lt;br /&gt;
('''|''')&lt;br /&gt;
 %!PS-Adobe-2.0 EPSF-1.2&lt;br /&gt;
 %%BoundingBox: 0 0 10 10&lt;br /&gt;
 newpath&lt;br /&gt;
 5 0 moveto&lt;br /&gt;
 5 10 lineto&lt;br /&gt;
 stroke&lt;br /&gt;
&lt;br /&gt;
=== User contributions ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- add yours here --&amp;gt;&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ''[insert demonstrative image here]'' --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: ps.map]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Template:Cmd&amp;diff=7512</id>
		<title>Template:Cmd</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Template:Cmd&amp;diff=7512"/>
		<updated>2008-09-05T02:35:00Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://grass.osgeo.org/grass{{{version|64}}}/manuals/html{{{version|64}}}_user/{{{1}}}.html {{{1}}}]&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Module manual page external link. Usage:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{cmd|module}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{cmd|module|version=64}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{cmd|v.in.dxf}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
creates&lt;br /&gt;
&lt;br /&gt;
{{cmd|v.in.dxf}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GIS_Concepts&amp;diff=7481</id>
		<title>GIS Concepts</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GIS_Concepts&amp;diff=7481"/>
		<updated>2008-09-04T18:22:52Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: /* Raster Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Geodesy and Cartography ==&lt;br /&gt;
=== Background material ===&lt;br /&gt;
&lt;br /&gt;
* [http://oceanservice.noaa.gov/education/kits/geodesy/welcome.html An introduction to Geodesy] from NOAA&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Geodesy Wikipedia's Geodesy entry]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/GIS Wikipedia's GIS entry]&lt;br /&gt;
* [http://earth-info.nima.mil/GandG/publications/ NGA Geodesy and Geophysics publications] &lt;br /&gt;
* [http://www.ordnancesurvey.co.uk/oswebsite/gps/information/coordinatesystemsinfo/guidecontents/index.html UK Ordnance Survey primer on coordinate system concepts] ([http://www.ordnancesurvey.co.uk/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf PDF])&lt;br /&gt;
&lt;br /&gt;
=== Map projections ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.asprs.org/resources/grids/ ASPRS Grids and Datums]: detailed descriptions of national projections&lt;br /&gt;
* [http://www.mapref.org/ MapRef] - The Collection of Map Projections and Reference Systems for Europe&lt;br /&gt;
* [http://www.remotesensing.org/geotiff/proj_list/ Projections Transform Lists] (PROJ4) &lt;br /&gt;
* [http://www.dmap.co.uk/utmworld.htm UTM Zones]&lt;br /&gt;
&lt;br /&gt;
EPSG:&lt;br /&gt;
* [http://www.epsg.org EPSG projection codes]&lt;br /&gt;
: [http://www.epsg-registry.org/ EPSG database search]&lt;br /&gt;
: [http://spatialreference.org/ Spatialreference community portal]&lt;br /&gt;
&lt;br /&gt;
Projection galleries:&lt;br /&gt;
* [http://www.progonos.com/furuti/MapProj/CartIndex/cartIndex.html Map projection concepts] by Carlos Furuti&lt;br /&gt;
* [http://www.galleryofmapprojections.com Map projection gallery] by Paul Anderson&lt;br /&gt;
&lt;br /&gt;
=== Map datums ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.colorado.edu/geography/gcraft/notes/datum/datum.html An introduction to geodetic datums] by Peter Dana&lt;br /&gt;
* [http://home.online.no/~sigurdhu/WGS84_Eng.html How WGS 84 defines the Earth]&lt;br /&gt;
* A discussion of [http://www.linz.govt.nz/core/surveysystem/geodeticinfo/conversions/datums/nzgd1949-nzgd2000/index.html 3-term, 7-term, and NTv2 grid datum transformations] by Land Information New Zealand&lt;br /&gt;
: (besides the web page have a look at the PDF fact sheet and guide linked therein)&lt;br /&gt;
&amp;lt;!-- old (better?&amp;gt;) link: http://web.archive.org/web/20070828042606/http://www.linz.govt.nz/core/surveysystem/geodeticinfo/geodeticdatums/nzgd49tonzgd2000/index.html --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How GRASS deals with geodetics==&lt;br /&gt;
&lt;br /&gt;
As far as GRASS is concerned, an ellipsoid and a spheroid are the same thing, and ellipsoid is the prefered name.&lt;br /&gt;
&lt;br /&gt;
As far as GRASS is concerned, a datum is made up of an ellipsoid and an origin.&lt;br /&gt;
Setting a datum is optional, but highly recommended.&lt;br /&gt;
&lt;br /&gt;
GRASS uses a modified version of the [http://proj.maptools.org PROJ.4] library.&lt;br /&gt;
&lt;br /&gt;
=== Modules controling a location's map projection ===&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/g.proj.html g.proj] help page&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/g.setproj.html g.setproj] help page&lt;br /&gt;
&lt;br /&gt;
=== Modules for reprojecting GIS maps and data ===&lt;br /&gt;
&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/r.proj.html r.proj] for reprojecting raster maps&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/v.proj.html v.proj] for reprojecting vector maps&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/m.proj.html m.proj] for reprojecting a list of coordinate pairs&lt;br /&gt;
&lt;br /&gt;
=== Modules for georectifying images ===&lt;br /&gt;
&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/r.region.html r.region] for resetting a raster map's bounds information&lt;br /&gt;
* gis.m GIS manager GeoReferencing tool (File menu)&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/i.points.html i.points] and  [http://grass.osgeo.org/grass64/manuals/html64_user/i.vpoints.html i.vpoints] for setting GCPs&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/i.rectify.html i.rectify] for georectifying imagery&lt;br /&gt;
* [http://www.gdal.org GDALwarp] (use with gdal_translate, see the i.warp script in the wiki [[GRASS_AddOns#Imagery_add-ons|AddOns]] page)&lt;br /&gt;
&lt;br /&gt;
;[[Georeferencing]]&lt;br /&gt;
&lt;br /&gt;
==GIS Data types==&lt;br /&gt;
&lt;br /&gt;
===Raster Data===&lt;br /&gt;
&lt;br /&gt;
Data which occurs in a regularly spaced grid. e.g. a satellite image or digital terrain map.&amp;lt;BR&amp;gt;&lt;br /&gt;
Region settings determine the spatial extent and resolution of the grid.&lt;br /&gt;
&lt;br /&gt;
;[http://grass.osgeo.org/grass64/manuals/html64_user/rasterintro.html Raster Intro]&lt;br /&gt;
[[Replacement raster format]]&lt;br /&gt;
&lt;br /&gt;
[[GRASS Raster Mask]]&lt;br /&gt;
&lt;br /&gt;
[[GRASS raster semantics]]&lt;br /&gt;
&lt;br /&gt;
===3D Raster Data (Voxel)===&lt;br /&gt;
&lt;br /&gt;
A stack of 2D raster maps.&lt;br /&gt;
&lt;br /&gt;
;[http://grass.osgeo.org/grass64/manuals/html64_user/raster3dintro.html Raster 3D Intro]&lt;br /&gt;
&lt;br /&gt;
===Vector Data===&lt;br /&gt;
&lt;br /&gt;
Data which occurs as a series of coordinates. e.g. a GPS position or coastline map. May be a point, line, area, etc in either 2D or 3D space. Generally independent of region settings.&lt;br /&gt;
&lt;br /&gt;
;[http://grass.osgeo.org/grass64/manuals/html64_user/vectorintro.html Vector Intro] &lt;br /&gt;
[[Vectordata]]&lt;br /&gt;
&lt;br /&gt;
=== Imagery Data ===&lt;br /&gt;
Pixelated photographic or satellite images, often imported from a &lt;br /&gt;
[http://en.wikipedia.org/wiki/GeoTIFF GeoTIFF] or PNG image file.&lt;br /&gt;
&lt;br /&gt;
As far as the GIS is concerned this is just another raster map, but there are several modules specially tailored for rectification and processing common imagery types. e.g. ortho-photos or multi-channel LANDSAT data.&lt;br /&gt;
&lt;br /&gt;
* [http://grass.osgeo.org/grass64/manuals/html64_user/imageryintro.html GRASS Imagery module introduction]&lt;br /&gt;
&lt;br /&gt;
* The GRASS [[Image processing]] wiki page&lt;br /&gt;
&lt;br /&gt;
===Site Data===&lt;br /&gt;
Old versions of GRASS (5 and earlier) treated point data separate to line and polygon data. GRASS 6 classes all vector data features the same. Convert old sites file data into GRASS 6 vector format with the GRASS 6 [http://grass.osgeo.org/grass64/manuals/html64_user/v.in.sites.html v.in.sites] or &lt;br /&gt;
[http://grass.osgeo.org/grass64/manuals/html64_user/v.in.sites.all.html v.in.sites.all] modules.&lt;br /&gt;
&lt;br /&gt;
==Conversions between data types==&lt;br /&gt;
&lt;br /&gt;
The following table is intended to catalog transformations from one type of data to another:&amp;lt;BR&amp;gt;&lt;br /&gt;
''[table is currently incomplete!]''&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| From / To&lt;br /&gt;
![http://grass.osgeo.org/grass64/manuals/html64_user/rasterintro.html Raster]&lt;br /&gt;
![http://grass.osgeo.org/grass64/manuals/html64_user/raster3dintro.html 3D Raster] &lt;br /&gt;
![http://grass.osgeo.org/grass64/manuals/html64_user/vectorintro.html Vector]&lt;br /&gt;
|-&lt;br /&gt;
! Raster&lt;br /&gt;
| r.mapcalc&lt;br /&gt;
| r.to.rast3&lt;br /&gt;
| r.to.vect, v.sample, r.volume&lt;br /&gt;
|-&lt;br /&gt;
! 3D Raster&lt;br /&gt;
| r3.to.rast, r3.cross.rast&lt;br /&gt;
| r3.mapcalc&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! Vector&lt;br /&gt;
| v.to.rast, v.surf.rst, v.surf.idw&lt;br /&gt;
| v.vol.rst, v.vol.idw, v.to.rast3&lt;br /&gt;
| v.clean	&lt;br /&gt;
|-&lt;br /&gt;
! Data&lt;br /&gt;
| r.in.*&lt;br /&gt;
| r3.in.*&lt;br /&gt;
| v.in.*&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How a GRASS project is organized==&lt;br /&gt;
&lt;br /&gt;
GRASS data is stored in a three level structure, the database, location and mapset. These can be found in a series of nested directories on the user's computer. All three must exist and are set at GRASS startup time.&lt;br /&gt;
&lt;br /&gt;
===The Database===&lt;br /&gt;
&lt;br /&gt;
The directory in which all GIS data is to be stored.&lt;br /&gt;
&lt;br /&gt;
e.g. &amp;lt;tt&amp;gt;~/grassdata/&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The Location===&lt;br /&gt;
&lt;br /&gt;
A ''location'' is a GRASS project consisting of an area, projection definition (or unprojected), a grouping of mapsets, all with the same projection settings. A location is a subdirectory of the GRASS ''database''.&lt;br /&gt;
&lt;br /&gt;
e.g. world_lat_lon, utm_zone_59, or west_coast&lt;br /&gt;
&lt;br /&gt;
A ''location'' contains one or many ''mapsets''.&lt;br /&gt;
&lt;br /&gt;
===The Mapset===&lt;br /&gt;
&lt;br /&gt;
A ''mapset'' contains map(s), it is a subdirectory of a ''location''.&lt;br /&gt;
Conceptually, if several mapsets are used in a location, they may be assigned to different users (each has one or several own mapsets to work in and cannot modify thos of other users), and/or it they are used to organize a project (''location'') by subareas or subprojects.&lt;br /&gt;
There are no specific organizational limitations.&lt;br /&gt;
&lt;br /&gt;
There is always a PERMANENT mapset which is readable from all other mapsets within the same location. Read access to maps in other mapsets is managed with the 'g.mapsets' command or by adding the &amp;quot;@&amp;quot; symbol and mapset name (e.g. &amp;lt;tt&amp;gt;map@othermapset&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==How the Open Source software development model works==&lt;br /&gt;
&lt;br /&gt;
GRASS differs from many other GIS software packages used in the professional world in that it is developed and distributed by users for users; mostly on a volunteer basis, in the open, and is given away for free.&lt;br /&gt;
&lt;br /&gt;
Emphasis is placed on interoperability and unlimited access to data as well as software flexibility and evolution rate (both added features and bug minimization).&lt;br /&gt;
&lt;br /&gt;
''Free'' can have many meanings, as the links below illustrate, and within a project there is often a spectrum of philosophies and goals amongst developers. But it works - Free Software has revolutionized many sectors of the computing world over the last few years and continues to do so today.&lt;br /&gt;
&lt;br /&gt;
* [http://www.gnu.org/philosophy/philosophy.html Philosophy of the Free Software Movement]&lt;br /&gt;
* [http://www.opensource.org The Open Source Initiative has a good explanation]&lt;br /&gt;
* [http://www.fsf.org The Free Software Foundation]&lt;br /&gt;
* [http://www.gnu.org/copyleft/gpl.html The GNU General Public License]&lt;br /&gt;
&lt;br /&gt;
==Raster GIS Analysis==&lt;br /&gt;
&lt;br /&gt;
===Simple Raster Math===&lt;br /&gt;
&lt;br /&gt;
Sometimes when analyzing the relationship between two or more raster data sets, a relatively simple mathematical approach is best. One example using the r.mapcalc tool would be to look at changes between two raster data sets. By subtracting the values in these two data sets you can assume that resulting cells with a positive value have a possitive change and those with a negative value have negative change.  If the cell values have a zero value then there would be no change.&lt;br /&gt;
&lt;br /&gt;
GRASS comes bundled with the r.mapcalc tool as well as the d.m GUI interface for the tool accessable using the r.mapcalculator command.  This GUI allows the user to easily assign raster sets to the variables used in the formulas and easily create mathematical strings that will result in a new raster data set containing the results.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_pixel_rules&amp;diff=7480</id>
		<title>GRASS pixel rules</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_pixel_rules&amp;diff=7480"/>
		<updated>2008-09-04T18:18:44Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: GRASS pixel rules moved to GRASS raster semantics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GRASS raster semantics]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics&amp;diff=7479</id>
		<title>GRASS raster semantics</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_raster_semantics&amp;diff=7479"/>
		<updated>2008-09-04T18:18:44Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: GRASS pixel rules moved to GRASS raster semantics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A quick summary c/o Glynn Clements:&lt;br /&gt;
&lt;br /&gt;
==Region Calculations==&lt;br /&gt;
&lt;br /&gt;
Well, the region isn't limited to raster data; it may also affect some&lt;br /&gt;
vector operations.&lt;br /&gt;
&lt;br /&gt;
The region's bounds describe a rectangle in two-dimensional space. For&lt;br /&gt;
raster operations, this rectangle is subdivided into a grid of&lt;br /&gt;
rectangular cells, so the region's bounds are aligned with the edges&lt;br /&gt;
of the outermost cells.&lt;br /&gt;
&lt;br /&gt;
==Cell Locations==&lt;br /&gt;
&lt;br /&gt;
Cells are areas, not points, so they don't have locations. Their&lt;br /&gt;
corners have locations, as do their centres.&lt;br /&gt;
&lt;br /&gt;
A cell with array indices (i,j) (easting, northing) corresponds to the&lt;br /&gt;
rectangle:&lt;br /&gt;
&lt;br /&gt;
       { (x,y) : west + i * ewres &amp;lt;= x &amp;lt; west + (i+1) * ewres,&lt;br /&gt;
                 north - (j+1) * nsres &amp;lt;= y &amp;lt; north - j * nsres }&lt;br /&gt;
&lt;br /&gt;
whose centre is at:&lt;br /&gt;
&lt;br /&gt;
       (west + (i+1/2) * ewres, north - (j+1/2) * nsres)&lt;br /&gt;
&lt;br /&gt;
[Subject to wrapping of longitude values in lat/lon locations.]&lt;br /&gt;
&lt;br /&gt;
==Raster to Vector Conversions==&lt;br /&gt;
&lt;br /&gt;
IIRC, r.to.vect uses the midpoints of the cell's edges (i.e. one&lt;br /&gt;
coordinate will be on a grid line, the other will be mid-way between&lt;br /&gt;
grid lines).&lt;br /&gt;
&lt;br /&gt;
==Resampling==&lt;br /&gt;
&lt;br /&gt;
The built-in nearest-neighbour resampling of raster data calculates&lt;br /&gt;
the centre of each region cell, and takes the value of the raster cell&lt;br /&gt;
in which that point falls.&lt;br /&gt;
&lt;br /&gt;
If the point falls exactly upon a grid line, the exact result will be&lt;br /&gt;
determined by the direction of any rounding error.&lt;br /&gt;
&lt;br /&gt;
[One consequence of this is that downsampling by a factor which is an&lt;br /&gt;
even integer will always sample exactly on the boundary between cells,&lt;br /&gt;
meaning that the result is ill-defined.]&lt;br /&gt;
&lt;br /&gt;
'''r.resample''' uses the built-in resampling, so it should produce&lt;br /&gt;
identical results.&lt;br /&gt;
&lt;br /&gt;
'''r.resamp.interp''' method=nearest uses the same algorithm, but not the&lt;br /&gt;
same code, so it may not produce identical results in cases which are&lt;br /&gt;
decided by the rounding of floating-point numbers.&lt;br /&gt;
&lt;br /&gt;
For method=bilinear and method=bicubic, the raster values are treated&lt;br /&gt;
as samples at each raster cell's centre, defining a piecewise-&lt;br /&gt;
continuous surface. The resulting raster values are obtained by&lt;br /&gt;
sampling the surface at each region cell's centre.&lt;br /&gt;
&lt;br /&gt;
As the algorithm only interpolates, and doesn't extrapolate, a margin&lt;br /&gt;
of 0.5 (for bilinear) or 1.5 (for bicubic) cells is lost from the&lt;br /&gt;
extent of the original raster. Any samples taken within this margin&lt;br /&gt;
will be null.&lt;br /&gt;
&lt;br /&gt;
AFAIK, '''r.resamp.rst''' behaves similarly, i.e. it computes a surface&lt;br /&gt;
assuming that the values are samples at each raster cell's centre, and&lt;br /&gt;
samples the surface at each region cell's centre.&lt;br /&gt;
&lt;br /&gt;
For '''r.resamp.stats''' without -w, the value of each region cell is the&lt;br /&gt;
chosen aggregate of the values from all of the raster cells whose&lt;br /&gt;
centres fall within the bounds of the region cell.&lt;br /&gt;
&lt;br /&gt;
With -w, the samples are weighted according to the proportion of the&lt;br /&gt;
raster cell which falls within the bounds of the region cell, so the&lt;br /&gt;
result is normally[1] unaffected by rounding error (a miniscule&lt;br /&gt;
difference in the position of the boundary results in the addition or&lt;br /&gt;
subtraction of a sample weighted by a miniscule factor).&lt;br /&gt;
&lt;br /&gt;
[1] The min and max aggregates can't use weights, so -w has no effect&lt;br /&gt;
for those.&lt;br /&gt;
&lt;br /&gt;
==General Rules==&lt;br /&gt;
&lt;br /&gt;
For the most part, the interpretation is the &amp;quot;obvious&amp;quot; one, given:&lt;br /&gt;
&lt;br /&gt;
1. Cells are areas rather than points.&lt;br /&gt;
2. Operations which need a point (e.g. interpolation) use the cell's&lt;br /&gt;
centre.&lt;br /&gt;
&lt;br /&gt;
==Developer Notes Rules==&lt;br /&gt;
From a programming perspective, the functions:&lt;br /&gt;
&lt;br /&gt;
       G_row_to_northing()&lt;br /&gt;
       G_col_to_easting()&lt;br /&gt;
       G_northing_to_row()&lt;br /&gt;
       G_easting_to_col()&lt;br /&gt;
&lt;br /&gt;
all transform floating-point values.&lt;br /&gt;
&lt;br /&gt;
Passing integer row or column indices to the first two functions will&lt;br /&gt;
return the coordinates of the cell's top-left corner; for the centre&lt;br /&gt;
coordinates, pass row+0.5 and/or col+0.5.&lt;br /&gt;
&lt;br /&gt;
Similarly, the last two functions will typically return non-integral&lt;br /&gt;
values; use floor() to discard the fractional part and obtain the row&lt;br /&gt;
or column index of the cell within which the point lies.&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Updating_GRASS_Documentation&amp;diff=7397</id>
		<title>Updating GRASS Documentation</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Updating_GRASS_Documentation&amp;diff=7397"/>
		<updated>2008-08-20T11:22:40Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: Add: A brief guide to valid HTML&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How-to for Updating GRASS Manual Pages =&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/browser/grass/trunk/doc/html_documentation.txt doc/html_documentation.txt] from the GRASS source code&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&amp;lt;!-- from the SUBMITTING file, rule 23 --&amp;gt;&lt;br /&gt;
Module manual page:&lt;br /&gt;
&lt;br /&gt;
Place the documentation in HTML format into '&amp;lt;module&amp;gt;.html', where&lt;br /&gt;
&amp;lt;module&amp;gt; is the name of the module. E.g. if the module is named&lt;br /&gt;
r.example, the documentation file should be named r.example.html.&lt;br /&gt;
&lt;br /&gt;
The easiest way to do this is to study an existing HTML page&lt;br /&gt;
(to get the page style, e.g. vector/v.to.db/v.to.db.html).&lt;br /&gt;
With a few exceptions header and footer are NOT allowed.&lt;br /&gt;
You can add figures (PNG format), the figure name prefix should be the &lt;br /&gt;
module name. See raster/r.terraflow/r.terraflow.html for an example.&lt;br /&gt;
&lt;br /&gt;
Note that the parameter information is auto-generated upon&lt;br /&gt;
compilation. This is done by running module in a virtual session&lt;br /&gt;
after compilation (see the output of 'make'). To subsequently&lt;br /&gt;
verify the final HTML page, check the resulting HTML pages which&lt;br /&gt;
will be stored with the name of the module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The online WWW man pages will be updated every Saturday by SVN.&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page will provide general step-by-step instructions for updating and improving GRASS manual pages. Feel free to update and improve this page as well! See also [http://trac.osgeo.org/grass/browser/grass/trunk/SUBMITTING_DOCS SUBMITTING_DOCS] in the source code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As an example, the vector program v.in.ascii will be used to illustrate the steps required to update its manual page. These steps can then be generalized for your case.&lt;br /&gt;
&lt;br /&gt;
== Getting the latest source ==&lt;br /&gt;
&lt;br /&gt;
* To begin, you must obtain the latest GRASS source code from the Subversion repositories. Detailed instructions on how to do so can be found [http://trac.osgeo.org/grass/wiki/DownloadSource here.]&lt;br /&gt;
* Once you have downloaded the SVN source code, open a terminal and change directory to where the source for a specific GRASS module is located - in this example, something like:&lt;br /&gt;
 cd /your_svn_directory/grass6/vector/v.in.ascii&lt;br /&gt;
&lt;br /&gt;
* Open a text editor and make your edits to &amp;lt;module&amp;gt;.html. Do not use a &amp;quot;WYSYWIG&amp;quot; HTML editor on those files, but either a normal text editor or something which is designed for editing HTML ''source'' (e.g. [X]Emacs' html-mode or psgml-mode). Save your edits by overwriting the original &amp;lt;module&amp;gt;.html.&lt;br /&gt;
&lt;br /&gt;
== Help page sections ==&lt;br /&gt;
&lt;br /&gt;
Please use the following section list as a ''guideline''.&lt;br /&gt;
The intent is to promote a unified user experience, not to limit the flow of information. If exceptions are needed, please use them sparingly.&lt;br /&gt;
Minor sections (&amp;amp;lt;H3&amp;amp;gt;, etc) may be free-form, as required.&lt;br /&gt;
&lt;br /&gt;
=== Auto-generated ===&lt;br /&gt;
Modules using the parser interface will have these sections automatically generated from '&amp;lt;tt&amp;gt;g.module&amp;amp;nbsp;--html-description&amp;lt;/tt&amp;gt;'&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;NAME&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;KEYWORDS&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;SYNOPSIS&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Found in &amp;lt;module&amp;gt;.html ===&lt;br /&gt;
A number of major sections should be present in each help page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* = Required&lt;br /&gt;
! = Suggested&lt;br /&gt;
. = Optional&lt;br /&gt;
&lt;br /&gt;
In recommended order&lt;br /&gt;
--------------------&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;H2&amp;gt;DESCRIPTION&amp;lt;/H2&amp;gt;&lt;br /&gt;
! &amp;lt;H2&amp;gt;NOTE&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;NOTES&amp;lt;/H2&amp;gt;&lt;br /&gt;
! &amp;lt;H2&amp;gt;EXAMPLE&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;EXAMPLES&amp;lt;/H2&amp;gt;&lt;br /&gt;
. &amp;lt;H2&amp;gt;TODO&amp;lt;/H2&amp;gt;&lt;br /&gt;
. &amp;lt;H2&amp;gt;BUGS&amp;lt;/H2&amp;gt;&lt;br /&gt;
. &amp;lt;H2&amp;gt;REFERENCE&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;REFERENCES&amp;lt;/H2&amp;gt;&lt;br /&gt;
* &amp;lt;H2&amp;gt;SEE ALSO&amp;lt;/H2&amp;gt;&lt;br /&gt;
* &amp;lt;H2&amp;gt;AUTHOR&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;AUTHORS&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Images ==&lt;br /&gt;
&lt;br /&gt;
* Images can also be inserted in the html help page. See [http://grass.itc.it/grass63/manuals/html63_user/v.voronoi.html v.voronoi] for an example. Note that images won't show up in the Grass ''man'' pages (which are generated from the HTML), so they shouldn't be considered a substitute for an adequate textual description. Be sure to also send the image (preferably png format) along with your documentation patch.&lt;br /&gt;
&lt;br /&gt;
PNG files are best for figures with solid chunks of a single color. They can get rather large for imagery. In those cases JPEGs are a better choice. In general JPEG is a lossy format so the image quality will not be as good.&lt;br /&gt;
&lt;br /&gt;
To help keep the source distribution size small, try and keep the images small and the files under 50kb or so. Save PNGs at a compression setting of &amp;quot;9&amp;quot; with a minimal color pallet, you can also use tools like&lt;br /&gt;
&amp;lt;tt&amp;gt;pngcrush&amp;lt;/tt&amp;gt; to compress them further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
For non trivial modules please provide an example of the command line usage. It is good to have this double as a mini-tutorial, so please use one of the sample datasets (Spearfish or the new North Carolina one) or common dataset such as NASA's WMS or SRTM data files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Examples should be coded like this:&lt;br /&gt;
&lt;br /&gt;
  &amp;amp;lt;div class=&amp;quot;code&amp;quot;&amp;amp;gt;&amp;amp;lt;pre&amp;amp;gt;&lt;br /&gt;
  v.to.db map=soils type=area option=area col=area_size unit=h&lt;br /&gt;
  &amp;amp;lt;/pre&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML codes ==&lt;br /&gt;
&lt;br /&gt;
The g.html2man tool is used to generate man pages from the HTML help files.&lt;br /&gt;
&lt;br /&gt;
* The following html codes are understood to some extent by g.html2man (brackets removed): A, B, BLINK, BODY, BR, CODE, DD, DL, DT, EM, H2, H3, H4, HEAD, HEADER, HR, I, IMG, LI, OL, P, PRE, SUP, TABLE, TD, TH, TITLE, TR, UL.&lt;br /&gt;
&lt;br /&gt;
* Others may be added to g.html2man as required.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating and submitting a patch ==&lt;br /&gt;
&lt;br /&gt;
* See the [[Patches]] wiki page&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
Currently there is no framework for translating the help pages.&lt;br /&gt;
&lt;br /&gt;
Idea: use an online translator such as AltaVista's Babelfish service or Google Translate.&lt;br /&gt;
&lt;br /&gt;
: The top part of the page (generated by `g.module --html-description`) is translated by the $LANG variable and &amp;lt;grass/glocale.h&amp;gt;, so we should not be attempting to automatically translate the option and modules names. The idea for a two part translation is to make a modified version of tools/mkhtml.sh which (if ./config'd --with-nls) loops through major languages and creates html pages like $GISBASE/docs/html/de/, $GISBASE/docs/html/es/,... but instead of just pasting the english &amp;lt;module&amp;gt;.html files to the bottom have it save those as g.module_descr_en.html in a common dir.&lt;br /&gt;
: The translated help pages (generated with mkhtml_i18n.sh) would contain a lower frame which calls an online translation of the g.module_descr_en.html page from e.g. ibiblio.org/grass63/html_docs/en_descr/g.module_descr_en.html with the appropriate &amp;quot;lp=en_de&amp;quot; setting in the bablefish URL.&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Examples of live whole-page translations for GRASS 6.3 help pages:&lt;br /&gt;
* Chinese- Simplified [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_zh&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Czh-CN&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Chinese- Traditional [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_zt&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Czh-TW&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Dutch [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_nl&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cnl&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* French [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_fr&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cfr&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* German [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_de&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cde&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Greek [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_el&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cel&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Italian [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_it&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cit&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Japanese [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_ja&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cja&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Korean [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_ko&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cko&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Portuguese [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_pt&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cpt&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Russian [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_ru&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cru&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Spanish [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_es&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Ces&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
=== Ideas for a translation framework ===&lt;br /&gt;
&lt;br /&gt;
The above idea really sucks IMHO. Better not to have translated documentation at all than babelfish. --[[User:Steko|Steko]] 13:12, 18 February 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
A '''true''' translation framework for translation of both interface and documentation would be structured like this:&lt;br /&gt;
*  web interface based on '''[http://translate.sourceforge.net/wiki/pootle/index pootle]''', to make contributions easy also for non-tech people (gettext, html, etc)&lt;br /&gt;
* for documentation use '''[http://po4a.alioth.debian.org/ po4a]''', that can be integrated with pootle.&lt;br /&gt;
&lt;br /&gt;
== A brief guide to valid HTML ==&lt;br /&gt;
&lt;br /&gt;
While web browsers will happily accept invalid HTML, the tools used to convert HTML documentation to Unix manual pages won't. For that reason, please try to ensure that the documentation is valid HTML, not just whatever your browser accepts.&lt;br /&gt;
&lt;br /&gt;
If you have [http://openjade.sourceforge.net/ OpenSP/OpenJade], you can validate an HTML file with&lt;br /&gt;
e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nsgmls -s -c /usr/share/sgml/openjade-1.3.2/pubtext/HTML4.soc &amp;lt;filename&amp;gt;.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[The program may be called nsgmls or onsgmls, and the exact location&lt;br /&gt;
where the catalogues are installed will vary.]&lt;br /&gt;
&lt;br /&gt;
This needs to be done on the completed HTML file in&lt;br /&gt;
dist.&amp;lt;arch&amp;gt;/docs/html; the &amp;lt;module&amp;gt;.html files in the module&lt;br /&gt;
directories won't normally validate, as they lack the header which is&lt;br /&gt;
added by running the module with the --html-description.&lt;br /&gt;
&lt;br /&gt;
The most common error is using block elements (e.g. &amp;amp;lt;div&amp;gt;,&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;, &amp;amp;lt;p&amp;gt;) in contexts where only inline elements are allowed&lt;br /&gt;
(e.g. &amp;amp;lt;dt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The definitive reference of which elements are allowed where is the &lt;br /&gt;
'''[http://www.w3.org/TR/1998/REC-html40-19980424/sgml/loosedtd.html HTML 4.0 Transitional DTD]'''&lt;br /&gt;
&lt;br /&gt;
E.g. the definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;!ELEMENT DT - O (%inline;)*           -- definition term --&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
indicates that only inline elements are allowed inside DT, while e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;!ELEMENT DD - O (%flow;)*             -- definition description --&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
indicates that both block and inline elements are allowed inside DD.&lt;br /&gt;
&lt;br /&gt;
If you don't want to read the DTD, here's a rough summary:&lt;br /&gt;
&lt;br /&gt;
Entity classes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	%StyleSheet	= &amp;lt;CSS stylesheet&amp;gt;&lt;br /&gt;
	%Script		= &amp;lt;JavaScript code&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	%html.content	= HEAD, BODY&lt;br /&gt;
	%head.content	= TITLE, ISINDEX, BASE&lt;br /&gt;
	%heading	= H1, H2, H3, H4, H5, H6&lt;br /&gt;
	%fontstyle	= TT, I, B, U, S, STRIKE, BIG, SMALL&lt;br /&gt;
	%phrase		= EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR,&lt;br /&gt;
			  ACRONYM&lt;br /&gt;
	%special	= A, IMG, APPLET, OBJECT, FONT, BASEFONT, BR, SCRIPT,&lt;br /&gt;
			  MAP, Q, SUB, SUP, SPAN, BDO, IFRAME&lt;br /&gt;
	%formctrl	= INPUT, SELECT, TEXTAREA, LABEL, BUTTON&lt;br /&gt;
	%list		= UL, OL,  DIR, MENU&lt;br /&gt;
	%head.misc	= SCRIPT, STYLE, META, LINK, OBJECT&lt;br /&gt;
	%pre.exclusion	= IMG, OBJECT, APPLET, BIG, SMALL, SUB, SUP,&lt;br /&gt;
			  FONT, BASEFONT&lt;br /&gt;
	%preformatted	= PRE&lt;br /&gt;
	%block		= P, DL, DIV, CENTER, NOSCRIPT, NOFRAMES,&lt;br /&gt;
			  BLOCKQUOTE, FORM, ISINDEX, HR, TABLE, FIELDSET,&lt;br /&gt;
			  ADDRESS, %heading, %list, %preformatted&lt;br /&gt;
	%inline		= #PCDATA, %fontstyle, %phrase, %special, %formctrl&lt;br /&gt;
	%flow		= %block, %inline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The immediate children permitted for each element are:&lt;br /&gt;
&amp;lt;pre&amp;gt;	&lt;br /&gt;
	A:		%inline&lt;br /&gt;
	ABBR:		%inline&lt;br /&gt;
	ACRONYM:	%inline&lt;br /&gt;
	ADDRESS:	%inline, P&lt;br /&gt;
	APPLET:		%flow, PARAM&lt;br /&gt;
	B:		%inline&lt;br /&gt;
	BDO:		%inline&lt;br /&gt;
	BIG:		%inline&lt;br /&gt;
	BLOCKQUOTE:	%flow&lt;br /&gt;
	BODY:		%flow, INS, DEL&lt;br /&gt;
	BUTTON:		%flow&lt;br /&gt;
	CAPTION:	%inline&lt;br /&gt;
	CENTER:		%flow&lt;br /&gt;
	CITE:		%inline&lt;br /&gt;
	CODE:		%inline&lt;br /&gt;
	COLGROUP:	COL&lt;br /&gt;
	DD:		%flow&lt;br /&gt;
	DEL:		%flow&lt;br /&gt;
	DFN:		%inline&lt;br /&gt;
	DIR:		LI&lt;br /&gt;
	DIV:		%flow&lt;br /&gt;
	DL:		DT, DD&lt;br /&gt;
	DT:		%inline&lt;br /&gt;
	EM:		%inline&lt;br /&gt;
	FIELDSET:	%flow, LEGEND&lt;br /&gt;
	FONT:		%inline&lt;br /&gt;
	FORM:		%flow&lt;br /&gt;
	FRAMESET:	FRAMESET, FRAME, NOFRAMES&lt;br /&gt;
	H1:		%inline&lt;br /&gt;
	H2:		%inline&lt;br /&gt;
	H3:		%inline&lt;br /&gt;
	H4:		%inline&lt;br /&gt;
	H5:		%inline&lt;br /&gt;
	H6:		%inline&lt;br /&gt;
	HEAD:		%head.content, %head.misc&lt;br /&gt;
	HTML:		%html.content&lt;br /&gt;
	I:		%inline&lt;br /&gt;
	IFRAME:		%flow&lt;br /&gt;
	INS:		%flow&lt;br /&gt;
	KBD:		%inline&lt;br /&gt;
	LABEL:		%inline&lt;br /&gt;
	LEGEND:		%inline&lt;br /&gt;
	LI:		%flow&lt;br /&gt;
	MAP:		%block, AREA&lt;br /&gt;
	MENU:		LI&lt;br /&gt;
	NOFRAMES:	%flow&lt;br /&gt;
	NOSCRIPT:	%flow&lt;br /&gt;
	OBJECT:		%flow, PARAM&lt;br /&gt;
	OL:		LI&lt;br /&gt;
	OPTGROUP:	OPTION&lt;br /&gt;
	OPTION:		#PCDATA&lt;br /&gt;
	P:		%inline&lt;br /&gt;
	PRE:		%inline&lt;br /&gt;
	Q:		%inline&lt;br /&gt;
	S:		%inline&lt;br /&gt;
	SAMP:		%inline&lt;br /&gt;
	SCRIPT:		%Script&lt;br /&gt;
	SELECT:		OPTGROUP, OPTION&lt;br /&gt;
	SMALL:		%inline&lt;br /&gt;
	SPAN:		%inline&lt;br /&gt;
	STRIKE:		%inline&lt;br /&gt;
	STRONG:		%inline&lt;br /&gt;
	STYLE:		%StyleSheet&lt;br /&gt;
	SUB:		%inline&lt;br /&gt;
	SUP:		%inline&lt;br /&gt;
	TABLE:		CAPTION, COL, COLGROUP, THEAD, TFOOT, TBODY&lt;br /&gt;
	TBODY:		TR&lt;br /&gt;
	TD:		%flow&lt;br /&gt;
	TEXTAREA:	#PCDATA&lt;br /&gt;
	TFOOT:		TR&lt;br /&gt;
	TH:		%flow&lt;br /&gt;
	THEAD:		TR&lt;br /&gt;
	TITLE:		#PCDATA&lt;br /&gt;
	TR:		TH, TD&lt;br /&gt;
	TT:		%inline&lt;br /&gt;
	U:		%inline&lt;br /&gt;
	UL:		LI&lt;br /&gt;
	VAR:		%inline&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Some elements don't allow certain elements as descendents:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	A:		A&lt;br /&gt;
	BUTTON:		%formctrl, A, FORM, ISINDEX, FIELDSET, IFRAME&lt;br /&gt;
	DIR:		%block&lt;br /&gt;
	FORM:		FORM&lt;br /&gt;
	LABEL:		LABEL&lt;br /&gt;
	MENU:		%block&lt;br /&gt;
	PRE:		%pre.exclusion&lt;br /&gt;
	TITLE:		%head.misc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The children of DIR/MENU are LI, which is a block element, but those LI can't contain block elements. UL/OL don't have this restriction.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;DT cannot contain block elements, but DD can. This means that you can't use &amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt; in a DT; use &amp;lt;span class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;tt&amp;gt; instead. DIV and PRE are block elements; SPAN and TT are inline.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;TABLE cannot have TR as a child. But TBODY can have TR, and TBODY allows both the start and end tags to be omitted, so &amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;....&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; is really just a shorthand for &amp;lt;table&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;.... &amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;P cannot contain blocks. So &amp;lt;p&amp;gt;...&amp;lt;div&amp;gt; is actually shorthand for &amp;lt;p&amp;gt;...&amp;lt;/p&amp;gt;&amp;lt;div&amp;gt;. But &amp;lt;p&amp;gt;...&amp;lt;div&amp;gt;...&amp;lt;/div&amp;gt;...&amp;lt;/p&amp;gt; is an error, as the &amp;lt;/p&amp;gt; doesn't match any open element (the &amp;lt;div&amp;gt; implicitly closed the original &amp;lt;p&amp;gt;, and P doesn't allow the start tag to be omitted).&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* HTML, HEAD, BODY, and TBODY allow the start tag to be omitted. With the exception of TBODY, this feature shouldn't be used (it's a nuisance to implement if the number of valid child tags is large).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Job offer [[Project_jobs#Documentation_manager_.28open.29|Documentation manager]]&lt;br /&gt;
&lt;br /&gt;
* [[Development#Documentation|Doxygen generated help]] from the source code for the [http://grass.itc.it/devel/index.php#prog Programmers' Manual].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=Updating_GRASS_Documentation&amp;diff=7396</id>
		<title>Updating GRASS Documentation</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=Updating_GRASS_Documentation&amp;diff=7396"/>
		<updated>2008-08-20T10:58:08Z</updated>

		<summary type="html">&lt;p&gt;⚠️Glynn: Change description.html references to &amp;lt;module.html&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How-to for Updating GRASS Manual Pages =&lt;br /&gt;
&lt;br /&gt;
* [http://trac.osgeo.org/grass/browser/grass/trunk/doc/html_documentation.txt doc/html_documentation.txt] from the GRASS source code&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&amp;lt;!-- from the SUBMITTING file, rule 23 --&amp;gt;&lt;br /&gt;
Module manual page:&lt;br /&gt;
&lt;br /&gt;
Place the documentation in HTML format into '&amp;lt;module&amp;gt;.html', where&lt;br /&gt;
&amp;lt;module&amp;gt; is the name of the module. E.g. if the module is named&lt;br /&gt;
r.example, the documentation file should be named r.example.html.&lt;br /&gt;
&lt;br /&gt;
The easiest way to do this is to study an existing HTML page&lt;br /&gt;
(to get the page style, e.g. vector/v.to.db/v.to.db.html).&lt;br /&gt;
With a few exceptions header and footer are NOT allowed.&lt;br /&gt;
You can add figures (PNG format), the figure name prefix should be the &lt;br /&gt;
module name. See raster/r.terraflow/r.terraflow.html for an example.&lt;br /&gt;
&lt;br /&gt;
Note that the parameter information is auto-generated upon&lt;br /&gt;
compilation. This is done by running module in a virtual session&lt;br /&gt;
after compilation (see the output of 'make'). To subsequently&lt;br /&gt;
verify the final HTML page, check the resulting HTML pages which&lt;br /&gt;
will be stored with the name of the module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The online WWW man pages will be updated every Saturday by SVN.&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page will provide general step-by-step instructions for updating and improving GRASS manual pages. Feel free to update and improve this page as well! See also [http://trac.osgeo.org/grass/browser/grass/trunk/SUBMITTING_DOCS SUBMITTING_DOCS] in the source code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As an example, the vector program v.in.ascii will be used to illustrate the steps required to update its manual page. These steps can then be generalized for your case.&lt;br /&gt;
&lt;br /&gt;
== Getting the latest source ==&lt;br /&gt;
&lt;br /&gt;
* To begin, you must obtain the latest GRASS source code from the Subversion repositories. Detailed instructions on how to do so can be found [http://trac.osgeo.org/grass/wiki/DownloadSource here.]&lt;br /&gt;
* Once you have downloaded the SVN source code, open a terminal and change directory to where the source for a specific GRASS module is located - in this example, something like:&lt;br /&gt;
 cd /your_svn_directory/grass6/vector/v.in.ascii&lt;br /&gt;
&lt;br /&gt;
* Open a text editor and make your edits to &amp;lt;module&amp;gt;.html. Do not use a &amp;quot;WYSYWIG&amp;quot; HTML editor on those files, but either a normal text editor or something which is designed for editing HTML ''source'' (e.g. [X]Emacs' html-mode or psgml-mode). Save your edits by overwriting the original &amp;lt;module&amp;gt;.html.&lt;br /&gt;
&lt;br /&gt;
== Help page sections ==&lt;br /&gt;
&lt;br /&gt;
Please use the following section list as a ''guideline''.&lt;br /&gt;
The intent is to promote a unified user experience, not to limit the flow of information. If exceptions are needed, please use them sparingly.&lt;br /&gt;
Minor sections (&amp;amp;lt;H3&amp;amp;gt;, etc) may be free-form, as required.&lt;br /&gt;
&lt;br /&gt;
=== Auto-generated ===&lt;br /&gt;
Modules using the parser interface will have these sections automatically generated from '&amp;lt;tt&amp;gt;g.module&amp;amp;nbsp;--html-description&amp;lt;/tt&amp;gt;'&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;NAME&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;KEYWORDS&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;H2&amp;gt;SYNOPSIS&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Found in &amp;lt;module&amp;gt;.html ===&lt;br /&gt;
A number of major sections should be present in each help page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* = Required&lt;br /&gt;
! = Suggested&lt;br /&gt;
. = Optional&lt;br /&gt;
&lt;br /&gt;
In recommended order&lt;br /&gt;
--------------------&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;H2&amp;gt;DESCRIPTION&amp;lt;/H2&amp;gt;&lt;br /&gt;
! &amp;lt;H2&amp;gt;NOTE&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;NOTES&amp;lt;/H2&amp;gt;&lt;br /&gt;
! &amp;lt;H2&amp;gt;EXAMPLE&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;EXAMPLES&amp;lt;/H2&amp;gt;&lt;br /&gt;
. &amp;lt;H2&amp;gt;TODO&amp;lt;/H2&amp;gt;&lt;br /&gt;
. &amp;lt;H2&amp;gt;BUGS&amp;lt;/H2&amp;gt;&lt;br /&gt;
. &amp;lt;H2&amp;gt;REFERENCE&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;REFERENCES&amp;lt;/H2&amp;gt;&lt;br /&gt;
* &amp;lt;H2&amp;gt;SEE ALSO&amp;lt;/H2&amp;gt;&lt;br /&gt;
* &amp;lt;H2&amp;gt;AUTHOR&amp;lt;/H2&amp;gt;, &amp;lt;H2&amp;gt;AUTHORS&amp;lt;/H2&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Images ==&lt;br /&gt;
&lt;br /&gt;
* Images can also be inserted in the html help page. See [http://grass.itc.it/grass63/manuals/html63_user/v.voronoi.html v.voronoi] for an example. Note that images won't show up in the Grass ''man'' pages (which are generated from the HTML), so they shouldn't be considered a substitute for an adequate textual description. Be sure to also send the image (preferably png format) along with your documentation patch.&lt;br /&gt;
&lt;br /&gt;
PNG files are best for figures with solid chunks of a single color. They can get rather large for imagery. In those cases JPEGs are a better choice. In general JPEG is a lossy format so the image quality will not be as good.&lt;br /&gt;
&lt;br /&gt;
To help keep the source distribution size small, try and keep the images small and the files under 50kb or so. Save PNGs at a compression setting of &amp;quot;9&amp;quot; with a minimal color pallet, you can also use tools like&lt;br /&gt;
&amp;lt;tt&amp;gt;pngcrush&amp;lt;/tt&amp;gt; to compress them further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
For non trivial modules please provide an example of the command line usage. It is good to have this double as a mini-tutorial, so please use one of the sample datasets (Spearfish or the new North Carolina one) or common dataset such as NASA's WMS or SRTM data files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Examples should be coded like this:&lt;br /&gt;
&lt;br /&gt;
  &amp;amp;lt;div class=&amp;quot;code&amp;quot;&amp;amp;gt;&amp;amp;lt;pre&amp;amp;gt;&lt;br /&gt;
  v.to.db map=soils type=area option=area col=area_size unit=h&lt;br /&gt;
  &amp;amp;lt;/pre&amp;amp;gt;&amp;amp;lt;/div&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HTML codes ==&lt;br /&gt;
&lt;br /&gt;
The g.html2man tool is used to generate man pages from the HTML help files.&lt;br /&gt;
&lt;br /&gt;
* The following html codes are understood to some extent by g.html2man (brackets removed): A, B, BLINK, BODY, BR, CODE, DD, DL, DT, EM, H2, H3, H4, HEAD, HEADER, HR, I, IMG, LI, OL, P, PRE, SUP, TABLE, TD, TH, TITLE, TR, UL.&lt;br /&gt;
&lt;br /&gt;
* Others may be added to g.html2man as required.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating and submitting a patch ==&lt;br /&gt;
&lt;br /&gt;
* See the [[Patches]] wiki page&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
Currently there is no framework for translating the help pages.&lt;br /&gt;
&lt;br /&gt;
Idea: use an online translator such as AltaVista's Babelfish service or Google Translate.&lt;br /&gt;
&lt;br /&gt;
: The top part of the page (generated by `g.module --html-description`) is translated by the $LANG variable and &amp;lt;grass/glocale.h&amp;gt;, so we should not be attempting to automatically translate the option and modules names. The idea for a two part translation is to make a modified version of tools/mkhtml.sh which (if ./config'd --with-nls) loops through major languages and creates html pages like $GISBASE/docs/html/de/, $GISBASE/docs/html/es/,... but instead of just pasting the english &amp;lt;module&amp;gt;.html files to the bottom have it save those as g.module_descr_en.html in a common dir.&lt;br /&gt;
: The translated help pages (generated with mkhtml_i18n.sh) would contain a lower frame which calls an online translation of the g.module_descr_en.html page from e.g. ibiblio.org/grass63/html_docs/en_descr/g.module_descr_en.html with the appropriate &amp;quot;lp=en_de&amp;quot; setting in the bablefish URL.&lt;br /&gt;
: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Examples of live whole-page translations for GRASS 6.3 help pages:&lt;br /&gt;
* Chinese- Simplified [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_zh&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Czh-CN&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Chinese- Traditional [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_zt&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Czh-TW&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Dutch [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_nl&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cnl&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* French [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_fr&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cfr&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* German [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_de&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cde&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Greek [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_el&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cel&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Italian [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_it&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cit&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Japanese [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_ja&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cja&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Korean [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_ko&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cko&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Portuguese [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_pt&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cpt&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Russian [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_ru&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Cru&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
* Spanish [http://babelfish.altavista.com/babelfish/trurl_load?lp=en_es&amp;amp;url=http%3A%2F%2Fgrass.ibiblio.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html AltaVista] - [http://translate.google.com/translate?u=http%3A%2F%2Fgrass.osgeo.org%2Fgrass63%2Fmanuals%2Fhtml63_user%2Findex.html&amp;amp;langpair=en%7Ces&amp;amp;hl=en&amp;amp;ie=UTF8 Google]&lt;br /&gt;
=== Ideas for a translation framework ===&lt;br /&gt;
&lt;br /&gt;
The above idea really sucks IMHO. Better not to have translated documentation at all than babelfish. --[[User:Steko|Steko]] 13:12, 18 February 2008 (CET)&lt;br /&gt;
&lt;br /&gt;
A '''true''' translation framework for translation of both interface and documentation would be structured like this:&lt;br /&gt;
*  web interface based on '''[http://translate.sourceforge.net/wiki/pootle/index pootle]''', to make contributions easy also for non-tech people (gettext, html, etc)&lt;br /&gt;
* for documentation use '''[http://po4a.alioth.debian.org/ po4a]''', that can be integrated with pootle.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* Job offer [[Project_jobs#Documentation_manager_.28open.29|Documentation manager]]&lt;br /&gt;
&lt;br /&gt;
* [[Development#Documentation|Doxygen generated help]] from the source code for the [http://grass.itc.it/devel/index.php#prog Programmers' Manual].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>⚠️Glynn</name></author>
	</entry>
</feed>