Carte simple sous R

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Carte simple sous R

Messagepar Tomas leon » 05 Fév 2019, 18:02

Bonjour à tous,

Je suis grand débutant en spatial sous R et j'aimerais avoir quelques conseils pour débuter s'il vous plait.

Ce que j'aimerais faire est relativement simple. J'ai d'un côté un fonds de carte (dbf, prj, qpj, shp et shx) avec en table attributaire mes parcelles d'études, et d'un autre côté j'ai un data.frame avec d'une part mes parcelles et d'autres part un comptage d'observations. J'aimerais importer mon shapfiles sous R, l'afficher dans la bonne projection (lambert 93), le joindre à mon data.frame pour ensuite visualiser sur fond de carte mes comptages selon un gradient de couleur par parcelles.

Que me conseillerez vous comme packages et manipulations s'il vous plait ?

Merci à tous

Benjamin Leduc
Messages : 158
Enregistré le : 09 Avr 2010, 08:48

Re: Carte simple sous R

Messagepar Benjamin Leduc » 05 Fév 2019, 19:59

Salut,

Une carte simple à partir d'un shapefile?

Code : Tout sélectionner

library(rgdal)


ça permet aussi je changer la projection…

Débutant à quel point?

J'avais fait un tuto, mais il n'est plus en ligne, vouci le texte:

Apprendre à tracer une carte de France à l'aide d'un ordinateur

En l'an 2000, lors d'une discussion sur l'informatique avec une enseignante spécialisée, elle se plaignait que les ordinateurs permettaient de perdre son temps, mais pas d'effectuer un travail efficace. Sa classe ayant eu une recherche à effectuer, ils avaient fini, et elle leur laissa aller sur internet librement. Ils trouvaient des choses intéressantes, mais pas des plus utiles… Elle eu l'idée de leur proposer un exercice pour terminer les 20 minutes ou ils avaient la salle, utiliser l'ordinateur pour tracer une carte de France. Cette activité, personne n'arriva à la réaliser, et elle me dit donc « C'est quand même dingue, trouver des bêtises en tout genre, c'est facile, mais une chose aussi simple que de faire une carte de France n'est pas possible ». Je n'ai pas osé lui répondre que ce qui lui semblait « Facile » est en réalité une tache complexe, et que si l'on ne dispose pas de programme adapté, la tache serait impossible. Comme il n'est pas incongru qu'un enseignant demande à ses élèves de tracer une telle carte, je vous propose un petit tutoriel, utilisant des outils libres et gratuit.
Comme dans notre précédent tutoriel sur les graphiques, nous allons utiliser le logiciel libre R comme support.
Pour tracer une carte, il faut des ichiers de coordonnées géographique, appelés « Shapefiles ». On peut en trouver gratuitement sur le net, ici pour des donnés générales http://www.naturalearthdata.com/downloads/ ou là pour des donnés par pays http://www.diva-gis.org/datadown .
Créez un dossier pour stocker tous les shapefiles, décompressez les archives à l’intérieur de ce dossier. Démarrez R, et indiquer comme répertoire de travail celui ou se trouvent vos archives géographiques.
setwd("C : adresse du dossier dans l’arborescence/shapefiles")

Chargez un jeu de donné, comme les frontières de chaque pays, disponible dans « cultural » sur « natural earth data ». dsn correspond à l'adresse du dossier à l’intérieur du répertoire de travail et layer, le nom du « shapefile », sans extension. Si le « shapefile » se trouve directement dans le dossier de travail, utiliser dsn="."

readOGR(dsn="10m_cultural", layer="ne_10m_admin_0_countries")->Frontières

Nous pouvons maintenant tracer une carte :
plot(Frontières)



Cette carte doit désormais être centré sur la France, et un peut de couleur peut facilité la lecture.
plot(Frontières,xlim=c( -4.3,9.1),ylim=c(41,51),axes = TRUE, col="grey")
Les valeurs de xlim et ylim correspondent au coordonnés latitudes et longitude en dégrées.


