123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- /*! \mainpage GRASS 7 Programmer's Manual
- <!-- * doxygenized from "GRASS 5 Programmer's Manual"
- by M. Neteler 2/2004
- * updated 8/2005, 2006, 2007, 2008, 2010
- -->
- <a href="http://grass.osgeo.org">GRASS GIS</a> (<b>Geographic
- Resources Analysis Support System</b>) is an open source, Free
- Software <em>Geographical Information System</em> (GIS) with raster,
- topological %vector, image processing, and graphics production
- functionality that operates on various platforms through a graphical
- user interface (GUI) or command line interface (CLI). It is released
- under GNU General Public License (GPL).
- This manual introduces the reader to the <i>Geographic Resources
- Analysis Support System</i> from the programming perspective. Design
- theory, system support libraries, system maintenance, and system
- enhancement are all presented. Standard GRASS 4.x conventions are
- still used in much of the code. This work is part of ongoing research
- being performed by the <a
- href="http://grass.osgeo.org/community/team.php">GRASS Development
- Team</a>, an international team of programmers, GRASS module authors
- are cited within their module's source code and the contributed manual
- pages.
- © 2000-2011 GRASS Development Team
- Published under <a href="http://www.fsf.org/copyleft/fdl.html">GNU Free Documentation License</a> (GFDL)
- This manual comes with ABSOLUTELY NO WARRANTY. The development of
- GRASS software and this manual is kindly supported by the <a
- href="http://www.osgeo.org">Open Source Geospatial Foundation</a>, who
- provides the GRASS main infrastructure.
- Main web site: <a href="http://grass.osgeo.org">http://grass.osgeo.org</a>
- <b>Table of contents</b>
- - \subpage corelibs
- - \subpage libs
- - \subpage interfaces
- - \subpage gui
- - \subpage location
- - \subpage Compiling_and_Installing_GRASS_Modules
- - \subpage Makefile_Variables
- - \subpage Constructing_a_Makefile
- - \subpage Multiple_Architecture_Conventions
- - \subpage vectmodules
- - \subpage vectmodules_oper
- <i>Missing entries below are either not yet uploaded to SVN (need to
- be migrated from GRASS 5 Programmer's manual) or are simply
- undocumented.</i>
- <!-- original:
- http://trac.osgeo.org/grass/browser/grass-web/trunk/images/grass7_arch.odp
- -->
- \image html "grass7_arch.png" "GRASS 7 Architecture"
- <b>PLEASE UPDATE FOR GRASS 7</b>
- \section corelibs Principal library
- (the name refers to the directory name in lib/ in the source code)
- - gis: \ref gislib
- - raster: \ref rasterlib
- - vector: \ref vectorlib
- \section libs Further libraries
- (the name refers to the directory name in lib/ in the source code)
- - arraystats: Library of statistics for arrays of doubles - \ref arraystats (new, under development)
- - bitmap: Bitmap library for X Window Bitmaps - \ref bitmap
- - btree: Binary tree library - \ref btree
- - cairodriver: \ref cairodriver
- - cdhc: Library for testing normality and exponentiality - \ref cdhc
- - cluster: \ref clusterlib (image processing)
- - datetime: DateTime library - \ref datetime
- - db: \ref dbmilib
- - display: \ref displaylib
- - %driver: Graphics monitor driver
- - dspf: DSPF libary - \ref dspf (obsolete?)
- - edit: Raster edit library (cellhd, history, cats) - \ref edit
- - external: External libraries from other projects (such as shapelib) - \ref external
- - fonts: Hershey library - \ref fonts
- - g3d: \ref g3dlib
- - gmath: \ref gmathlib (generic mathematical functions and BLAS/LAPACK library wrapper)
- - gpde: \ref gpdelib (partial differential equations library)
- - imagery: \ref imagerylib
- - init: \ref init (GRASS initialization code + scripts)
- - linkm: Linked list memory manager - \ref linkm (obsolete?)
- - ogsf: \ref ogsflib (OpenGL (R) ported gsurf library (required for NVIZ))
- - pngdriver: PNG display driver library - \ref pngdriver
- - proj: \ref projlib (wrapper to PROJ4 projection library)
- - psdriver: PostScript display driver library - \ref psdriver
- - python: \ref pythonlib
- - raster: \ref rasterlib
- - rowio: \ref rowiolib
- - rst: Library for interpolation with regularized splines with tension - \ref rst
- - segment: \ref segmentlib (segment library for segmented raster reading)
- - sites: Old Sites library, now interfaced to \ref vectorlib - \ref sites
- - stats: Raster stats library - \ref stats
- - symbol: Drawing symbols for %point %vector data library - \ref symbol
- - vask: Cursor management library - \ref vask
- - %vector: \ref vectorlib (GRASS Vector and Direct Graph Library)
- - vedit: \ref veditlib - %vector editing
- - neta: \ref netalib
- - nviz: \ref nvizlib (used by wxGUI Nviz extension and CLI-based Nviz module)
- \section interfaces Interfaces
- - \ref pythonlib
- \section gui GUI
- - \ref wxpythonlib
- \section location File structure of GRASS Location
- A GRASS <b>raster map</b> consists of several files in several subdirectories in a mapset,
- organized as follows:
- - <b>cellhd/</b>:
- map header including projection code, coordinates representing
- the spatial extent of the raster map, number of rows and columns, resolution,
- and information about map compression;</li>
- - <b>cell/, fcell/ or grid3/</b>:
- generic matrix of values in a compressed, portable
- format which depends on the raster data type (integer, floating %point or 3D grid);</li>
- - <b>hist/</b>:
- history file which contains metadata such as the data source,
- the command that was used to generate the raster map, or
- other information provided by the user;</li>
- - <b>cats/</b>:
- optional category file which contains text or numeric labels assigned
- to the raster map categories;</li>
- - <b>colr/</b>:
- optional color table;</li>
- - <b>cell_misc/</b>:
- optional timestamp, range of values, quantization rules (for floating %point maps)
- and null (no-data) files; </li>
- A GRASS <b>%vector maps</b> are stored in several separate files in a
- single directory (see \ref vectorlib). While the
- attributes are stored in either a DBF file, a SQLite file or in an
- external DBMS (PostgreSQL, MySQL, ODBC), the geometric data are saved
- as follows:
- - <b>head</b>: %vector map ASCII header with information about the map creation
- (date and name), its scale and threshold;</li>
- - <b>coor</b>: binary geometry file which includes the coordinates of graphic
- elements (primitives) that define the %vector feature;</li>
- - <b>topo</b>: binary topology file describes the spatial relationships between the
- map's graphic elements;</li>
- - <b>hist</b>: history ASCII file with complete commands that were used to
- create the %vector map, as well as the name and date/time of the map
- creation;</li>
- - <b>cidx</b>: binary category index file which is used to %link the %vector
- object IDs to the attribute table rows;</li>
- - <b>dbln</b>: ASCII file which contains definition(s) of %link to attribute
- storage in database (DBMS).</li>
- <!-- original:
- http://trac.osgeo.org/grass/browser/grass-web/trunk/images/loc_struct.odg
- -->
- \image html "loc_struct.png" "Diagram of GRASS file structure"
- \section Compiling_and_Installing_GRASS_Modules Compiling and Installing GRASS Modules
- GRASS modules are compiled and installed using the UNIX <tt>make</tt>
- command, which reads a file named <tt>Makefile</tt> (see \ref
- Multiple_Architecture_Conventions for more information) and then runs
- the compiler. The GRASS compilation process allows for
- multiple-architecture compilation from a single copy of the source
- code (for instance, if the source code is NFS mounted to various
- machines with differing architectures). This chapter assumes that the
- programmer is familiar with <tt>make</tt> and its accompanying
- Makefile.
- \todo Explain ''auto-conf''
- \todo Include contents of SUBMITTING and INSTALL files from source code
- To compile enter following:
- \verbatim
- ./configure
- make
- make install
- \endverbatim
- Then the code will be compiled into "/usr/local/grass-7.x.y" directory. The start
- script "grass7x" will be placed into "/usr/local/bin/".
- Optionally other target directories can be specified while "configuring":
- \verbatim
- ./configure --prefix=/opt/grass-7.x.y --with-bindir=/usr/bin
- make
- make install
- \endverbatim
- This will store the GRASS binaries into the directory
- "/opt/grass-7.x.y" and the script mentioned above into "/usr/bin".
- The script "make" is required to compile single modules. The
- compilation process and requirements are discussed in more detail now.
- \subsection Makefile_Variables Makefile Variables
- \todo Update the list.
- <b>GRASS Libraries</b>. The following variables name the various GRASS
- libraries:
- - <i>GISLIB</i> - This names the <b>GIS Library</b>, which is the
- principal GRASS library. See \ref GIS_Library for details about this
- library, and \ref Loading_the_GIS_Library for a sample Makefile which
- loads this library.
- - <i>SEGMENTLIB</i> - This names the <b>Segment Library</b>, which
- manages large matrix data. See \ref Segment_Library for details about
- this library, and \ref Loading_the_Vask_Library for a sample
- <i>Makefile</i> which loads this library.
- - <i>RASTERLIB</i> - This names the <b>Raster Graphics Library</b>,
- which communicates with GRASS graphics drivers. See \ref
- Raster_Graphics_Library for details about this library, and \ref
- Loading_the_Raster_Graphics_Library for a sample <i>Makefile</i> which
- loads this library.
- - <i>DISPLAYLIB</i> - This names the <b>Display Graphics Library</b>,
- which provides a higher level graphics interface to
- <i>RASTERLIB</i>. See Display_Graphics_Library for details about this
- library, and Loading_the_Display_Graphics_Library for a sample
- <i>Makefile</i> which loads this library.
- <b>UNIX Libraries:</b> The following variables name some useful UNIX
- system libraries:
- - <i>MATHLIB</i> This names the math library. It should be used
- instead of the -lm loader option.
- - <i>CURSES</i> This names both the curses and termcap libraries. It
- should be used instead of the -lcurses/-lncurses and
- -ltermcap loader options. Do not use <tt>$CURSES</tt> if you use
- <tt>$VASK</tt>.
- - <i>TERMLIB</i> This names the termcap library. It should be used
- -instead of the ltermcap or -ltermlib loader options. Do not use
- -<tt>$TERMLIB</tt> if you use <tt>$VASK</tt> or <tt>$CURSES</tt>.
- <b>Compiler and loader variables.</b> The following variables are
- related to compiling and loading C programs:
- - <i>EXTRA\_CFLAGS</i> This variable can be used to add additional
- options to <tt>$CFLAGS</tt>. It has no predefined values. It is
- usually used to specify additional -I include directories, or -D
- preprocessor defines.
- \subsection Constructing_a_Makefile Constructing a Makefile
- The complete syntax for a <i>Makefile</i> is discussed in the UNIX
- documentation for <tt>make</tt> and will not be repeated here. The
- essential idea is that a target (e.g. a GRASS module) is to be built
- from a list of dependencies (e.g. object files, libraries, etc.). The
- relationship between the target, its dependencies, and the rules for
- constructing the target is expressed according to the following
- syntax:
- \code
- target: dependencies
- actions
- more actions
- \endcode
- If the target does not exist, or if any of the dependencies have a newer
- date than the target (i.e., have changed), the actions will be executed to
- build the target. The actions must be indented using a TAB. <tt>make</tt> is
- picky about this. It does not like spaces in place of the TAB.
- \section Multiple_Architecture_Conventions Multiple-Architecture Conventions
- The following conventions allow for multiple architecture compilation on a
- machine that uses a common or networked GRASS source code directory tree.
- Object files and library archives are compiled into subdirectories
- that represent the architecture that they were compiled on. These
- subdirectories are created in the $SRC directory as OBJ.<tt>arch</tt>
- and LIB.<tt>arch</tt>, where <tt>arch</tt> represents the architecture
- of the compiling machine. Thus, for example, $SRC/OBJ.sun4 would
- contain the object files for Sun/4 and SPARC architectures, and
- <tt>$SRC/LIB.686-pc-linux-gnu</tt> would contain library archives for
- Linux architectures. Likewise, <tt>$SRC/OBJ.686-pc-linux-gnu</tt>
- would contain the object files for Linux architectures, and
- <tt>$SRC/LIB.686-pc-linux-gnu</tt> would contain library archives for
- Linux architectures.
- Note that 'arch' is defined for a specific architecture during setup and
- compilation of GRASS, it is not limited to sun4 or any specific string.
- \section vectmodules Vector modules and their parameters/flags
- A module is a GRASS command invoked by the user.
- \subsection vectmodules_oper Modules operation
- Each module which modifies and writes data must read from
- <b>input=</b> and write to <b>output=</b> so that data may not be
- lost. For example <tt>v.spag</tt> works on <b>map=</b> at in GRASS GIS
- 5.0 but if program (system) crashes or threshold was specified
- incorrectly and vector was not backuped, data were lost. In this case
- </b>map=</b> option should be replaced by <b>input=</b> and
- <b>output=</b>.
- Topology is always built by default if the coor file was modified.
- Dimensionality is generally kept. Input 2D vector is written as 2D, 3D
- as 3D. There are a few modules which change the dimension on purpose.
- \subsection vectmodulesopt Modules parameters/flags
- <b>-b</b> do not build topo file; by default topo file is written
- <b>-t</b> create new table, default
- <b>-u</b> don't create new table
- <b>-z</b> write 3D vector map (if input was 2D)
- <b>map=</b> input vector map for modules without output
- <b>input=</b> input vector map
- <b>output=</b> output vector map
- <b>type=</b> type of elements: point,line,boundary,centroid,area
- <b>cat=</b> category or category list (example: 1,5,9-13,35)
- <b>layer=</b> layer number
- <b>where=</b> condition of SQL statement for selection of records
- <b>column=</b> column name (in external table)
- */
|