-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzone_de_test.Rmd
174 lines (135 loc) · 7.33 KB
/
zone_de_test.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
---
title: "Zone_de_test"
author: "Olivier Leroy"
date: "30 novembre 2019"
output:
bookdown::html_document2:
theme: readable
toc: true
toc_float: true
number_sections: true
fig_caption: yes
code_folding: hide
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
## chargement des libraries
library(ggplot2)
library(bookdown)
library(sf)
library(ggmap)
library(tmaptools)
library(spatstat)
library(maptools)
library(jsonlite) # pour les json
library(sp) # ancien package spatial toujours présent
library(lubridate) # les dates
library(forcats) # pour les facteurs
library(dplyr) # manip données
library(leaflet)
library(ggplot2)
library(plotly)
source("chargement_xp_finale.R")
```
# Localisation et limite de la zone de test
La zone du test (figure : \@ref(fig:zonetest)) a eu lieu à Saint-Etienne dans le quartier Carnot-Manufacture d'armes. Elle est délimitée au nord par le campus de Manufacture de l'Université Jean Monet, à l'est par le boulevard Thiers, à l'ouest par la ligne de tramway et au sud par le boulevard Jules Janin. Ce sont des axes simples à reconnaître même pour quelqu'un de non familier. L'endroit est entièrement couvert par un wifi et dispose de prises de chargement de portables en accès libre.
```{r zonetest, figs.align = 'center', message=FALSE, fig.cap="Carte de présentation de la zone de test"}
load(file = "data/xp_st_e.RData")
xp_st_e +
geom_sf(data = st_transform(arbre_xp_zone.shp, 4326), inherit.aes = FALSE, pch = 16, alpha = 0.7, aes(col = "forestgreen"), size = 0.5, show.legend = "point") +
geom_point(aes(x = 4.3860717, y = 45.4496287), size = 4, pch = "M") +
xlab("") + ylab("") +
labs(caption = "Fonds OSM, rendu Stamen") +
scale_color_manual(values = c("forestgreen" = "forestgreen"), name = "", labels = "Arbres préalablement identifiés")
```
<button class="btn btn-primary" data-toggle="collapse" data-target="#BlockName_carnotleaflet"> Affichage de la carte </button>
<div id="BlockName_carnotleaflet" class="collapse">
```{r, carnotleaflet}
carto_se <- leaflet() %>%
addTiles() %>%
addCircleMarkers(data = st_transform(arbre_xp_zone.shp, 4326), # repasser en wgs84
radius = 2, label = ~species, col = "forestgreen") # cosmetiques + label avec nom latin
carto_se
```
</div>
# Arbres de la zone de test
Cette zone représente `r round(st_area(zone.shp)/10000, 2)` ha, comprend `r nrow(arbre_xp_zone.shp)` arbres soit `r round(nrow(arbre_xp_zone.shp)/round(st_area(zone.shp)/10000, 2),2)` arbres par hectare. Les arbres peuvent y être présents en alignement, en petits bosquets et dans des parcs.
## Répartition par genre
Il y a entre 41 et 42 genres d'arbres (en fonction d'où on range les macromeles). Prés de 50% (cf. figure : \@ref(fig:genrezone)) des arbres se retrouvent être soit des *Platanus* (une seule espèce) soit des *Prunus* (6 espèces).
```{r genrezone, figs.align = 'center', fig.cap="Répartition des arbres par genre"}
genrezone <- arbre_xp_zone.shp %>%
st_set_geometry(value = NULL) %>% # drop la geometrie
group_by(genus) %>% # group par genus
tally() %>% # compte
left_join (arbre_xp_zone.shp, by =c ("genus" = "genus" )) %>% # merge le compte obtenu sur chaque arbre, c'est pas sexy mais bon
ggplot(aes(x = reorder(genus, n))) + # fill = as.factor(id))) + # ici on reoder avec n et on met id n factor pour le remplissage
geom_bar(fill = "#8BBFDD") +
labs(x ="Genre",
ylab ="Nombre d'arbres") +
coord_flip() +
theme(axis.text=element_text(size=8))
ggplotly(genrezone)
```
62 espèces se répartissent dans ces genres.
```{r specieszone, figs.align = 'center', fig.cap="Répartition des arbres par espèce"}
specieszone <- arbre_xp_zone.shp %>%
st_set_geometry(value = NULL) %>% # drop la geometrie
group_by(species) %>% # group par genus
tally() %>% # compte
left_join (arbre_xp_zone.shp, by =c ("species" = "species" )) %>% # merge le compte obtenu sur chaque arbre, c'est pas sexy mais bon
ggplot(aes(x = reorder(species, n))) + # fill = as.factor(id))) + # ici on reoder avec n et on met id n factor pour le remplissage
geom_bar(fill = "#8BBFDD") +
labs(x ="Espece",
ylab ="Nombre d'arbres") +
coord_flip() +
theme(axis.text=element_text(size=8))
ggplotly(specieszone)
```
## Répartition spatiale
```{r}
## ici on passe en sp avec sf
xp_sp <- as(arbre_xp_zone.shp, "Spatial")
## ici on passe en ppp avec maptools
xp_ppp <- as(xp_sp, "ppp")
## on verifie
## on plot
# plot(xp_ppp$x, xp_ppp$y)
# ici juste dans un veteur
# nndist vient de spatstat
# et calcul la distance la plus proche dans un objet ppp
arbre_xp_zone.shp$dist_same_tree <- nndist(xp_ppp)
# nncross prend X et Y deux jeux de ppp et va chercher le point Y le plus proche de X
# on initailise
arbre_xp_zone.shp$dist_diff_tree <- NA
arbre_xp_zone.shp$closer_diff_tree <- NA
nom_genre <- unique(arbre_xp_zone.shp$genus)
# une boucle sur tout les genres
for (i in 1:length(nom_genre)) {
# X et Y : X le genre souhaité et Y le restes
arbre_X_filter <- arbre_xp_zone.shp[arbre_xp_zone.shp$genus == nom_genre[i],]
arbre_Y_filter <- arbre_xp_zone.shp[arbre_xp_zone.shp$genus != nom_genre[i],]
# le df resultats de nncross est stocké dans un df temp
dist_other_tree <- nncross(
X = as(as(arbre_X_filter, "Spatial"), "ppp"), # il faut convertire en ppp
Y = as(as(arbre_Y_filter, "Spatial"), "ppp")
)
# la colonne which correspond à l'index de Y, on remplace par la ref de l'arbre
dist_other_tree$which <- arbre_Y_filter$'ref.FR.Saint.Etienne.tree'[dist_other_tree$which]
# attribution a chaque genre des distances en m à l'arbre d'un autre genre le plus proches
arbre_xp_zone.shp[arbre_xp_zone.shp$genus == nom_genre[i],]$dist_diff_tree <- dist_other_tree$dist
# attribution a chaque genre de la ref de l'arbre le plus proches
arbre_xp_zone.shp[arbre_xp_zone.shp$genus == nom_genre[i],]$closer_diff_tree <- dist_other_tree$which
}
```
Les arbres sont en moyennes à `r round(mean(arbre_xp_zone.shp$dist_same_tree, na.rm = TRUE),2)` m les uns des autres, avec une médiane de `r round(median(arbre_xp_zone.shp$dist_same_tree, na.rm = TRUE),2)` m et pour 90% des arbres cette distance est comprise entre 1,75 et 9,73 m. Vu les activités, il est aussi intéressant de regarder la distance à l'arbre d'un autre genre. En moyenne, il faut `r round(mean(arbre_xp_zone.shp$dist_diff_tree, na.rm = TRUE),2)` m pour trouver un arbre d'un genre différent (la medianne est à `r round(median(arbre_xp_zone.shp$dist_diff_tree, na.rm = TRUE),2)`). La figure \@ref(fig:repartitionspatiale) reprend la distribution des valeurs des distances (dist_diff_tree correspond à la distance à l'arbre d'un autre genre et dist_same_tree à l'arbre le plus proche).
```{r repartitionspatiale, figs.align = 'center', fig.cap="Répartition des arbres par genre"}
repartitionspatiale <- arbre_xp_zone.shp %>%
tidyr::gather(key = "type_dist", value = "dist_m", dist_same_tree, dist_diff_tree) %>%
st_set_geometry(value = NULL) %>%
ggplot(aes(dist_m, color = type_dist)) +
geom_freqpoly(binwidth = 1) + # freqpoly avec un binwidth de 1 m
xlab("distance (m)") +
ylab("Nombres d'arbres") +
theme_bw()
ggplotly(repartitionspatiale)
```