Ajout d'autre données
De nombreuses choses peuvent être ajoutés sur une carte, la base de donnée diva-gis.org propose entre autre les régions administrative par pays, et les rivières. Libres à chacun d'ajouter les élements qu'il souhaite sur une carte.
Il faut dans un premier temps charger les donnés que l'on souhaite faire apparaître sur la carte. Ici, nous choisissons les départements et les rivières
readOGR(dsn="/Users/benjamin/Downloads/FRA_adm", layer="FRA_adm2")-> FRA_adm2
readOGR(dsn="/Users/benjamin/Downloads/FRA_wat", layer="FRA_water_lines_dcw")-> rivières
Puis il ne reste qu'à tracer :
plot(Frontières,xlim=c( -4.3,9.1),ylim=c(41,51),axes = TRUE, col="grey")
plot(rivières, add=TRUE,col="grey80")
plot(FRA_adm2, add=TRUE)
add=TRUE permet de superposer les tracés, col permet de choisir une autre couleur, grey80 signifie 80% de blanc et 20% de noir.

Ajout des villes

Une ville peut être repérée par sa latitude et sa longitude (aisément trouvable sur internet). Attention installer un point sous R demande de mettre d'abbord les horizontales puis les verticales, latitudes et longitudes sont donc inversées. Les dégrées ouest et sud sont des valeurs négatives. Les valeurs sont en degrés décimales et non sexagésimaux (minutes et secondes).
Voici donc un exemple
points( 2.359368,48.863431,pch=16,col="red",cex=1.5)
text( 2.359368,48.863431,pos=1,"Paris")


Les valeurs cex correspondent à la taille, pch à la forme (16=point rond et plein), pos à la position, à choisir entre 0 et 4, 1 signifiant en dessous. On remarque que la superposition en noir du nom et des frontières de départements rend le texte illisible. Il faut donc, réduire l'eppesseur du trait lwd=0.5 et par exemple le mettre en pointillé lty=3.
Une echelle
Une échelle est toujours nécessaire sur une carte. Les fonctions pour se faire sont rare. Et il faut utiliser un paquetage de développement.
Avant la première utilisation, exécutez :
install.packages("devtools")
library(devtools)
install_github("giby/Linarius")
Puis, vous pouvez charger ce paquetage
library(Linarius)
et demander une barre d'échelle
scalebar(c(-4,42), 200)
Les premiers nombres correspondant à la latitude et la longitude, le dernier correspondant à la taille de la barre en kilomètres (par défaut).



Une fois que le travail est satisfaisant, vous pouvez le sauvegarder en utilisant la fonction png, comme montré dans le tutoriel sur les graphiques.

png(file="carte-de-France.png",width = 15, height = 15,units = "cm",pointsize=6,res=288 )
par(mar=c(15.1, 4.1, 4.1, 2.1))
plot(Frontières,xlim=c( -4.3,9.1),ylim=c(41,51),axes = TRUE, col="grey")
plot(rivières, add=TRUE,col="grey80")
plot(FRA_adm2,lty=3,add=TRUE, lwd=0.5)
points( 2.359368,48.863431,pch=16,col="red",cex=1.5)
text( 2.359368,48.863431,pos=1,"Paris",cex=1.5)
scalebar(c(-4,42), 200)
dev.off()
Ce petit tutoriel, pour être appliqué en classe demande que l'enseignant l'ai préalablement testé, pour éviter de rester bloquer à une étape. Pour les plus jeunes, il faudra avoir préparé les ordinateurs en installant les paquetages nécessaires, et avoir déjà préparés les fichiers d’intérêts. Il a surtout pour vocation de montrer à certains enseignants qu'une tache qui semble simple demande parfois assez de travail, et surtout une bonne préparation.
Je dois être Suicide-R

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Re: Carte simple sous R

