Utiliser des données géographiques sous R Fichier
Transcription
Utiliser des données géographiques sous R Fichier
Ecole doctorale 227 Sciences de la Nature et de l’Homme Module R : APPLICATIONS Utiliser des données géographiques sous R Raymond Baudoin Conservatoire botanique national du Bassin parisien Département EGB [email protected] 27 avril 2012 Manipuler des fichiers spatiaux sous R se révèle utile pour la présentation cartographique de résultats de calculs effectués avec R mais aussi pour réaliser des traitements statistiques sur les objets géographiques que n'offrent pas les systèmes d'informations géographiques libres ou commerciaux (SIG). Mais avant cela il faut pouvoir accéder aux éléments géographiques souvent issus de SIG, c'est-à-dire : • Lire des fichiers vectoriels ou rasters, des images qu'ils soient de format texte ou binaire ; • Travailler sur les cartes pour les adapter au sujet d'étude : faire des regroupements de cartes, modifier les projections, les origines, etc ; • Créer de nouveaux objets géographiques. Actuellement le site du CRAN propose près de 100 librairies qui offrent des fonctions associées à la cartographie. Des libraires R pour la : • Lecture et écriture des données spatiales • Manipulation des données spatiales • Géostatistique • Analyse ponctuelle et spatiale • Régression spatiale • Analyse écologique et environnementale A consulter : La mailing-list formée autour de l'utilisation de données géographiques et cartographiques [email protected] website La CRAN Task View: Analysis of Spatial Data http://cran.r-project.org/web/views/Spatial.html Maintenues par Roger Bivand Liste des libraires associées aux traitements géographiques (27 avril 2012) ade4 ecespa mapproj regress spBayes adehabitat fields maps rgdal (core) spcosa adehabitatHR FieldSim maptools (core) rgeos spdep (core) adehabitatHS gdistance MarkedPointProcess RgoogleMaps spgrass6 adehabitatLT Geneland MBA RPyGeo spgwr adehabitatMA GEOmap Metadata RSAGA sphet ads geomapdata ModelMap RSurvey splancs (core) akima geonames ncdf rworldmap spsurvey ash geoR (core) ncf sgeostat SQLiteMap aspace geoRglm nlme shapefiles Stem automap geosphere pastecs sp (core) tgp classInt (core) GeoXp PBSmapping sparr trip clustTool glmmBUGS PBSmodelling spatcounts tripack CompRandFld gmt psgp spatgraphs tripEstimation constrainedKriging gstat (core) ramps spatial UScensus2000 cshapes Guerry RandomFields (core) spatialCovariance UScensus2000blkgrp DCluster (core) hdeco rangeMapper SpatialExtremes UScensus2000cdp deldir (core) intamap RArcInfo spatialkernel UScensus2000tract DSpat landsat raster (core) spatialsegregation vardiag mapdata RColorBrewer (core) spatstat (core) vegan Plan Introduction sur les systèmes de projection et représentations planes Les formats des fichiers spaciaux Importer des données géographiques Modifier des objets cartographiques Créer de nouveaux objets Quelques traitements Librairies utilisées : • sp (incontournable) • rgdal et raster • SDMTools, maptools, mapproj avec maps • PBSmapping • gpclib • ade4, adehabitat Système d'information géographique S.I.G. Un système d'information géographique (SIG) est un système d'information capable de stocker, d'organiser et de présenter des données alphanumériques spatialement référencées par des coordonnées dans un système de référence (CRS). Système de coordonnées de référence (CRS) Datum Système de référence géodésique Ellipsoïde Projection Origine, axes, unités Système de référence cartographique (projection plane) L'usage du S.I.G. est la représentation de l'environnement spatial en se basant sur : des objets (primitives) géométriques : des points, des vecteurs (arcs), des polygones, etc. des maillages (raster). Aux objets sont associées des informations attributaires telles que leur nature (route, voie ferrée, forêt, etc.) ou des informations contextuelles (nombre d'habitants, superficie, etc.). Système de référence géodésique (Datum) 1. Le système NTF (Nouvelle Triangulation de la France) ▪ point fondamental : croix du Panthéon ▪ ellipsoïde : Clarke 1880 IGN - demi-grand-axe : a = 6 378 249,20 m - demi-petit-axe : b = 6 356 515,00 m ▪ représentation plane associée : Lambert zone I, II, III, IV ▪ méridien origine : Paris. 2. Le système ED50 (European Datum 1950) ▪ point fondamental : POTSDAM ▪ ellipsoïde : HAYFORD 1909 - aplatissement (a-b)/a : 1/297 - demi-grand-axe : a = 6 378 388,0 m ▪ représentation plane associée : Universal Transverse Mercator (UTM) ▪ méridien origine : Greenwich. l'ellipsoïde 3. Le système WGS84 ▪ ellipsoïde : IAG-GRS80 - aplatissement (a-b)/a : 1/298257222101 - demi-grand-axe : a = 6 378 137 m ▪ représentation plane associée : Universal Transverse Mercator (UTM). 4. Le système RGF93 Successeur de la Nouvelle Triangulation Française (NTF). Repose sur l'observation par GPS (en 1993) de 23 sites constituant le Réseau de Référence Français (RRF) ▪ ellipsoïde : IAG-GRS80 ▪ représentation plane associée : Lambert 93 ▪ méridien origine : Greenwich. Extrait de Cartographie, Lecture de Carte de Patrick BOURON École Nationale des Sciences Géographiques, IGN library (rgdal) projInfo(type = "datum")[1:3,c(1,2,4)] name ellipse description 1 WGS84 WGS84 2 GGRS87 GRS80 Greek_Geodetic_Reference_System_1987 3 NAD83 GRS80 North_American_Datum_1983 projInfo(type = "ellps")[c(41,42),] name major ell description 41 WGS84 a=6378137.0 rf=298.257223563 WGS 84 42 sphere a=6370997.0 b=6370997.0 Normal Sphere (r=6370997) Système de référence cartographique (projection plane) Où comment convertir la longitude et la latitude géographique λ, φ en coordonnées cartésiennes x et y (λ, φ) → (x, y) Les représentations ▪ conformes conservent les angles ▪ équivalentes conservent le rapport des surfaces Système de référence cartographique Représentation UTM (Mercator Transverse Universel) Représentation conforme est obtenue par projection de l'ellipsoïde sur un cylindre tangent à celle-ci le long du méridien origine. ▪ Le méridien origine de contact devient sur la carte un axe parallèle à l’axe des Y de la projection. ▪ L’équateur, qui se projette suivant une droite, devient l’axe des X. Soit le point A de la sphère de coordonnées x’ et y’ telles que : ▪ x’ = AA’ , distance de A au méridien mesurée orthogonalement à ce méridien ▪ y’ = MA’, distance comptée sur le méridien origine A est représenté sur le plan de projection par un point a de coordonnées x et y telles que x = f (x’) et y = y’ + e Les fuseaux UTM Ce système compte 60 fuseaux de 6° de différence de longitude, numérotés à partir du méridien antipode du méridien international. Le méridien de Greenwich est donc entre les fuseaux 30 et 31. Les fuseaux qui intéressent la France sont les fuseaux 30, 31 et 32 ayant respectivement pour origine les méridiens 3° Ouest, 3° Est, 9° Est du méridien international. Les fuseaux sont subdivisés en bandes égales de 8° de latitude. Chacune de ces zones est ensuite divisée en carrés de 100 km de coté. 5072 Coordonnées WGS84 exemple : x = 288 700 y = 5 071 700 Fuseau 32T 700 450 5071 288 289 Système de référence cartographique Représentation Lambert C'est une représentation conforme. Elle est obtenue par la projection sur un cône tangent à la sphère le long du parallèle passant par O, centre de la zone à représenter (parallèle origine). Le sommet S du cône est situé sur l’axe des pôles PP’. Soit A un point de la sphère, la position de ce point par rapport au point O est définie par : • x’ = longueur d’arc de parallèle entre le méridien origine et le méridien de A, la distance étant comptée sur le parallèle origine 0 • y’ = arc de méridien compris entre le parallèle origine et le parallèle de A. Le point A est représenté sur le plan de projection par le point "a" dont les coordonnées sont Xa et Ya. Projection Lambert-93 Type de projection Zone d’application Unité de distance Unité d’angle Longitude origine (méridien central) Méridien origine Longitude du méridien origine Latitude origine E0 N0 Mode de définition Latitude de tangence Facteur d’échelle Mode de définition Premier parallèle automécoïque Deuxième parallèle automécoïque Conique Conforme directe sécante 41° - 51° Nord Mètre (unité internationale) DGM (degré – minute – seconde) 3° Est Greenwich 0° 46°30’ 700 000 m 6 600 000 m tangente 46°31’09’’95535 0,999051030064 Sécante 44° 49° Projection Lambert I - IV et II étendu Zone application Lambert Zone I Lambert Zone II Lambert Zone III 53,5gr - 57gr 50,5gr - 53,5gr 47gr - 50,5gr Ellipsoïde associé Latitude origine Corse Lambert II étendu France entière Clarke 1880 49°30´ 49.5 46°48´ 46.79999999999 44°06´ 44.10000000001 42°09´54" 42.16499999999 46°48´ 46.79999999999 0° du méridien de Paris 0 2°20´14.025" Est du méridien de Greenwich 2.33722916670 Méridien central Parallèles standard 1 Lambert Zone IV 48°35´54,682" 48.59852277780 50°23´45,282" 50.39591166670 45°53´56,108" 45.89891888890 47°41´45,652" 47.69601444440 43°11´57,449" 43.19929138890 44°59´45,938" 44.99609388890 41°33´37,396" 41.56038777780 42°46´03,588" 42.76766333330 45°53´56,108" 45.89891888890 47°41´45,652" 47.69601444440 X0 : False Easting 600 000 m 600 000 m 600 000 m 234,358 m 600 000 m Y0 : False Northing 200 000 m 200 000 m 200 000 m 185 861,369 m 2 200 000 m Parallèles standard 2 Source : support.esrifrance.fr mercator Système de référence cartographique 51 Exemples de représentation 50 -5 -4 -2 0 2 4 6 8 10 49 48 library (maps) 47 m <- map("france", plot=FALSE) map ("france", project="mercator") title ("mercator") map.grid (m) 46 45 44 43 42 41 lambert 51 50 -5 lat0=46.5 lat1=49 map ("france", project="lambert", par=c(lat0,lat1)) title ("lambert") map.grid (m) -4 -2 49 48 47 46 45 44 43 42 41 0 2 4 6 8 10 La base de données EPSG des paramètres géodésiques L'ensemble de données EPSG est un référentiel structuré pour : • identifier les coordonnées de telle sorte que ces coordonnées décrivent la position sans ambiguïté par la définition du système de coordonnées de référence (CRS). • définir les transformations et conversions qui permettent de modifier les coordonnées d'un CRS à un autre. L'EPSG Geodetic Parameter Dataset est maintenu actuellement par le sous-comité de géodésie de l'OGP (Oil & Gas Producers). http://www.epsg.org/ La liste EPSG est régulièrement mise à jour pour correction et prendre en compte les nouvelles entrées. Elle permet la conversion d'un grand nombre de CRS. Chaque CRS est décrit suivant les règles définies dans la bibliothèque PROJ.4 décrivant les procédures de projection cartographiques pour l'UNIX (proj). http://trac.osgeo.org/proj/ Proj est un programme Unix qui convertit la longitude et la latitude géographique en coordonnées cartésiennes avec une grande variété de fonctions de projection cartographiques. Signification de quelques sigles utilisés CRS EPSG GDAL OGC OGP SDE SIR SRS : Coordinate Reference System : European Petroleum Survey Group : Geospatial Data Abstraction Library : Open Geospatial Consortium : International Association of Oil & Gas producers : Spatial Database Engine (moteur de recherche dans des bases de données spatiales) : Système International de Référence = CRS : Spatial Referencing System Les paramètres PROJ.4 Les paramètres décrivant la projection sont donnés suivant la convention typologique suivante : +paramètre=valeur chaque couple {paramètre-valeur} est séparé par un espace. exemple : +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs Paramètres +a +alpha +axis +b +datum +ellps +k +k_0 +lat_0 +lat_1 +lat_2 +lat_ts +lon_0 +lonc +lon_wrap +nadgrids +no_defs +over +pm +proj +south +to_meter +towgs84 +units +vto_meter +vunits +x_0 +y_0 +zone Signification Demi-grand rayon de l'axe ellipsoïde Utilisé avec la projection Mercator oblique et éventuellement quelques autres Axe d'orientation Demi -petit rayon de l'axe ellipsoïde Datum de référence Nom de l'ellipsoïde Facteur d'échelle k (ancien nom) Facteur de mise à l'échelle (nouveau nom) Latitude de l'origine Latitude du parallèle première norme Latitude du parallèle seconde norme Latitudede l'échelle réelle Méridien central Longitude utilisé avec Mercator oblique et éventuellement quelques autres Centre de longitude couverte (par défaut la couverture va de -180° à 180°) Nom du fichier de grille à utiliser pour les transformations Ne pas utiliser les définitions par défaut Autoriser la couverte de la longitude de -180 à 180°, désactive +lon_wrap Décalage entre le méridien du système déclarées et celui de Greenwich. Peut être le nom d'une ville (ex. paris pour 2d20'14.025"E) Nom de la Projection Indique la zone UTM de l'hémisphère sud Multiplicateur des unités de la carte à 1m Description du changement de Datum par rapport à towgs84 (3 ou 7 paramètres de transformation : delta_x, delta_y, delta_z, Rx - rotation X, Ry - rotation Y, Rz - rotation Z, M_BF - Mise à l'échelle. Les trois paramètres de translation sont en mètres, ceux de rotation sont en secondes d'arc, la mise à l'échelle est en ppm. Unités Conversion verticale en mètres. Unités verticales. Abscisse fictive Ordonnée fictive UTM zone Exemple : un système de coordonnées d'un fichier MapInfo CoordSys Earth Projection 3, 1002, 7, 0, 49.5, 48.5985227778, 50.39591167, 600000, 200000 Bounds (-40092, -818525) (1264450, 486383) Signification : Arguments PROJ.4 : Earth Projection 3 : Nom de la projection 3 : Type de la projection (3 = conique conforme de Lambert 2003 = idem, borné) 1002 : Datum (1002 = NTF - Paris ; 33 = RGF93) 7 : Unités (7 = m) 0 : Origine lon (le méridien central) (°) 49.5 : Origine lat (°) 48.5985227778 : Parallèle standard 1 (°) 50.39591167 : Parallèle standard 2 (°) 600000 : Abscisse origine fictive (ici en m) 200000 : Ordonnée origine fictive ( 200000 = Lambert II Zone ≡ 2200000 = Lambert II Carto) +proj=lcc lambert conique conforme +units=m +lon_0 +lat_0 +lat_1 +lat_2 +x_0 +y_0 en mètres numéro de la zone Lambert Bounds : Limites (Min X, Min Y) ( Max X, Max Y) PROJ.4 correspondant : a : demi-grand-axe de l'ellipsoïde (a = 6 378 249,20 m : ellipsoïde de Clarke 1880 IGN associé à NTF) +proj=lcc +lat_1=48.5985227778 +lat_2=50.39591167 +lat_0=49.5 +lon_0=0 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515.000000472 +towgs84=-168,-60,320,-0,-0,-0,0 +pm=2.337229166667 +units=m +no_defs" b : demi-petit-axe (b = 6 356 515,00 m : Clarke -NTF pm : écart entre méridien de Greenwich et celui de Paris Système géographique de référence Une copie de la liste EPSG se trouve dans la librairie rgdal version de l'EPSG ? getPROJ4VersionInfo() [1] "Rel. 4.7.1, 23 September 2009, [PJ_VERSION: 470]" Accès aux données du fichier des codes de référence EPSG EPSG <- make_EPSG () Recherche du bon code, exemple pour les projections Lambert xx (EPSG_Lambert <- EPSG [grep("Lambert", EPSG$note), 1:2] ) Trois codes incontournables rownames Code EPSG 249 4326 WGS 84 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs 584 2154 RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 2985 note NTF (Paris) / Lambert 27572 zone II WGS 84 : NTF : RGF : RGF93 : Lambert : Lambert93 : Arguments PROJ.4 pour la définition du système de référence (CRS) +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs système géodésique mondial (World Geodesic System 1984). Celui de Google Earth. Nouvelle Triangulation pour la France (1873 - 1991). Réseau Géodésique Français (à partir de 1990). Réseau géodésique français légal pour la métropole depuis le décret du 26.12.2000. système de projection utilisé pour la France (4 zones). projection associée au système géodésique RGF93 (compatible avec WGS84). Conversion des coordonnées géographiques Degré : système sexagésimal comme l'heure Les sous-multiples du degré sont : la minute sexagésimale, notée « ' » telle que 60' = 1° la seconde, notée « '' » telle que 60'' = 1' 1° = 60' = 3 600'' Rappel des mesures d'angles mesure de la circonférence : 2 π radians = 400 grades = 360 degrés soit : 90° = 100 gr = 1.570796 rd Coordonnées géographique d'un point de latitude : 48°51'23.27" N et de longitude : 2°21'08.41" E Degré sexagésimal ↔ Degré décimal Coordonnées UTM ↔ Lat. / Lon. Pour s'affranchir du système sexagésimal , les SIG utilisent des degrés décimaux library (PBSmapping) (d + m' / 60 + s" / 3600 attention au sgn) Paris = data.frame(EID=1, X=xdd, Y=ydd) ParisPS = as.EventData (Paris) attr (ParisPS , "zone") <- 31 attr (ParisPS , "projection") <- "LL" str (ParisPS) Classes ‘EventData’ and 'data.frame': 1 obs. of variables: $ EID: num 1 $ X : num 2.35 $ Y : num 48.9 - attr(*, "zone")= num 31 - attr(*, "projection")= chr "LL" (ParisUTM = convUL (ParisPS,km=FALSE)) EID X Y 1 1 452492.4 5411702 library(sp) x = "2d21'08.41\"E" # Notation des degrés dans proj.4 : d y = "48d51'23.27\"N" (xdms = char2dms (x)) [1] 2d21'8.41"E (ydms = char2dms (y)) [1] 48d51'23.27"N (xdd = as.numeric(xdms)) # en valeur décimale [1] 2.352336 (ydd = as.numeric(ydms)) [1] 48.85646 str(xdms) Formal class 'DMS' [package "sp"] with 5 slots ..@ WS : logi FALSE ..@ deg: int 2 ..@ min: int 21 ..@ sec: num 8.41 ..@ NS : logi FALSE dd2dms (xdd, NS = FALSE) # NS = FALSE pour l'est / ouest [1] 2d21'8.41"E dd2dms (ydd, NS = TRUE) # NS = TRUE pour Nord / Sud [1] 48d51'23.27"N # Attention la longitude doit être en X (ParisD = convUL (ParisUTM ,km=FALSE)) EID X Y 1 1 2.352336 48.85646 str(ParisD) Classes ‘EventData’ and 'data.frame': variables: $ EID: num 1 $ X : num 2.35 $ Y : num 48.9 - attr(*, "zone")= num 31 - attr(*, "projection")= chr "LL" 1 obs. of 3 3 Les principaux formats utilisés par les S.I.G. Image Vectorielle Une image vectorielle est composée d'objets géométriques individuels (segments de droite, polygones, arcs de cercle…) ayant chacun divers attributs (position, couleur…). Définitions Binaire Shapefile *.tab (ESRI) MIF / MID KML (MapInfo) (MapInfo) Raster Une image matricielle (bitmap ou raster) est composée d'un tableau de points (pixels) associés à une ou plusieurs valeurs visualisées par la couleur. *.BMP, *.JPEG, *.TIFF, *.PNG Codage du fichier Texte (Google Earth) *.asc *.bil . . . (ESRI) Exemple de format texte ► Pour des données vectorielles Une image vectorielle est composée d'objets géométriques individuels (segments de droite, polygones, arcs de cercle, etc.) ayant chacun divers attributs (position, couleur, etc.). Fichiers MIF - MID : format d'échange du SIG MapInfo (MapInfo Interchange Format) Deux fichiers associés xx.MIF : contient la géométrie des objets - composé d'une en-tête : * références géographiques * description des données attributaires - d'une description de la géométrie * coordonnées * représentation xx.MID : contient les données attributaires Structure des fichiers MIF - MID .MIF En-tête .MID Version 300 Charset "WindowsLatin1" Description du MID Delimiter "," Index 3,12,14 CoordSys Earth Projection 3, 1002, "m", 0, 46.8, 45.898918964419, Système de 47.696014502038, 600000, 2200000 coordonnées Bounds (-113967455.417, MapInfo 106367759.649) (115167455.417, 122767151.185) Columns 14 ID_COM Integer NOM_COM Char(50) NUM_COM Char(5) Objets STATUT Char(2) X_COM Integer Y_COM Integer Description SURFACE Integer POPU Integer du MID NUM_CAN Char(2) NUM_ARR Char(1) NOM_DEP Char(30) NUM_DEP Char(3) NOM_REG Char(30) NUM_REG Char(2) Data Region 1 131 479087 2463986 479112 2463991 479276.9 2464086 479452 2464171 Description 479562 2464247 d'un … polygone … 478947 2463896 479077 2463971 479087 2463986 Pen (1,2,0) Brush (2,16777215,16777215) Center 480103.6 2464572.6 Region 1 221 508173 2418283 508188 2418343 508213 2418363 508268 2418378.1 508318 2418399 508343.1 2418399 270000001,"ACLOU","27001","06",480418,2464086,370,200,"09","2","EURE","27","HAUTE-NORMANDIE","23" 270000002,"ACON","27002","06",509314,2419859,916,400,"25","3","EURE","27","HAUTE-NORMANDIE","23" 270000003,"ACQUIGNY","27003","06",515518,2463665,1783,1400,"39","3","EURE","27","HAUTE-NORMANDIE","23" 270000004,"AIGLEVILLE","27004","06",533415,2445735,324,200,"26","3","EURE","27","HAUTE-NORMANDIE","23" 270000005,"AILLY","27005","06",520222,2462811,1555,800,"42","1","EURE","27","HAUTE-NORMANDIE","23" fichier MIF : gestion des polygones disjoints exemple de la commune du Val-de-Reuil (insee : 27701) nombre de polygones 6000 8000 3 000 1 000 2 0000 [22] "Region 3" nombre de sommets [23] " 390" [24] "515719 2470940" [25] "515754 2471010" [26] "515819 2471131" [27] "515894 2471236" . . . 1 . . . [409] "515684 2470555.1" [410] "515639.1 2470595" [411] "515659 2470705" [412] "515699 2470820" [413] "515719 2470940" [414] " 73" nombre de sommets [415] "519146.4 2471924" [416] "519209.1 2472150.7" [417] "519184 2472157.7" 2 . . . . . . [486] "519216 2471842" [487] "519146.4 2471924" nombre de sommets [488] " 41" [489] "518682 2478654.1" [490] "518303.6 2478485.3" . . . . . . 3 [527] "518636 2479335" [528] "518667 2479000" [529] "518682 2478654.1" Pen (1,2,0) Brush (2,16777215,16777215) Center 515828.8 2473912 Exemple de format texte ► Pour des données raster Fichier ASCII format ArcGis text raster (.asc) Une image matricielle (bitmap ou raster) est composée d'un tableau de points (pixels) associés à une ou plusieurs valeurs visualisées par la couleur. L'ouvrir avec un éditeur de texte pour : En-tête Valeurs pour chaque pixel ncols 2442 nrows 3719 xllcorner 575350,517 yllcorner 2444630,98 cellsize 30 NODATA_value -9999 - Vérifier que le séparateur décimal soit un point - Vérifier la cohérence de cette valeur avec le codage des pixels -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 … … 91 92 93 93 91 90 89 89 89 89 89 88 88 88 87 86 86 86 86 86 86 86 85 81 79 77 78 78 77 76 75 74 76 76 73 70 70 69 70 70 72 73 74 75 76 75 76 75 73 73 68 64 60 60 60 60 65 69 75 77 71 62 59 57 56 57 58 62 66 75 78 78 77 77 77 75 74 73 73 72 73 74 75 75 77 79 79 79 78 78 77 76 74 73 70 69 68 68 68 68 67 66 65 63 62 60 60 59 59 -9999 -9999 -9999 -9999 -9999 -9999 82 80 79 80 83 87 92 92 91 91 89 89 88 88 90 88 86 87 88 88 87 84 84 80 78 78 78 77 77 76 75 74 73 72 72 71 72 71 71 72 74 77 78 79 80 82 85 86 90 92 96 98 98 96 91 88 … Fichier raster (.asc) et sa représentation NCOLS 10 NROWS 12 XLLCORNER 4 YLLCORNER 8 CELLSIZE 4 NODATA_value -3.4e+38 2 7 9 1 8 6 2 4 8 4 6 3 3 6 3 5 4 2 1 2 10 7 2 5 8 2 1 9 1 5 2 2 5 5 8 8 7 3 4 6 1 10 6 10 6 2 8 10 8 6 3 4 10 1 7 1 2 9 7 8 7 6 4 3 3 7 4 8 5 3 1 9 10 6 9 6 8 3 1 10 8 5 6 6 6 1 1 5 2 7 10 5 5 8 5 3 1 2 7 5 9 1 8 6 9 1 9 2 1 8 5 7 5 7 1 6 7 1 2 5 YLLCORNER NCOLS 1 56 52 10 1 48 44 40 36 32 NROWS 28 24 20 16 12 8 12 CELLSIZE 4 exemple : "rst1.asc" XLLCORNER 44 40 36 32 28 24 20 16 12 8 4 0 0 LIRE DES FICHIERS CARTOGR APHIQUES Importer des données géographiques dans Fonctions suivant les formats Données vectorielles fichier Shapefile Binaire codage fonctions librairies readShapeSpatial () readOGR () maptools rgdal readOGR () rgdal *.tab Texte Données raster Binaire codage MIF / MID GML, KML fichier Images (*.bmp, *.jpeg, *.png) *.asc Texte *.bil fonctions librairies readGDAL () raster () rgdal raster import.asc () read.asc () readGDAL () raster () ade4habitat SDMTools rgdal raster library (rgdal) Utilise le package sp et les runtimes GDAL et PROJ.4 Lecture de données vectorielles Aux formats : ESRI Shapefile, ESRI ArcSDE, MapInfo (tab et mif/mid), GML, KML, DXF, ... # Afficher les formats supportés (pilotes) ogrDrivers () readOGR (dsn, layer, verbose = TRUE, p4s=NULL, stringsAsFactors=default.stringsAsFactors(), drop_unsupported_fields=FALSE, input_field_name_encoding=NULL, …) dsn : nom d'un répertoire ou nom de fichier suivant le pilote layer : nom de la couche à lire p4s : système de référence cartographique (CRS) drop_unsupported_fields : si TRUE saute les champs autre que String, Integer et Real; Date, heure et DateTime sont converties en String. input_field_name_encoding : codepage pour le nom de dsn et de layer. Retourne un objet spatial de classe SpatialPointsDataFrame, SpatialLinesDataFrame ou SpatialPolygonsDataFrame. Premier exemple : lecture d'un fichier .tab de MapInfo d78 <- readOGR (dsn="Dept78.TAB", layer="Dept78", stringsAsFactors=FALSE) plot (d78, col = "snow2") Objet de classe SpatialPolygonsDataFrame [package "sp"] Données vectorielles str (d78) Formal class 'SpatialPolygonsDataFrame' [package "sp"] with ..@ data .. .. .. .. .. .. ..$ ..$ ..$ ..$ ..$ ..$ 5 slots Fonctions associées :'data.frame': 1 obs. of 6 variables: Code : Nom : INSEE_Région : Id_BDCarto : Abscisse_Département: Ordonnée_Département: chr chr chr int int int "78" "YVELINES" "11" 78 583975 2423234 données attributaires ogrInfo (dsn="Dept78.TAB", layer="Dept78") correspond à un str() des données attributaires ..@ polygons :List of 1 .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots .. .. .. ..@ Polygons :List of 1 .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots .. .. .. .. .. .. ..@ labpt : num [1:2] 563622 2424181 .. .. .. .. .. .. ..@ area : num 2.31e+09 ogrFIDs("Dept78.TAB", "Dept78") .. .. .. .. .. .. ..@ hole : logi FALSE .. .. .. .. .. .. ..@ ringDir: int 1 Liste les ID .. .. .. .. .. .. ..@ coords : num [1:3355, 1:2] 570261 570196 570161 570162 570277 ... des polygones .. .. .. ..@ plotOrder: int 1 .. .. .. ..@ labpt : num [1:2] 563622 2424181 .. .. .. ..@ ID : chr "1" .. .. .. ..@ area : num 2.31e+09 ..@ plotOrder : int 1 ..@ bbox : num [1:2, 1:2] 534891 2382272 592091 2454474 .. ..- attr(*, "dimnames")=List of 2 .. .. ..$ : chr [1:2] "x" "y" .. .. ..$ : chr [1:2] "min" "max" bbox (d78) min max x 534891 592091 y 2382272 2454474 Emprise de la carte ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots OGRSpatialRef .. .. ..@ projargs: chr " +proj=lcc +lat_1=45.898918964419 +lat_2=47.696014502038 +lat_0=46.8 +lon_0=0| __truncated__ ("Dept78.TAB", "Dept78") Affiche le CRS library (rgdal) - Données vectorielles Lecture de fichiers MIF / MID (MapInfo) PAS DE MELANGE DE GEOMETRIES DANS UNE COUCHE que des polygones, points … c78p <- readOGR (dsn="Com78p.MIF", layer="Com78p") Erreur dans ogrInfo(dsn = dsn, layer = layer, input_field_name_encoding = input_field_name_encoding) : Multiple incompatible geometries: 1:3 file <- "Com78.MIF" c78 <- readOGR (file, layer="Com78") plot (c78) Mettre le nom du fichier sans l'extention ogrInfo (dsn = file, layer="Com78") Source: "C:\Mes documents sauvegardés\Enseignement\Séminaire R\Séminaire_201103\Cartes_78_L2E\Com78.MIF ", layer: "Com78" Driver: MapInfo File number of rows 262 Feature type: wkbPolygon with 2 dimensions +proj=lcc +lat_1=45.89891889 +lat_2=47.69601444 +lat_0=46.8 +lon_0=0 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515.000000472 +towgs84=-168,60,320,-0,-0,-0,0 +pm=2.337229166667 +units=m +no_defs Number of fields: 9 name type length typeName 1 ID 2 10 Real 2 NOM 4 50 String 3 INSEE 4 5 String 4 X 2 8 Real 5 Y 2 8 Real 6 SUPERFICIE 2 10 Real 7 POPULATION 2 8 Real 8 NOM_DEPT 4 30 String 9 NOM_REGION 4 30 String points (c78@data$X, c78@data$Y,pch=19,col=3) Données vectorielles Lecture de fichiers Shapefile (ESRI) Réparties en plusieurs fichiers : *.shp, *.shx, *.dbf, *prj library (rgdal) c78sh <- readOGR (dsn="ESRI", layer="Com78_region") Nom du répertoire contenant les fichiers nom du fichier sans l'extention OGR data source with driver: ESRI Shapefile Source: "ESRI", layer: "Com78_region" with 262 features and 9 fields ogrInfo (dsn="ESRI", layer="Com78_region") Source: "ESRI", layer: "Com78_region" Driver: ESRI Shapefile number of rows 262 Feature type: wkbPolygon with 2 dimensions +proj=lcc +lat_1=45.89891889 +lat_2=47.69601444 +lat_0=46.8 +lon_0=2.337229104484 +x_0=600000 +y_0=2200000 +ellps=clrk80 +units=m +no_defs Number of fields: 9 name type length typeName 1 ID 0 10 Integer 2 NOM 4 50 String 3 INSEE 4 5 String 4 X 0 8 Integer 5 Y 0 8 Integer 6 SUPERFICIE 0 10 Integer 7 POPULATION 0 8 Integer 8 NOM_DEPT 4 30 String 9 NOM_REGION 4 30 String library (maptools) c78sh <- readShapeSpatial (Com78_region.shp) Retourne aussi un objet SpatialPolygonsDataFrame Lecture de fichiers KML library (rgdal) - Données vectorielles Avec Google Earth utiliser le système de référence international : WGS 84 (Google Earth) d78k <- readOGR ("d78WGS84.KML", layer="Contour78") plot (d78k ) Nom du fichier Champ name du fichier KML Début du fichier d78WGS84.KML <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <name>Contour78</name> <description><![CDATA[]]></description> <Style id="1"> # Fichier KLM créé avec Google Earth Vk <- readOGR ("Versailles - Polygone.kml", layer="Versailles - Polygone.kml") plot (Vk, add=TRUE, col=2 ) # Création et écriture d'un KML par la fonction kmlPolygon de Maptools kmlPolygon (obj=d78WGS84, kmlfile="d78WGS84.KML", name="Contour", description="", col=NULL, visibility=1, lwd=1, border=1, kmlname="Contour78", kmldescription="") library (rgdal) - Données raster Liste des pilotes existants Drv <- gdalDrivers() Drv [which(Drv[,3] | Drv[,4]), c(1,2)] Pilotes fichiers images : JPEG, PNG, BMP, GTiff Pilotes fichiers rasters : AAIGrid Arc/Info ASCII Grid EHdr ESRI .hdr Labelled ENVI ENVI .hdr Labelled GSAG Golden Software ASCII Grid (.grd) GTiff GeoTIFF XPM X11 PixMap Format ... readGDAL (fname, offset, region.dim, output.dim, band, p4s=NULL, ..., half.cell=c(0.5, 0.5), silent = FALSE) fname : offset : Nom de la carte avec l'extension identifiant le pilote Nombre de lignes et de colonnes de l'origine (commence au coin supérieur gauche) * region.dim :Le nombre de lignes et de colonnes à lire dans l'ensemble de données * output.dim :Le nombre de lignes et de colonnes à retourner dans l'objet créé * p4s : Système de référence cartographique (CRS) half.cell : Utilisé pour ajuster l'intra-cellule de compensation à partir du coin au centre, le plus souvent par défaut, mais peut être réglé pour c = (0,0) si nécessaire * silent : Si TRUE, le commentaire et les erreurs non fatales du pilote supprimés * peut changer Lecture d'un fichier image Veg <- readGDAL ("Veg78.jpg") image (Veg) # pour l'affichage Retourne un objet spatial SpatialGridDataFrame L'image d'origine Objet de classe SpatialGridDataFrame [package "sp"] Pour les données raster str (Veg) Formal class 'SpatialGridDataFrame' [package "sp"] with 6 slots ..@ data :'data.frame': 450912 obs. of 3 variables: .. ..$ band1: int [1:450912] 255 255 255 255 255 255 255 255 255 255 ... Si image : gestion bmp : 1 band .. ..$ band2: int [1:450912] 255 255 255 255 255 255 255 255 255 255 ... des couleurs jpeg, png : 3 bands .. ..$ band3: int [1:450912] 255 255 255 255 255 255 255 255 255 255 ... sinon, valeurs lues. ..@ grid :Formal class 'GridTopology' [package "sp"] with 3 slots .. .. ..@ cellcentre.offset: Named num [1:2] 0.5 0.5 .. .. .. ..- attr(*, "names")= chr [1:2] "x" "y" Ajout possible .. .. ..@ cellsize : num [1:2] 1 1 Taille du pixel d'autres données .. .. ..@ cells.dim : int [1:2] 672 671 dans @data ncol, nrow soit y,x ..@ grid.index : int(0) ..@ coords : num [1:2, 1:2] 0.5 671.5 0.5 670.5 .. ..- attr(*, "dimnames")=List of 2 .. .. ..$ : NULL .. .. ..$ : chr [1:2] "x" "y" ..@ bbox : num [1:2, 1:2] 0 0 672 671 xmin, ymin, xmax, ymax .. ..- attr(*, "dimnames")=List of 2 = emprise de la carte .. .. ..$ : chr [1:2] "x" "y" .. .. ..$ : chr [1:2] "min" "max" ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots .. .. ..@ projargs: chr NA pas de CRS par défaut pour une image (absent du fichier) library (raster) Données raster Une fonction unique pour créer ou lire un raster raster (x, crs=NA, ...) Création d'un raster nrows <- 12; ncols <- 10; cellsize <- 4; xllcorner <- 4; yllcorner <- 8 rst <- raster (nrows = nrows, ncols = ncols, xmn = xllcorner, xmx = xllcorner + (ncols*cellsize), ymn = yllcorner, ymx = yllcorner + (nrows*cellsize)) rst [ ] <- sample(1:10, size=nrows*ncols, replace = TRUE) 56 52 NCOLS 1 10 1 48 Affecte les valeurs 44 40 36 Ecriture d'un raster au format asc 32 NROWS 28 writeRaster ( rst, filename="rst1.asc") 24 20 16 12 12 CELLSIZE 4 XLLCORNER 28 32 36 40 44 0 12 16 20 24 rst1 <- raster("rst1.asc") plot (rst1, asp=1) 8 0 4 8 Lecture d'un fichier raster YLLCORNER Objet de classe raster "rst1.asc" NCOLS 10 NROWS 12 XLLCORNER 4 YLLCORNER 8 CELLSIZE 4 rst Extent ymax 48 44 Y Extent 4 44 8 56 1 52 rst@extent : : : : : 10 56 class : RasterLayer dimensions : 12, 10, 1 (nrow, ncol, nlayers) resolution : 4, 4 (x, y) extent : 4, 44, 8, 56 (xmin, xmax, ymin, ymax) projection : +proj=longlat +datum=WGS84 values : in memory min value : 1 max value : 10 class xmin xmax ymin ymax NCOLS 1 40 36 32 28 NROWS 24 20 16 12 ymin YLLCORNER xmax <- xllcorner + (NCOLS*cellsize) ymax <- yllcorner + (NROWS*cellsize) 8 Cellsize 12 0 [1] 0 0 nombre entier de cellule x <- round (xllcorner / cellsize, 0) Ox <- xllcorner - (x*cellsize) # origine en x y <- round (yllcorner / cellsize, 0) Oy <- yllcorner - (y*cellsize) # origine en y xmin XLLCORNER X 44 36 40 32 28 24 16 20 8 12 # Calcul de l'origine 4 origin (rst) 0 origine xmax Remarque sur les coordonnées de l'origine d'un raster 53 49 40 36 32 33 29 25 28 24 20 Y 21 17 13 16 12 9 5 8 0 0 4 -4 X rst2.asc NCOLS NROWS XLLCORNER YLLCORNER CELLSIZE origin (rst) 10 12 3 5 4 -1 1 extent (rst) class : Extent xmin : 3 xmax : 43 ymin : 5 ymax : 53 X rst4.asc NCOLS NROWS XLLCORNER YLLCORNER CELLSIZE 10 12 3 -8 4 origin (rst) -1 0 extent (rst) class : Extent xmin : 3 xmax : 43 ymin : -8 ymax : 40 43 39 35 31 27 23 19 15 11 -8 7 43 31 35 39 19 23 27 7 11 15 origine 0 3 origine 0 3 Y 45 41 37 MODIFIER DES OBJETS CARTOGRA PHIQUES Changer de système géographique de référence Avoir le bon CRS ! car l'ensemble des couches doit être dans le même système de projection Utilisation des données EPSG pour changer de système géographique Rappel : accès aux données du fichier des codes de référence EPSG par la fonction make_EPSG () de la librairie rgdal Trois CRS pour l'Île-de-France Code EPSG note Arguments PROJ.4 pour la définition du système de référence (CRS) 4326 WGS 84 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs 2154 RGF93 / Lambert-93 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs 27572 NTF (Paris) / Lambert zone II +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs Dans la librairie mapproj, la fonction mapproject() permet la conversion de la latitude et la longitude du système géodésique mondial WGS84 vers un autre système de projection. A éviter, il y a moins de choix et la conversion est moins bonne. library (rgdal) ici : SpatialPolygonsDataFrame d78 <- readOGR ("Dept78.TAB", layer="Dept78") 2400000 Reprojeter en RGF93, code EPSG : 2154 600000 2380000 580000 plot (d78, axes = TRUE, las=2) title ("epsg 27572 - NTF (Paris) / Lambert zone II") 2420000 540000 "+proj=lcc +lat_1=45.898918964419 +lat_2=47.696014502038 +lat_0=46.8 +lon_0=0 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515.000000472 +towgs84=-168,60,320,-0,-0,-0,0 +pm=2.337229166667 +units=m +no_defs" 2440000 520000 proj4string (d78) # Affiche le système de référence (CRS) epsg 27572 - NTF (Paris) / Lambert zone II 560000 Changer de système de référence pour des objets de classe : Spatial... [ librairie sp ] epsg 2154# RGF93 / Lambert-93 6880000 d78RGF93 <- spTransform (d78, CRS ("+init=epsg:2154") ) 6860000 proj4string (d78RGF93) 6840000 640000 620000 plot (d78RGF93, axes = TRUE, las=2) title ("epsg 2154 # RGF93 / Lambert-93") 600000 6820000 580000 "+init=epsg:2154 +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs" epsg 4326 # WGS 84 49.1N Reprojeter en WGS 84 , code EPSG : 4326 49N 48.9N d78WGS84 <- spTransform (d78, CRS ("+init=epsg:4326") ) 48.8N proj4string (d78WGS84) 48.6N 48.7N 48.5N plot (d78WGS84, axes = TRUE, las=2) title ("epsg 4326 # WGS 84") 2.4E 2.2E 2E 1.8E 1.6E 1.4E "+init=epsg:4326 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0" Comparaison des représentations suivant le CRS NTF / Lambert II code EPSG : 27572 WGS 84 code EPSG : 4326 RGF93 / Lambert93 code EPSG : 2154 epsg 27572 - NTF (Paris) / Lambert zone II epsg 4326 # WGS 84 epsg 2154# RGF93 / Lambert-93 49.1N 6880000 49N 2440000 48.9N 6860000 48.8N 2420000 48.7N 6840000 48.6N 2400000 48.5N 6820000 Emprise des cartes bbox(d78) bbox(d78RGF93) bbox(d78WGS84 ) min max x 534891 592091 y 2382272 2454474 min max x 586431.7 643333.8 y 6815921.5 6888312.4 min max x 1.446436 2.228964 y 48.438499 49.085414 2.4E 2.2E 2E 1.8E 1.6E 1.4E 640000 620000 600000 580000 600000 580000 560000 540000 520000 2380000 Changer de système de référence pour des objets de classe RasterLayer [ librairie raster ] library (raster) Veg <- raster ("d78Veg.asc") projection (Veg) # [1] "NA" Affiche le système de référence VegWGS84 <- projectRaster (Veg, crs = proj4string (d78WGS84)) raster d'origine Nouveau système de référence. Ici, celui du SpatialPolygonsDataFrame d78WGS84 Mais Erreur dans projectRaster : input projection is NA donc : 1 - Affecter le BON système de référence projection (Veg) <- proj4string (d78) cohérent avec les coordonnées plot (VegWGS84) plot (d78WGS84, add=TRUE, lwd=4) Puis 2 - Recalculer les coordonnées des cellules par la fonction projectRaster () VegWGS84 <- projectRaster (Veg, crs = proj4string (d78WGS84)) projection (VegWGS84) # [1] "+init=epsg:4326 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0 +over" Attention les x, y de la résolution (pixel) peuvent devenir différents. Problème pour l'écriture au format asc Library raster Modifier la grille d'un raster 50 Diminuer la résolution rst1 <- raster ("rst1.asc") 40 10 Fonction d'aggrégation des valeurs 30 4 2 20 raster Facteur x source (entier) 6 10 rstA2 <- aggregate (rst1, fact=2, fun=mean) 8 plot (rst1, asp=1) x11() plot (rstA2, asp=1, main="Fact *2") 10 20 30 40 7 40 rstA2 : RasterLayer : 6, 5, 1 (nrow, ncol, nlayers) : 8, 8 (x, y) : 4, 44, 8, 56 (xmin, xmax, ymin, ymax) : 2.25 : 7.25 6 5 30 class dimensions resolution extent min value max value rst1 : RasterLayer : 12, 10, 1 : 4, 4 : 4, 44, 8, 56 :1 : 10 50 Fact *2 4 # resample pour modifier l'origine et la résolution et croiser les valeurs 10 20 3 10 20 30 40 Modifier la grille d'un raster Diminuer la résolution : exemple d78Veg <- raster ("d78Veg.asc",crs="+init=epsg:27572") d78Veg10 <- aggregate (d78Veg, fact=10, fun=mean) plot (d78Veg10, main="d78Veg10") plot (d78Veg, main="d78Veg") Problème de valeur pour les pixels en limite de zone writeRaster (d78Veg10, filename="d78Veg10.asc") d78Veg dimensions : 2408, 1907, 1 resolution : 30, 30 d78Veg10 dimensions : 241, 191, 1 resolution : 300, 300 Library raster 50 Modifier la grille d'un raster 10 40 Augmenter la résolution 8 30 6 4 20 2 10 rst1 <- raster ("rst1.asc") rstD2 <- disaggregate (rst1, fact=2, method='ngb') 20 30 40 Fact :2 50 10 Calcul des valeurs 8 6 30 raster Facteur : source (entier) 40 10 20 2 10 20 30 40 Fact :c(5,5)- bilinear 40 plot (rstD2, asp=1) 4 10 rstD2 : RasterLayer : 24, 20, 1 (nrow, ncol, nlayers) : 2, 2 (x, y) : 4, 44, 8, 56 (xmin, xmax, ymin, ymax) :1 : 10 50 rst1 class : RasterLayer dimensions : 12, 10, 1 resolution : 4, 4 extent : 4, 44, 8, 56 min value :1 max value : 10 10 30 5 0 20 rstD2b <- disaggregate(rst1, fact=c(5,5), method='bilinear') 10 plot (rstD2b, asp=1, main="Fact :c(5,5)- bilinear") 10 20 30 40 CREER DES OBJETS CARTOGR APHIQUES Caler un raster image Les données : Veg - un fichier image (bmp) (carte communale de la végétation des Yvelines) Veg <- raster ("Veg78.bmp") plot(Veg) bVeg <- as.vector (bbox (Veg) ) # emprise de l'image rect (bVeg[1], bVeg[2], bVeg[3], bVeg[4], border=1, lty=2) class dimensions resolution extent projection values min value max value : RasterLayer : 671, 672, 1 : 1, 1 (x, y) : 0, 672, 0, 671 : NA : Veg78.bmp :0 : 255 1 - Isoler la carte du fond de l'image hist (Veg) Histogram of values(Veg) 250000 Veg [ which (values (Veg) == 6)] <- NA Couleur fond image origin (Veg) [1] 0 0 150000 hist (Veg) 50000 res (Veg) [1] 1 1 0 extent (Veg) class : Extent xmin : 89 Nouvelle xmax : 577 ymin : 31 emprise ymax : 647 Frequency Veg <- trim (Veg) # suppression des NA 0 1 2 3 values(Veg) 4 5 6 Caler un raster image 2 - Ajuster le raster sur la référence (raster) d78Veg10 <- raster("d78Veg10.asc", crs="+init=epsg:27572") # raster source d78Veg10 dimensions : 241, 191, 1 resolution : 300, 300 extent : 534895, 592195, 2382200, 2454500 Création d'un raster de référence sans valeur (reprenant ici les caractéristiques du raster source) r <- raster (nrows= nrow(d78Veg10), ncols= ncol(d78Veg10), xmn= xmin(d78Veg10), xmx= xmax(d78Veg10), ymn= ymin(d78Veg10), ymx= ymax(d78Veg10), crs= "+init=epsg:27572" ) Ajuster les emprises (étendues) extent (Veg) <- extent (r) Création du raster par échantillonnage fonction resample () Vegr <- resample (Veg, r, method='ngb') objet échantillonné Cellules et valeurs recalculées Vegr class raster de référence méthode de calcul des valeurs : RasterLayer dimensions : 241, 191, 1 (nrow, ncol, nlayers) resolution : 300, 300 (x, y) extent : 534895, 592195, 2382200, 2454500 (xmin, xmax, ymin, ymax) projection : +init=epsg:27572 +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs values : in memory min value : 0 max value : 5 plot( Vegr, main="Vegr ngb") Créer un raster à partir de données existantes Les données : - une carte (objet SpatialGridDataFrame) des communes (n polygones) - un fichier de valeurs par commune - un raster de référence Lecture de la carte des communes c78 <- readOGR ("Com78.MIF", layer="Com78") Lecture des données caractérisant les communes nbi <- read.table ("nbi_CAH.txt") Introduction dans les données attributaires c78@data <- cbind (c78@data, nbi$classe) str (c78@data) Lecture du raster de référence d78alt <- raster ("d78alt.asc") Rasterisation du SpatialGridDataFrame rVeg <- rasterize (c78, d78alt, field=10) Objet Raster de Champ de Spatial... référence la valeur writeRaster (rVeg, filename="d78Veg.asc") plot (rVeg) origin (rVeg) [1] -5.026339 -9.726538 origin (d78alt) [1] -5.026339 -9.726538 Créer un raster à partir de données existantes Les données : - contour des Yvelines (1 polygone : SpatialPolygonsDataFrame) - 4 rasters (MNT - altitude *) couvrant ce département n <- c("rn","rnw","rwy","rs") rec <- rbind (as.vector(bbox(rn)) ,as.vector(bbox(rnw)) ,as.vector(bbox(rwy)) ,as.vector(bbox(rs))) par (mar=c(2.2,2.2,.2,.2)) plot (c(min(rec[,1]),max(rec[,3])),c(min(rec[,2]), max(rec[,4])), type="n", asp=1) for (i in 1:nrow(rec)) { rect (rec[i,1],rec[i,2],rec[i,3],rec[i,4], border=i+1, lwd=2) text (mean(rec[i,c(1,3)]), mean (rec[i,c(2,4)]), labels=n[i], col=i+1, cex=3) } plot (d78,add=TRUE) rect (bd78[1], bd78[2], bd78[3], bd78[4], border=1, lty=2) (*) ASTER Global Digital Elevation Model (ASTER GDEM), modèle numérique de terrain (MNT) disponible sur le monde entier http://www.ersdac.or.jp/GDEM/E/index.html 2500000 rnw rn rwy rs 2450000 emprise des Yvelines 2400000 bd78 <- as.vector (bbox(d78)) 2350000 Objectif : avoir le MNT des Yvelines plot (rn, main ="MNT - Altitude", sub="IdF nord") 2550000 d78 <- readOGR ("Dept78.TAB", layer="Dept78") rn <- raster ("aster_idf_nord.txt", crs= "+init=epsg:27572") rnw <- raster ("aster_idf_nw.txt", crs= "+init=epsg:27572") rwy <- raster ("aster_idf_ouest_yvelines.asc", crs= "+init=epsg:27572") rs <- raster ("aster_idf_sud.txt", crs= "+init=epsg:27572") 500000 550000 600000 650000 library (raster) Créer un raster à partir de données existantes 1 - Découper les rasters par l'emprise du polygone Fonction crop () rd78n <- crop (rn, extent (bd78[1],bd78[3],bd78[2],bd78[4])) rd78nw <- crop (rnw, extent (bd78[1],bd78[3],bd78[2],bd78[4])) rd78wy <- crop (rwy, extent (bd78[1],bd78[3],bd78[2],bd78[4])) rd78s <- crop (rs, extent (bd78[1],bd78[3],bd78[2],bd78[4])) xmin xmax ymin ymax raster emprise source 2 - Fusionner les rasters Fonction merge () rd78M <- merge (rd78n, rd78nw, rd78wy, rd78s, tolerance=1) rasters à fusionner Tolérance admissible % taille cellule Les rasters devraient avoir même origine et même résolution Ici même résolution resolution : 30, 30 (x, y) cellsize = (rec[1,3]-rec[1,1]) / ncol(rn) plot (rd78M, asp=1 ) plot (d78, add=TRUE) mais origines différentes origin (rn) origin (rnw) origin (rwy) origin (rs) # # # # 10.517 -9.020 -2.671439 7.268528 -5.026339 -9.726538 13.678634 -7.611634 Créer un raster à partir de données existantes 3 - Pixellisation d'un objet spatial Fonction rasterize () class (d78) [1] "SpatialPolygonsDataFrame" d78alt <- rasterize (d78, rd78M , mask=TRUE) objet Spatial raster à découper Option Si TRUE : Utilise valeurs du raster d78alt class : RasterLayer dimensions : 2408, 1907, 1 (nrow, ncol, nlayers) plot (d78alt, asp=1) resolution : 30, 30 (x, y) extent : 534895, 592105, 2382260, 2454500 (xmin, xmax, ymin, ymax) projection : +proj=lcc +lat_1=45.898918964419 +lat_2=47.696014502038 +lat_0=46.8 +lon_0=0 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515.000000472 +towgs84=-168,-60,320,-0,-0,-0,0 +pm=2.337229166667 +units=m +no_defs values : in memory min value : -111 max value : 231 Ecriture du raster au format asc writeRaster (d78alt, filename="d78alt.asc") Créer des objets : POINTS library (rgdal) plot (d78WGS84, axes = TRUE) (pt <- locator (type = "p")) Clic droit pour arrêter $x [1] 1.556412 2.103122 1.862998 1.522108 $y [1] 49.02610 48.79291 48.51591 48.56961 pt <- data.frame (x = pt$x, y = pt$y) (pt <- rbind (pt, c(1.84, 48.8))) coordonnées d'un 5ème point 1 2 3 4 5 x 1.556412 2.103122 1.862998 1.522108 1.840000 y 49.02610 48.79291 48.51591 48.56961 48.80000 2 méthodes # affectation du BON système de projection proj4string (pt) <- CRS (proj4string (d78WGS84))) 49N 48.5N plot (pt, col=2, pch=19, add=TRUE) 48.9N coordinates (pt) <- ~ x + y 48.8N # transformation en objet de classe SpatialPoints 48.7N # ou Système de référence du fond cartographique 48.6N Data.frame des coordonnées 49.1N pt <- SpatialPoints (pt, proj4string = CRS (proj4string (d78WGS84))) SpatialPointsDataFrame() permet d'associer des données attributaires 1.4E 1.6E 1.8E 2E 2.2E 2.4E Objet de classe SpatialPoints (librairie sp) library (rgdal) str (pt) Formal class 'SpatialPoints' [package "sp"] with 3 slots ..@ coords : num [1:5, 1:2] 1.56 2.1 1.86 1.52 1.84 ... .. ..- attr(*, "dimnames")=List of 2 .. .. ..$ : NULL .. .. ..$ : chr [1:2] "x" "y" ..@ bbox : num [1:2, 1:2] 1.52 48.52 2.1 49.03 .. ..- attr(*, "dimnames")=List of 2 .. .. ..$ : chr [1:2] "x" "y" .. .. ..$ : chr [1:2] "min" "max" ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots .. .. ..@ projargs: chr " +init=epsg:4326 +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0" slot (pt, "bbox") # identique à pt@bbox min max x 1.522108 2.103122 y 48.515905 49.026098 pt@coords [1,] [2,] [3,] [4,] [5,] x 1.556412 2.103122 1.862998 1.522108 1.840000 # identique à slot (pt, "coords") y 49.02610 48.79291 48.51591 48.56961 48.80000 Créer un POLYGONE d78 <- readOGR ("Dept78.TAB", layer="Dept78") Veg <- raster ("VegImg.asc") projection (Veg) <- proj4string (d78) plot (Veg) zoom (Veg) library (raster) zoom (Veg) uniquement avec raster pol <- drawPoly (sp = TRUE) Si TRUE : création d'un objet SpatialPolygons (librairie sp) plot(d78,lwd=2) plot(pol, add=TRUE,border=2,col="grey") Objet de classe SpatialPolygons (librairie sp) pol Centroïde Contour An object of class "SpatialPolygons" Slot "polygons": [[1]] An object of class "Polygons" Slot "Polygons": [[1]] An object of class "Polygon" Slot "labpt": [1] 558287.4 2442123.6 Slot "area": [1] 4832745 Slot "hole": [1] FALSE Slot "ringDir": [1] 1 Slot "coords": [,1] [,2] [1,] 557806.5 2443614 [2,] 558860.6 2443559 [3,] 558583.2 2442782 [4,] 559581.8 2442421 [5,] 559554.1 2441090 [6,] 557223.9 2441062 [7,] 557223.9 2441451 [8,] 556863.3 2441534 [9,] 557806.5 2443614 Slot "plotOrder": [1] 1 Slot "labpt": [1] 558287.4 2442123.6 Slot "ID": [1] "1" Nom Slot "area": [1] 4832745 Slot "plotOrder": [1] 1 Slot "bbox": min max x 556863.3 559581.8 y 2441062.2 2443614.2 Slot "proj4string": CRS arguments: NA Des objets emboîtés Polygon Polygons SpatialPolygons Centroïde du polygone Créer des objets : POLYGONES mpol <- drawPoly (sp = FALSE) library (raster) mpol Si FALSE : création d'une matrice des coordonnées [1,] [2,] [3,] [4,] [5,] [6,] [7,] [8,] [9,] Création d'un objet classe Polygon [,2] 2443587 2443559 2442782 2442394 2441118 2441034 2441478 2441562 2443587 library (rgdal) Transforme la matrice de coordonnées en objet de classe Polygon P <- Polygon (mpol) Création d'un objet de classe Polygons Ps [,1] 557806.5 558832.8 558583.2 559554.1 559581.8 557251.7 557251.7 556835.6 557806.5 <- Polygons (list (P), Liste des objets de classe Polygon "mpol") Pourquoi cette classe? Permettre la gestion des polygones disjoints Nom du polygone (ID) Création d'un objet spatial de classe SpatialPolygons pol <- SpatialPolygons (list (Ps), proj4string=CRS("+init=epsg:27572")) Liste des objets de classe Polygons Le BON système de référence celui de la carte du tracé ! Créer des objets : POLYGONES library (rgdal) plot(d78,lwd=2) mpol1 <- drawPoly (sp = FALSE, col=1) mpol2 <- drawPoly (sp = FALSE, col=2) mpol3 <- drawPoly (sp = FALSE, col=3) Objet classe Polygon P1 <- Polygon (mpol1) P2 <- Polygon (mpol2) P3 <- Polygon (mpol3) Objet de classe Polygons Ps12<- Polygons (list (P1, P2), "Pm") # polygone disjoint composé de P1, P2 Ps3 <- Polygons (list (P3) , "P3") Objet spatial de classe SpatialPolygons polSp <- SpatialPolygons (list (Ps12, Ps3), proj4string = CRS(proj4string (d78))) Système de référence du fond cartographique Objet de classe SpatialPolygons [librairie sp] str (polSp) Nom des polygones row.names (polSp) Pm [1] "Pm" "P3" plot (d78) plot (polSp, add=TRUE, col = c("peru","pink")) text (coordinates (polSp), labels = row.names (polSp), font=2) P3 Accès aux polygones par leur nom (ID) polSp["P3"]@bbox min max x 558980 568988.7 y 2403501 2413791.5 plot (polSp ["Pm"], col=3) y <- as.vector (polSp ["Pm"]@bbox) rect (y[1], y[2], y[3], y[4]) Remarque : pour un objet de classe SpatialPolygonsDataFrame, la sélection est réalisée comme pour un data.frame : plot ( c78 [ "196", ] ) Créer des polygones à partir d'un fichier de coordonnées MatCoord <- read.table ("MatCoord.txt") # création du fichier de coordonnées MatCoord <- rbind ( cbind(as.data.frame(mpol1),pol="P1"), cbind(as.data.frame(mpol2),pol="P2"), cbind(as.data.frame(mpol3),pol="P3") ) write.table (MatCoord,"MatCoord.txt") str (MatCoord) 'data.frame': 15 obs. of 3 variables: $ V1 : num 552777 560249 550381 552777 569835 ... $ V2 : num 2444100 2434091 2432117 2444100 2437192 ... $ pol: Factor w/ 3 levels "P1","P2","P3": 1 1 1 1 2 2 2 2 2 3 ... ►library (ade4) area.plot (MatCoord [, c(3,1:2)] ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 V1 V2 552777.3 2444100 560248.7 2434091 550380.9 2432117 552777.3 2444100 569834.5 2437192 576742.0 2436206 577446.8 2422814 570962.3 2422532 569834.5 2437192 563631.9 2413792 568988.7 2409140 566592.3 2403501 560953.5 2403924 558980.0 2408717 563631.9 2413792 pol P1 P1 P1 P1 P2 P2 P2 P2 P2 P3 P3 P3 P3 P3 P3 Fonction graphique Identificateur du polygone en 1ère colonne et de classe "factor" ►library (adehabitat) polmap <- area2spol (map) class (polmap) 2440000 2430000 V2 Création d'un objet de classe : [1] "SpatialPolygons" attr(,"package") [1] "sp" 2420000 plot.area (map, colpol=NA, lwd=1) 2410000 map <- as.area (MatCoord [, c(3,1:2)] ) Création d'un objet de classe : class(map) [1] "area" "data.frame" 540000 550000 560000 570000 580000 plot.area (map, colpol=NA, lwd=1) plot.area (map, which = "P2", colpol="red", add=TRUE) V1 QUELQUES TRAITEMENTS CARTOGRAPHI QUES Opérations logiques entre polygones library (gpclib) Créer un objet polygone de classe gpc.poly a <- cbind (rnorm(100,mean=3), rnorm(100,mean=3)) b <- a [chull (a), ] # 100 valeurs de x, 100 valeurs de y # enveloppe des points (polygone convexe) Conversion de b ("class matrix") en objet "gpc.poly" b <- as (b, "gpc.poly") # pas besoin de fermer le polygone ! plot b nouvelle classe 6 5 7 5 8 4 3 4 b GPC Polygon Num. Contours: 1 Num. Vertices: 9 BBox (X): 0.83022 --> 5.826104 BBox (Y): -0.1570411 --> 5.256018 $x [1] 0.830220 5.826104 $y [1] -0.1570411 5.2560180 3 1 get.bbox(b) 2 Y 9 2 Formal class 'gpc.poly' [package "gpclib"] with 1 slots ..@ pts:List of 1 .. ..$ :List of 3 .. .. ..$ x : num [1:9] 5.07 1.99 0.83 1 1.33 ... .. .. ..$ y : num [1:9] -0.157 0.713 1.706 4.144 4.502 ... .. .. ..$ hole: logi FALSE 0 str(b) 1 1 2 3 4 5 6 plot (b, main ="plot b") X sapply(1:9, function(x) points (b@pts[[1]]$x[x], b@pts[[1]]$y[x], pch = as.character(x))) get.pts(b) [[1]]$x [1] 5.065687 1.985782 0.830220 1.003784 1.329209 2.266448 3.438016 5.204712 5.826104 [[1]]$y [1] -0.1570411 0.7129101 1.7063695 4.1443739 4.5023267 5.2560180 5.2115360 4.2712646 [[1]]$hole [1] FALSE 2.6550988 library (gpclib) plot c 5 Fonctions combinant deux (n) polygones 4 Création d'un deuxième polygone 2 3 Y c <- cbind(rnorm(100,mean=3), rnorm(100,mean=3)) c <- as (c[chull(c), ], "gpc.poly") plot (c,poly.args = list(lty = 2), main ="plot c") 1 création d'un polygone multiple 0 abc = append.poly (b, c) plot (abc,main = "append.poly (b, c)") 1 2 3 4 5 X 5 6 append.poly (b, c) 3 0 1 2 Y Formal class 'gpc.poly' [package "gpclib"] with 1 slots ..@ pts:List of 2 .. ..$ :List of 3 .. .. ..$ x : num [1:9] 5.07 1.99 0.83 1 1.33 ... .. .. ..$ y : num [1:9] -0.157 0.713 1.706 4.144 4.502 ... .. .. ..$ hole: logi FALSE .. ..$ :List of 3 .. .. ..$ x : num [1:9] 4.77 4.27 3.21 2.53 1.48 ... .. .. ..$ y : num [1:9] 2.929 1.147 0.708 0.726 1.506 ... .. .. ..$ hole: logi FALSE 4 str(abc) 0 1 2 3 X 4 5 6 library (gpclib) 5 6 intersect (b, c) 4 ibc = intersect (b, c) plot (abc, main="intersect (b, c)") plot (ibc, add = TRUE, poly.args = list (col = 2)) 1 2 Y 3 b AND c s etdiff (c, b ) 0 setd iff (b , c) 1 2 3 6 2 0 Y 2 5 6 par(mfrow=c(1,2)) dbc = setdiff (b, c) plot (abc, main="setdiff (b, c)") plot (dbc, poly.args = list (col = 4), add = TRUE) c NOT b 0 Y b NOT c 4 X 4 4 6 0 dcb = setdiff (c,b) plot (abc, main="setdiff (c, b)") plot (dcb, poly.args = list (col = 3), add = TRUE) 6 union (b, c) 2 3 4 5 6 5 1 X 4 6 ubc = union (b, c) plot (ubc, main="union (b, c)") b OR c 3 5 2 4 X 1 3 0 2 Y 1 0 1 2 3 X 4 5 6 4 5 library (gpclib) 2 Y 3 bb = scale.poly (b, xscale=2, yscale=3) plot (b) plot (bb, add=TRUE, poly.args = list (lty = 2)) 1 area.poly (b) [1] 19.94434 0 area.poly (bb) * (2*3) # car xscale=2, yscale=3 [1] 19.94434 1 2 3 4 5 6 X 4 3 b 2 fermer le polygone 1 plot (xb, axes=TRUE) text (coordinates(xb), names(xb), cex=2) 0 xb <- as (b,"matrix") xb <- SpatialPolygons (list (Polygons (list (Polygon (rbind (xb,xb[1,]) )),"b") )) 5 Transformation d'un objet "gpc.poly" en un objet "SpatialPolygons" 1 2 3 4 5 6 library (gpclib) append.poly Combiner les contours de deux objets "gpc.poly" en un objet "gpc.poly" area.poly Calcule la somme des superficies de tous les contours d'un objet "gpc.poly" get.bbox Retourne la boîte englobant l'objet "gpc.poly" get.pts Retourne la liste des coordonnées x et y des sommets d'un objet "gpc.poly" intersect Intersection entre deux objets "gpc.poly" plot-method Argument poly.args pour passer une liste d'arguments supplémentaires (cf. polygon {graphics}) read.polyfile Lecture d'un objet "gpc.poly" à partir un fichier texte scale.poly Divise les coordonnées d'un objet "gpc.poly" suivant les valeurs de xscale et yscale (défaut : xscale = yscale) setdiff Différence entre deux objets "gpc.poly" triangulate Retourne une matrice de sommets d'une triangulation d'un objet "gpc.poly" tristrip Retourne une liste tristrip d'un objet "gpc.poly" union Union de deux objets "gpc.poly" write.polyfile Ecriture d'un objet "gpc.poly" dans un fichier texte Dénombrer i = 500 a <- cbind (rnorm(i,mean=3), rnorm(i,mean=3)) # i valeurs de x, y 0.8 0.8 0.8 1.0 1.0 1.0 Avec la librairie adehabitat 14 10 8 6 4 0.4 0.4 0.4 y yy 0.6 0.6 0.6 12 2 0.0 0.0 0.0 0.2 0.2 0.2 0 0.0 0.0 0.2 0.4 0.6 0.8 1.0 x plot (a, pch=19, cex=.6) 0.2 0.4 0.6 0.8 1.0 xx library (adehabitat) casc = ascgen (xy = a, nrcol = 10) image (casc) as.vector (count.points (a, casc)) [1] 0 6 4 4 1 4 5 1 3 2 3 6 9 4 10 6 8 6 7 2 1 8 7 4 4 2 7 10 [29] 8 2 2 15 3 4 5 6 8 4 9 5 7 9 4 4 3 7 3 5 14 5 5 3 7 3 2 3 [57] 3 5 3 5 4 12 5 7 7 5 5 5 4 2 3 5 4 6 4 6 5 8 7 12 4 6 4 6 [85] 5 11 9 7 5 4 0 2 3 1 3 1 1 4 2 1 0.0 0.2 0.4 0.6 0.8 1.0 library (raster) crast = raster(casc) plot(crast) Dénombrer i = 500 a <- cbind (rnorm(i,mean=3), rnorm(i,mean=3)) 0.8 1.0 Avec overlay() de la librairie sp 0.0 0.2 0.4 y 0.6 j = seq (0,1,length=10) n = data.frame( x = rep(j,10), y = rep(j,each=10)) n.sp = SpatialPoints (n) a.gr = SpatialPixels (n.sp) gridded (a.spi) <- TRUE a.po <- as (a.gr, "SpatialPolygons") a.sp = SpatialPoints (a) 0.0 1.0 g1 0 g2 2 g11 0.8 4 g12 g21 2 0.6 g41 g42 g3 3 g20 5 g37 4 g54 6 g71 1 g88 7 g4 1 g21 2 g38 4 g55 3 g72 8 g89 7 g5 2 g22 6 g39 5 g56 8 g73 7 g90 2 g6 2 g23 4 g40 2 g57 3 g74 4 g91 0 g7 1 g24 7 g41 4 g58 5 g75 4 g92 6 g8 3 g25 3 g42 5 g59 14 g76 2 g93 4 g9 g10 g11 g12 g13 g14 g15 g16 g17 2 1 4 6 4 5 5 10 10 g26 g27 g28 g29 g30 g31 g32 g33 g34 7 5 8 7 12 3 12 5 7 g43 g44 g45 g46 g47 g48 g49 g50 g51 7 3 2 2 3 5 1 7 7 g60 g61 g62 g63 g64 g65 g66 g67 g68 5 2 15 3 4 5 6 6 6 g77 g78 g79 g80 g81 g82 g83 g84 g85 7 10 8 2 3 6 9 4 10 g94 g95 g96 g97 g98 g99 g100 4 1 4 5 1 3 2 0.4 g52 g61 1.0 g81 g82 g91 0 0.0 0.2 g66 g75 g84 g76 2 g85 10 g94 4 g95 1 0.4 g86 6 g96 4 0.6 g79 g88 g89 g98 0.8 g80 2 7 1 g70 5 8 7 g97 5 g69 g78 g87 g60 5 10 10 7 g59 g68 g77 g50 7 14 6 7 g49 g58 g67 g40 2 1 5 6 g39 g48 g57 g30 12 5 5 3 6 4 4 g93 4 g65 g74 g83 g56 g29 g38 g47 g20 5 7 4 3 8 5 4 9 g92 6 g55 g64 g73 g46 g19 g28 g37 g10 1 4 8 4 2 3 4 7 6 g54 g63 g72 g45 g18 g27 g36 g9 2 8 5 6 2 6 3 8 3 g53 g62 g71 1 g44 g17 g26 g35 g8 3 10 7 6 3 3 15 g25 g34 g43 g16 10 3 7 7 8 2 0.2 g2 2 g19 4 g36 6 g53 3 g70 5 g87 7 0.8 g7 1 g15 g24 g33 g6 2 5 7 5 5 g14 g23 g32 g5 2 5 4 12 7 g13 g22 g31 g4 1 4 6 4 g3 3 6 3 0.0 g1 0 g18 8 g35 6 g52 8 g69 10 g86 6 0.6 plot (a, pch=19, cex=.6) g51 v [order (as.numeric (substring (names (v),2) ) )] 0.4 x v = sapply (1:100, function(i) sum (overlay (a.po[i], a.sp), na.rm=TRUE)) names(v) = names (a.po) vv = as.vector(matrix(v,nr=10)) plot(a.po,axes=TRUE) plot(a.sp,add=TRUE) text (coordinates (a.po), labels = vv, col=2, cex=.8) text (coordinates (a.po)+.04, labels = names (a.po), font=2, cex=.5) 0.2 g90 2 g99 3 g100 2 1.0
Documents pareils
Utiliser des fichiers spatiaux dans des applications R
http://cran.r-project.org/web/views/Spatial.html
Ainsi que la mailing-list formée autour de l'utilisation de
données géographiques et cartographiques
[email protected] website
maintenues par ...