% Template GRASS newsletter - Article
% Language: Latex
%

% Head

%\usepackage{Sweave}
%\setkeys{Gin}{width=0.1\textwidth}

\def\@codex#1{\small {\normalfont\ttfamily\hyphenchar\font=-1 #1}\egroup}
\def\RR{\textsf{R}\xspace}

\title{Utiliser l'interface \RR --- {GRASS}}
\subtitle{Status actuel}
\author{par Roger Bivand, traduit par Yves Jacolin}

\maketitle

\section{Introduction}
\label{sec:intro}
Les interfaces entre GRASS et \RR, l'environnement open source de programmation de statistique et d'analyse de données, existent depuis quelques temps. Les détails de l'interface entre GRASS 6 et \RR ont été décrit 2 ans plus tôt dans \citet{bivand:2005}, mais depuis les choses se sont beaucoup simplifier.

Des fichiers temporaires intermédiaire sont la solution choisis pour l'interface de GRASS 6 : \pkg{spgrass6}, en utilisant des shapefiles pour les données vecteurs et des binaires BIL pour les données raster. \RR est lancé dans une session GRASS à partir de la ligne de commande, et \pkg{spgrass6} chargé avec ses dépendances, avec l'interface \RR utilisé pour accéder et mettre à jour les données GRASS.

\vspace{1cm}

\setkeys{Gin}{width=1\textwidth}
\begin{figure}[htb]
\begin{center}
\includegraphics[angle=90,width=0.95\textwidth]{integration/bivand/Fig-OSGeo-1}\caption{Fonction de distribution cumulative empirique de l'élévation de la région de Spearfish.}
\label{fig:GRASS_ecdf}
\end{center}
\end{figure}

\section{Installer le paquet de l'interface}
\label{subsec:inst}
L'interface GRASS 6 est disponible à partir de CRAN, Comprehensive \RR Archive Network. Elle dépend de trois paquets, et s'ils ne sont pas déjà disponible, ceux-ci (\pkg{sp}, \pkg{maptools} et \pkg{rgdal}) doivent être installé dans \RR  en utilisant l'argument \code{dependencies=} :

\begin{footnotesize}
\begin{Schunk}
\begin{Sinput}
> install.packages("spgrass6", dependencies = TRUE)
\end{Sinput}
\end{Schunk}
\end{footnotesize}

Pour installer sur un serveur qui ne lance par d'interface graphique, définissez d'abord le mirroir CRAN avec :

\begin{footnotesize}
\begin{Schunk}
\begin{Sinput}
> chooseCRANmirror(graphics = FALSE)
\end{Sinput}
\end{Schunk}
\end{footnotesize}
Les seules difficultés potentielles pour l'installation de ces paquets à partir des sources sur Linux, Unix ou Mac OS X concernent \pkg{rgdal}, à cause de sa dépendance externe avec les bibliothèques GDAL et PROJ.4. Sur Linux/Unix, notez que les fichiers de développement de GDAL sont nécessaire, pas seulement GDAL lui-même, si votre version de GDAL a été installée avec des binaires plutôt qu'à partir des sources. Tout les autres paquets sont disponibles comme binaires pour les utilisateurs de Marc OS X, mais \pkg{rgdal} ne l'est pas. Des notes pour les utilisateurs de Mac OS X sur l'installation de \pkg{rgdal} peuvent être trouvé sur le site  \href{http://www.sal.uiuc.edu/tools/tools-sum/rgeo/rgeo-detail/map-packages-on-cran}{Rgeo} --- voyez la partie \pkg{rgdal}. Les binaires Windows sont disponibles pour tous les paquets, et fonctionne avec GRASS 6 sous Cygwin.

\section{Utiliser le paquetage}


\begin{footnotesize}
\begin{Schunk}
\begin{Sinput}
> library(spgrass6)
> gmeta6()
\end{Sinput}
\end{Schunk}
\end{footnotesize}
Les exemples utilisé ici proviennent de la location des données échantillon ``Spearfish'' (Dakota du sud, USA, 103.86W, 44.49N), peut-être les plus typiques pour les démonstrations de GRASS. La fonction \code{gmeta6} est simplement une manière de résumer les paramètres actuels de la location et la région de GRASS dans lequel nous somme en train de travailler. À ce niveau de l'interface, le transfer des données raster est effectué couche par couche, et utilise des fichiers binaires temporaires. La commande \code{readRAST6} lit ici les valeurs d'élévation dans un objet \code{SpatialGridDataFrame}, traite les valeurs retournées comme des points flottants, et la couche categoriel de géologie dans un facteur :% Phrase à corriger ?!!
% The \code{readRAST6} command here reads elevation values into a \code{SpatialGridDataFrame} object, treating the values returned as floating point, and the geology categorical layer into a factor:

\begin{footnotesize}
\begin{Schunk}
\begin{Sinput}
> spear <- readRAST6(c("elevation.dem", 
+     "geology"), cat = c(FALSE, TRUE))
\end{Sinput}
\end{Schunk}
\begin{Schunk}
\begin{Sinput}
> summary(spear)
\end{Sinput}
\begin{Soutput}
Object of class SpatialGridDataFrame
Coordinates:
              min     max
coords.x1  589980  609000
coords.x2 4913700 4928010
Is projected: TRUE 
proj4string :
[+proj=utm +zone=13 +a=6378206.4
+rf=294.9786982 +no_defs
+nadgrids=/home/rsb/topics/grass63/grass-6.3.cvs
/etc/nad/conus
+to_meter=1.0]
Number of points: 2
Grid attributes:
  cellcentre.offset cellsize cells.dim
1            589995       30       634
2           4913715       30       477
Data attributes:
 elevation.dem        geology     
 Min.   : 1066   sandstone:74959  
 1st Qu.: 1200   limestone:61355  
 Median : 1316   shale    :46423  
 Mean   : 1354   sand     :36561  
 3rd Qu.: 1488   igneous  :36534  
 Max.   : 1840   (Other)  :37636  
 NA's   :10101   NA's     : 8950  
\end{Soutput}
\end{Schunk}
\end{footnotesize}

Quand l'argument \code{cat=} est définie à \code{TRUE}, les étiquettes de catégorie de GRASS sont improtées et utilisé come niveaux de facteur ; vérifiant après coups, nous pouvons voir qu'ils concordent : %we can see that they agree:

\begin{footnotesize}
\begin{Schunk}
\begin{Sinput}
> table(spear\$geology)
\end{Sinput}
\begin{Soutput}
metamorphic  transition     igneous 
      11693         142       36534 
  sandstone   limestone       shale 
      74959       61355       46423 
sandy shale    claysand        sand 
      11266       14535       36561 
\end{Soutput}
\begin{Sinput}
> system("r.stats --q -cl geology", 
+     intern = TRUE)
\end{Sinput}
\begin{Soutput}
 [1] "1 metamorphic 11693"
 [2] "2 transition 142"   
 [3] "3 igneous 36534"    
 [4] "4 sandstone 74959"  
 [5] "5 limestone 61355"  
 [6] "6 shale 46423"      
 [7] "7 sandy shale 11266"
 [8] "8 claysand 14535"   
 [9] "9 sand 36561"       
[10] "* no data 8950"     
\end{Soutput}
\end{Schunk}
\end{footnotesize}

\vspace{1cm}

La figure \ref{fig:GRASS_ecdf} montre un graphique de distribution cumulative empirique des valeurs d'élévation, permettant la lecture de la proportion de l'aire d'étude pour des élévations choisies. À son tour la figure \ref{fig:GRASS_box} montre un simple graphique d'élévation des élévations par catégorie dans la surface totale. Nous avons utilisé la fonction \code{readRAST6} pour lire à partir de GRASS vers \RR ; la fonction \code{writeRAST6} permet à une seule colonne nommé d'un objet SpatialGridDataFrame pour être exporté vers GRASS.

%Figure \ref{fig:GRASS_ecdf} shows an empirical cumulative distribution plot of the elevation values, giving readings of the proportion of the study area under chosen elevations. 

Le paquet \pkg{spgrass6} fournit également des fonctions pour déplacer des objets vecteurs et les données attributaires associées vers \RR et les récupérer. La fonction \code{readVECT6} est habituellement utilisé pour importer des données vecteurs dans \RR, et \code{writeVECT6} pour exporter vers GRASS.

\vspace{.5cm}

\begin{footnotesize}
\begin{Schunk}
\begin{Sinput}
> bugsDF <- readVECT6("bugsites")
\end{Sinput}
\end{Schunk}
\begin{Schunk}
\begin{Sinput}
> vInfo("streams")
\end{Sinput}
\begin{Soutput}
    points      lines boundaries  centroids 
         0        104         12          4 
     areas    islands      faces    kernels 
         4          4          0          0 
\end{Soutput}
\end{Schunk}
\begin{Schunk}
\begin{Sinput}
> streams <- readVECT6("streams", type = "line,boundary", 
+     remove.duplicates = FALSE)
\end{Sinput}
\end{Schunk}
\end{footnotesize}

L'argument \code{remove.duplicates=} est définie à TRUE quand il y a seulemlent des lignes ou des surfaces par xemple, et que le nomnre présent est plus grand que le nombre de données (le nombre de lignes dans la table de données attributaires). L'argument \code{type=} est habituellement utilisé pour écrasé le type de détection lorsque de multiples types sont différent de zéro, comme ici, où nous choisissons des lignes et des contours, mais la fonction suppose des surfaces, retournant juste des ...

%The \code{type=} argument is used to override type detection when multiple types are non-zero, as here, where we choose lines and boundaries, but the function guesses areas, returning just filled water bodies.

\vspace{.5cm}

\setkeys{Gin}{width=1\textwidth}
\begin{figure}[htb]
\begin{center}
\includegraphics[width=0.95\textwidth]{integration/bivand/Fig-OSGeo-2}\caption{Graphiques d'élévation en fonction de la catégorie de la géologie, région de Spearfish.}
\label{fig:GRASS_box}
\end{center}
\end{figure}
% Because the mechanism used for passing information concerning the GRASS location coordinate reference system differs slightly between raster and vector, the PROJ.4 strings often differ slightly, even though the actual CRS is the same. We can see that the representation for the point locations of beetle sites does differ here; the vector representation is more in accord with standard PROJ.4 notation than that for the raster layers, even though they are the same. In the summary of the \code{spear} object above, the ellipsoid was represented by \code{+a=} and \code{+rf=} tags instead of the \code{+ellps=} tag using the \code{clrk66} value:

À cause du mécanisme utilisé pour passer des informations concernant les coordonnées de la région de GRASS le système de référence diffère sensiblement entre les données raster et vecteurs, la chaîne PROJ4 diffère souvent sensiblement, alors même que le CRS réel est le même. Nous pouvons voir que la représentation pour les localisations des points des sites des scarabés diffèrent ici ; la représentation du vecteur est plus en accord avec la notation des standards de PROJ4 que celle pour les couches rasters, alors même qu'ils sont les mêmes. Dans le résumé de l'objet \code{spear} ci-dessus, l'ellipsoide a été représenté par les balises \code{+a=} et \code{+rf=} au lieu de la balise \code{+ellps=} en utilisant la valeur \code{clrk66} :

\vspace{.5cm}

\begin{footnotesize}
\begin{Schunk}
\begin{Sinput}
> summary(bugsDF)
\end{Sinput}
\begin{Soutput}
Object of class SpatialPointsDataFrame
Coordinates:
              min     max
coords.x1  590232  608471
coords.x2 4914096 4920512
Is projected: TRUE 
proj4string :
[+proj=utm +zone=13 +ellps=clrk66
+datum=NAD27 +units=m +no_defs
+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat]
Number of points: 90
Data attributes:
      cat                 str1   
 Min.   : 1.00   Beetle site:90  
 1st Qu.:23.25                   
 Median :45.50                   
 Mean   :45.50                   
 3rd Qu.:67.75                   
 Max.   :90.00                   
\end{Soutput}
\end{Schunk}
\end{footnotesize}
%This necessitates manual assignment from one representation to the other on occasion, and is due to GRASS using non-standard but equivalent extensions to PROJ.4. There are number of helper functions in the \pkg{spgrass6} package, one \code{gmeta2grd} to generate a GridTopology object from the current GRASS region settings.

%A second utility function for vector data uses the fact that GRASS 6 uses a topological vector data model. The \code{vect2neigh} function returns a data frame with the left and right neighbours of arcs on polygon boundaries, together with the length of the arcs. This can be used to modify the weighting of polygon contiguities based on the length of shared boundaries.

Cela nécessite des modifications manuelles d'une représentation à l'autre, et cela est dû au fait que GRASS utilise des extensions non standard mais équivalent à PROJ4. Il n'y de nombreuses fonctions utile dans le paquet \pkg{spgrass6}, \code{gmeta2grd} permet de générer un objet GridTopology à partir des paramètres de région en cours de GRASS. Cela est typiquement utilisé pour l'interpolation à partir de données ponctuelles vers une grille raster, et peut être masqué par coercion d'un objet SpatialGrid vers un objet SpatialPixels ayant un jeu de cellules en dehors de la zone d'étude vers NA. Une seconde fonction utile pour les données vectorielles utilise le fait que GRASS 6 utilise un model de données vectoriel topologique. La fonction \code{vect2neigh} retourne un cadre de données avec le voisin de gauche et de droite des arcs sur une limite polygonale, avec la longueur des arcs. Cela peut être utilisé pour modifier le poids des contiguités des polygones basé sur la longueur des limites communes. Comme GRASS, GDAL/OGR, PROJ4 et d'autres projets de l'OSGeo, les fonctions offertes par \pkg{spgrass6} changent, et les pages d'aide doivent être consultées pour vérifier les usages correctes.


\begin{footnotesize}
\begin{thebibliography}{99}

\bibitem[\protect\citeauthoryear{Bivand}{Bivand}{2005}]{bivand:2005} 
Bivand, R. S., (2005)
\newblock Interfacing {GRASS} 6 and \RR.
\newblock {\em {GRASS} Newsletter}, 3, 11--16, \url{http://grass.itc.it/newsletter/}.

\end{thebibliography}
\end{footnotesize}



\address{Roger Bivand\\
Section Géographie Économique, Département d'Économies, Norwegian School of
Economics and Business Administration, Bergen, Novège\\
  \url{http://www.r-project.org/Rgeo}\\
  \email{Roger.Bivand AT nhh.no}}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: main_document.tex
%%% End: 