Messagepar Tomas leon » 06 Fév 2019, 11:07

Salut,

Super merci pour ta réponse ! Il va me falloir un peu de temps pour tout regarder. Je ne suis pas débutant en R, je le manipule une fois de temps en temps, cependant je n'ai jamais fait de manip de spatial/carto. Ce que j'aimerais faire est très visuel, juste visualiser comment se répartissent mes observations sur mon territoire par exemple, et après la végétation sur mon territoire, les densités de mes espèces d'oiseaux par parcelles, etc ...

Encore merci

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Carte simple sous R

Messagepar Michaël Delorme » 07 Fév 2019, 09:17

Ressource assez complète avec les packages à la mode...
https://www.r-spatial.org/r/2018/10/25/ggplot2-sf.html

Ça donnerait qqchose comme :

Code : Tout sélectionner

library("tidyverse")
library("sf")

read_sf("monshapefile.shp") %>%
  st_transform(2154) %>%
  left_join(mon_df, by = "code_parcelle") %>%
  ggplot() +
    geom_sf(aes(fill = comptage))


Image

ou, mieux pour des données de comptage :

Code : Tout sélectionner

library("tidyverse")
library("sf")

read_sf("monshapefile.shp") %>%
  st_transform(2154) %>%
  left_join(mon_df, by = "code_parcelle") %>%
  ggplot() +
    geom_sf(color = "lightgrey") +
    stat_sf_coordinates(aes(size = comptage)) +
    scale_radius() +
    labs(title = "Mes parcelles",
         x = "",
         y = "") +
  theme_bw()



Image

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Re: Carte simple sous R

Messagepar Tomas leon » 07 Fév 2019, 09:27

Salut,

Super merci pour le lien et l'exemple !
Je vais travailler un peu ça et je vous donnerai ma solution.

Encore merci

Benjamin Leduc
Messages : 158
Enregistré le : 09 Avr 2010, 08:48

Re: Carte simple sous R

Messagepar Benjamin Leduc » 07 Fév 2019, 11:59

J'ai plein de truc pour les cartes… J'en ai fait pas mal, avec des petits plus… cartes thérmique, anamorphoses
Je dois être Suicide-R

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Re: Carte simple sous R

Messagepar Tomas leon » 11 Fév 2019, 12:45

Bonjour à tous,

Merci pour vos conseils, j'ai réussi à faire ce que je voulais ! voici mon code :

Code : Tout sélectionner

library(sf)
library(tidyverse)


Code : Tout sélectionner

ggplothab <- read_sf("Mesparcelles.shp") %>%
# ici lire mon shapfile
  left_join(mesdonnees, by = "PARCELLE_CODE") %>%
 # le joindre à mes données en fonction des mes codes de parcelles, note : je crois que ça préfère les caractères
  ggplot() +
 # on envoie ça dans le ggplot
  geom_sf(aes(fill = NB_OBS), color = "black") + theme_bw() +
 # Puis dans la fonction qui permet d'avoir le fonds de carte avec les données, le "fill" c'est ce que l'on veut, en l'occurence moi c'était les valeures de comptages
  xlab("") + ylab("") +
  scale_fill_distiller(palette = "Spectral") +
 # ici la palette pour créer le gradient de couleurs, ici "Spectral" mais ça aurait pu être "Greens" ou "Grays" par exemple.
  geom_sf_text(aes(label = PARCELLE_CODE), colour = "coral4", size = 3) +
 # Ici j'affiche sur le fonds de carte les noms de mes parcelles dans chaque parcelles correspondantes.
  ggtitle("Nombre d'observations par parcelles") +
 # le titre
theme(axis.text.x = element_text(angle=90, hjust=1))
# ici pour orienter les valeurs des axes, c'est un peu comme las = 2 sous plot()


Encore merci

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: Carte simple sous R

Messagepar Michaël Delorme » 12 Fév 2019, 14:31

Merci pour le retour !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité