grasslib.dox 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. /*! \mainpage GRASS GIS 7 Programmer's Manual
  2. <!-- * doxygenized from "GRASS 5 Programmer's Manual"
  3. by M. Neteler 2/2004
  4. * updated 8/2005, 2006-2008, 2010-2011
  5. -->
  6. <a href="http://grass.osgeo.org">GRASS GIS</a> (<b>Geographic
  7. Resources Analysis Support System</b>) is an open source, free
  8. software <em>Geographical Information System</em> (GIS) with raster,
  9. topological %vector, image processing, and graphics production
  10. functionality that operates on various platforms through a graphical
  11. user interface (GUI) or command line interface (CLI). It is released
  12. under <a href="http://www.fsf.org/copyleft/gpl.html">GNU General
  13. Public License</a> (GPL).
  14. This manual introduces the reader to the <i>Geographic Resources
  15. Analysis Support System</i> from the programming perspective. Design
  16. theory, system support libraries, system maintenance, and system
  17. enhancement are all presented. This work is part of ongoing research
  18. being performed by the <a
  19. href="http://grasswiki.osgeo.org/wiki/Team">GRASS Development
  20. Team</a>, an international team of programmers, GRASS module authors
  21. are cited within their module's source code and the contributed manual
  22. pages.
  23. &copy; 2000-2016 by the GRASS Development Team
  24. This manual is published under <a
  25. href="http://www.fsf.org/copyleft/fdl.html">GNU Free Documentation
  26. License</a> (GFDL), and comes with ABSOLUTELY NO WARRANTY. The
  27. development of GRASS software and this manual is kindly supported by
  28. the <a href="http://www.osgeo.org">Open Source Geospatial
  29. Foundation</a>, who provides the GRASS main infrastructure.
  30. Main web site: <a
  31. href="http://grass.osgeo.org">http://grass.osgeo.org</a>
  32. <i>Note: Missing entries below still need to be documented in Doxygen format.</i>
  33. <!-- original:
  34. http://trac.osgeo.org/grass/browser/grass-web/trunk/images/grass7_arch.odp
  35. -->
  36. \image html "grass7_arch.png" "GRASS 7 Architecture"
  37. \section libsOverview Libraries
  38. \section corelibs Core libraries
  39. (the name refers to the directory name in <tt>lib/</tt> in the source code)
  40. - gis: \ref gislib
  41. - raster: \ref rasterlib
  42. - vector: \ref vectorlib
  43. - Temporal GIS API: See http://grass.osgeo.org/grass71/manuals/libpython/temporal_framework.html
  44. \section interfaces Interfaces
  45. - Python script interface: \ref pythonlib
  46. - %PyGRASS: A Python based object oriented raster, vector library interface
  47. \section libs Further libraries
  48. (the name refers to the directory name in <tt>lib/</tt> in the source code)
  49. \subsection displaylibs Display Libraries and Drivers
  50. - display: \ref displaylib (general display library)
  51. - cairodriver: \ref cairodriver
  52. - %driver: Graphics monitor driver
  53. - htmldriver: \ref htmldriverlib (HTML graphics driver)
  54. - pngdriver: \ref pngdriverlib
  55. - psdriver: \ref psdriverlib
  56. \subsection statslibs Math and Statistics Libraries
  57. - arraystats: \ref arraystatslib (library of statistics for arrays of doubles)
  58. - cdhc: \ref cdhclib
  59. - gmath: \ref gmathlib (generic mathematical functions and BLAS/LAPACK library wrapper)
  60. - gpde: \ref gpdelib
  61. \subsection rasteribs Raster Libraries
  62. - raster: \ref rasterlib (2D raster library)
  63. - raster3d: \ref raster3dlib (3D raster aka voxels or volumes)
  64. - rowio: \ref rowiolib (library for reading/writing raster rows)
  65. - rst: \ref rstlib (library for interpolation with regularized splines with tension)
  66. - segment: \ref segmentlib (segment library for segmented raster reading)
  67. - stats: \ref statslib (statistics library)
  68. \subsection imagerylibs Imagery Libraries (image processing)
  69. - cluster: \ref clusterlib (library for k-means style of cluster analysis processing)
  70. - imagery: \ref imagerylib (library for image processing)
  71. \subsection vectoribs Vector Libraries
  72. - %vector: \ref vectorlib (architecture description)
  73. - dglib: \ref dglib
  74. - vedit: \ref veditlib (vector editing library)
  75. - neta: \ref netalib
  76. - rtree: \ref rtree.h (R search tree library)
  77. \subsection treelibs Search tree libraries
  78. - btree: \ref btree.h
  79. - btree2: \ref btree2
  80. - rtree: \ref rtree.h (R search tree library)
  81. \subsection dblibs Database Management Libraries
  82. - db: \ref dbmilib
  83. \subsection ogsflibs OpenGL Libraries and friends
  84. - ogsf: \ref ogsflib (OpenGL (R) ported gsurf library (required for NVIZ))
  85. - nviz: \ref nvizlib (used by wxGUI Nviz extension and CLI-based Nviz module)
  86. \subsection pythonlibs Python API
  87. - python: See GRASS GIS Python library (http://grass.osgeo.org/grass71/manuals/libpython/)
  88. \subsection projlibs Projection Libraries
  89. - proj: \ref projlib (wrapper to PROJ4 projection library)
  90. \subsection misclibs Miscellaneous Libraries
  91. - datetime: \ref datetime (DateTime library)
  92. - external: \ref external (External libraries from other projects such as shapelib and \ref ccmathlib)
  93. - fonts: \ref fonts (GRASS fonts library)
  94. - init: \ref init (GRASS initialization code + scripts)
  95. - iostream: \ref iostream (fast I/O library)
  96. - lidar: \ref lidar.h (LiDAR data related library)
  97. - linkm: \ref linkm (linked list memory manager)
  98. - manage: \ref managelib
  99. - symbol: \ref symbol (Drawing symbols for %point %vector data library)
  100. \section gui GUI
  101. - \ref wxpythonlib
  102. \section location File structure of GRASS Location
  103. A GRASS <b>raster map</b> consists of several files in several subdirectories in a mapset,
  104. organized as follows:
  105. <dl>
  106. <dt><b>cellhd/</b></dt>
  107. <dd>map header including projection code, coordinates representing
  108. the spatial extent of the raster map, number of rows and columns, resolution,
  109. and information about map compression;</dd>
  110. <dt><b>cell/, fcell/ or grid3/</b></dt>
  111. <dd>generic matrix of values in a compressed, portable
  112. format which depends on the raster data type (integer, floating %point or 3D grid);</dd>
  113. <dt><b>hist/</b></dt>
  114. <dd>history file which contains metadata such as the data source,
  115. the command that was used to generate the raster map, or
  116. other information provided by the user;</dd>
  117. <dt><b>cats/</b></dt>
  118. <dd>optional category file which contains text or numeric labels assigned
  119. to the raster map categories;</dd>
  120. <dt><b>colr/</b></dt>
  121. <dd>optional color table;</dd>
  122. <dt><b>cell_misc/</b></dt>
  123. <dd>optional timestamp, range of values, quantization rules (for floating %point maps)
  124. and null (no-data) files;</dd>
  125. </dl>
  126. A GRASS <b>%vector maps</b> are stored in several separate files in a
  127. single directory (see \ref vectorlib). While the
  128. attributes are stored in either a DBF file, a SQLite file or in an
  129. external DBMS (PostgreSQL, MySQL, ODBC), the geometric data are saved
  130. as follows:
  131. <dl>
  132. <dt><b>head</b></dt>
  133. <dd>%vector map ASCII header with information about the map creation
  134. (date and name), its scale and threshold;</dd>
  135. <dt><b>coor</b></dt>
  136. <dd>binary geometry file which includes the coordinates of graphic
  137. elements (primitives) that define the %vector feature;</dd>
  138. <dt><b>topo</b></dt>
  139. <dd>binary topology file describes the spatial relationships between the
  140. map's graphic elements;</dd>
  141. <dt><b>hist</b></dt>
  142. <dd>history ASCII file with complete commands that were used to
  143. create the %vector map, as well as the name and date/time of the map
  144. creation;</dd>
  145. <dt><b>cidx</b></dt>
  146. <dd>binary category index file which is used to %link the %vector
  147. object IDs to the attribute table rows;</dd>
  148. <dt><b>dbln</b></dt>
  149. <dd>ASCII file which contains definition(s) of %link to attribute
  150. storage in database (DBMS).</dd>
  151. </dl>
  152. <!-- original:
  153. http://trac.osgeo.org/grass/browser/grass-web/trunk/images/loc_struct.odg
  154. -->
  155. \image html "loc_struct.png" "Diagram of GRASS file structure"
  156. \section Compiling_and_Installing_GRASS_Modules Compiling and Installing GRASS Modules
  157. GRASS modules are compiled and installed using the UNIX <tt>make</tt>
  158. command, which reads a file named <tt>Makefile</tt> (see \ref
  159. Multiple_Architecture_Conventions for more information) and then runs
  160. the compiler. The GRASS compilation process allows for
  161. multiple-architecture compilation from a single copy of the source
  162. code (for instance, if the source code is NFS mounted to various
  163. machines with differing architectures). This chapter assumes that the
  164. programmer is familiar with <tt>make</tt> and its accompanying
  165. Makefile.
  166. <!--
  167. \todo Explain ''auto-conf''
  168. \todo Include contents of SUBMITTING and INSTALL files from source code
  169. -->
  170. To compile enter following:
  171. \verbatim
  172. ./configure
  173. make
  174. make install
  175. \endverbatim
  176. Then the code will be compiled into "/usr/local/grass-7.x.y" directory. The start
  177. script "grass7x" will be placed into "/usr/local/bin/".
  178. Optionally other target directories can be specified while "configuring":
  179. \verbatim
  180. ./configure --prefix=/opt/grass-7.x.y --with-bindir=/usr/bin
  181. make
  182. make install
  183. \endverbatim
  184. This will store the GRASS binaries into the directory
  185. "/opt/grass-7.x.y" and the script mentioned above into "/usr/bin".
  186. The script "make" is required to compile single modules. The
  187. compilation process and requirements are discussed in more detail now.
  188. \subsection Makefile_Variables Makefile Variables
  189. \todo Update the list.
  190. <b>GRASS Libraries</b>. The following variables name the various GRASS
  191. libraries:
  192. - <i>GISLIB</i> - This names the <b>GIS Library</b>, which is the
  193. principal GRASS library. See \ref gislib for details about this
  194. library, and \ref Loading_the_GIS_Library for a sample Makefile which
  195. loads this library.
  196. - <i>SEGMENTLIB</i> - This names the <b>Segment Library</b>, which
  197. manages large matrix data. See \ref segmentlib for details about this
  198. library, and \ref Loading_the_Segment_Library for a sample
  199. <i>Makefile</i> which loads this library.
  200. - <i>RASTERLIB</i> - This names the <b>Raster Library</b>, which is
  201. the principal GRASS library for raster data access. See \ref rasterlib
  202. for details about this library, and \ref Loading_the_Raster_Library
  203. for a sample <i>Makefile</i> which loads this library.
  204. - <i>VECTORLIB</i> - This names the <b>Vector Library</b>, which is
  205. the principal GRASS library for vector data access. See \ref vectorlib
  206. for details about this library, and \ref Loading_the_Vector_Library
  207. for a sample <i>Makefile</i> which loads this library.
  208. - <i>DISPLAYLIB</i> - This names the <b>Display Library</b>, which
  209. communicates with GRASS graphics drivers. See \ref displaylib for
  210. details about this library, and \ref
  211. Loading_the_Display_Library for a sample <i>Makefile</i>
  212. which loads this library.
  213. <b>UNIX Libraries:</b> The following variables name some useful UNIX
  214. system libraries:
  215. - <i>MATHLIB</i> - This names the math library. It should be used
  216. instead of the -lm loader option.
  217. <b>Compiler and loader variables.</b> The following variables are
  218. related to compiling and loading C programs:
  219. - <i>EXTRA\_CFLAGS</i> - This variable can be used to add additional
  220. options to <tt>$CFLAGS</tt>. It has no predefined values. It is
  221. usually used to specify additional -I include directories, or -D
  222. preprocessor defines.
  223. \subsection Constructing_a_Makefile Constructing a Makefile
  224. The complete syntax for a <i>Makefile</i> is discussed in the UNIX
  225. documentation for <tt>make</tt> and will not be repeated here. The
  226. essential idea is that a target (e.g. a GRASS module) is to be built
  227. from a list of dependencies (e.g. object files, libraries, etc.). The
  228. relationship between the target, its dependencies, and the rules for
  229. constructing the target is expressed according to the following
  230. syntax:
  231. \code
  232. target: dependencies
  233. actions
  234. more actions
  235. \endcode
  236. If the target does not exist, or if any of the dependencies have a
  237. newer date than the target (i.e., have changed), the actions will be
  238. executed to build the target. The actions must be indented using a
  239. TAB. <tt>make</tt> is picky about this. It does not like spaces in
  240. place of the TAB.
  241. \section Multiple_Architecture_Conventions Multiple-Architecture Conventions
  242. The following conventions allow for multiple architecture compilation
  243. on a machine that uses a common or networked GRASS source code
  244. directory tree.
  245. Object files and library archives are compiled into subdirectories
  246. that represent the architecture that they were compiled on. These
  247. subdirectories are created in the $SRC directory as OBJ.<tt>arch</tt>
  248. and LIB.<tt>arch</tt>, where <tt>arch</tt> represents the architecture
  249. of the compiling machine. Thus, for example, $SRC/OBJ.sun4 would
  250. contain the object files for Sun/4 and SPARC architectures, and
  251. <tt>$SRC/LIB.686-pc-linux-gnu</tt> would contain library archives for
  252. Linux architectures. Likewise, <tt>$SRC/OBJ.686-pc-linux-gnu</tt>
  253. would contain the object files for Linux architectures, and
  254. <tt>$SRC/LIB.686-pc-linux-gnu</tt> would contain library archives for
  255. Linux architectures.
  256. Note that 'arch' is defined for a specific architecture during setup
  257. and compilation of GRASS, it is not limited to sun4 or any specific
  258. string.
  259. \section vectmodules Vector modules and their parameters/flags
  260. A module is a GRASS command invoked by the user.
  261. \subsection vectmodules_oper Modules operation
  262. Each module which modifies and writes data must read from <b>input</b>
  263. and write to <b>output</b> so that data may not be lost. For example
  264. <tt>v.spag</tt> works on <b>map</b> at in GRASS GIS 5.0 but if program
  265. (system) crashes or threshold was specified incorrectly and vector was
  266. not backuped, data were lost. In this case <b>map</b> option should
  267. be replaced by <b>input</b> and <b>output</b>.
  268. Topology is always built by default if the coor file was modified.
  269. Dimensionality is generally kept. Input 2D vector is written as 2D, 3D
  270. as 3D. There are a few modules which change the dimension on purpose.
  271. \subsection vectmodulesopt Modules parameters/flags
  272. Flags:
  273. - <b>-b</b> do not build topo file; by default topo file is written
  274. - <b>-t</b> create new table, default
  275. - <b>-u</b> don't create new table
  276. - <b>-z</b> write 3D vector map (if input was 2D)
  277. Parameters:
  278. - <b>map</b> input vector map for modules without output
  279. - <b>input</b> input vector map
  280. - <b>output</b> output vector map
  281. - <b>type</b> type of elements: point,line,boundary,centroid,area
  282. - <b>cat</b> category or category list (example: 1,5,9-13,35)
  283. - <b>layer</b> layer number or name
  284. - <b>where</b> condition of SQL statement for selection of records
  285. - <b>column</b> column name (in external table)
  286. */