{"id":803,"date":"2020-12-18T08:12:24","date_gmt":"2020-12-18T13:12:24","guid":{"rendered":"http:\/\/portfolio-pre.uqac.ca\/vincentarnaud\/?p=803"},"modified":"2023-05-11T03:31:32","modified_gmt":"2023-05-11T07:31:32","slug":"cartographie-et-dataviz","status":"publish","type":"post","link":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/cartographie-et-dataviz\/","title":{"rendered":"Cartographie et Dataviz"},"content":{"rendered":"<p>Dans l&#8217;univers de la visualisation de donn\u00e9es (<em>DataViz<\/em> pour les intimes), la cartographie prend une grande place. De nombreux concours cartographiques sont organis\u00e9s (voir par exemple, les r\u00e9sultats de celui organis\u00e9 dans le cadre de la <a href=\"https:\/\/journeesig.ulaval.ca\/\" target=\"_blank\">Journ\u00e9e SIG<\/a> organis\u00e9e par l&#8217;Universit\u00e9 Laval en novembre 2020).<\/p>\n<p>Il n&#8217;est cependant pas toujours ais\u00e9 d&#8217;obtenir des fonds de carte ni m\u00eame de les exploiter ais\u00e9ment. Quant aux donn\u00e9es \u00e0 projeter sur un tel fond de carte, l\u00e0 non plus il n&#8217;est parfois pas facile de les obtenir, m\u00eame s&#8217;il s&#8217;agit de donn\u00e9es ouvertes.<\/p>\n<p>Dans ce court didacticiel, je propose, gr\u00e2ce aux <em>packages<\/em> <code>ggmap<\/code>, <code>ggplot2<\/code>, <code>osmdata<\/code> et <code>sf<\/code>, disponibles dans l&#8217;\u00e9cosyst\u00e8me <code>R<\/code>, de construire une cartographie illustrative des pistes et autres voies cyclables et des chemins p\u00e9destres de Chicoutimi tels que r\u00e9pertori\u00e9s par le projet libre et collaboratif <a href=\"https:\/\/www.openstreetmap.org\" target=\"_blank\">OpenStreetMap<\/a>.<\/p>\n<p>En premier lieu, les <em>packages<\/em> au sein desquels se trouvent les fonctions utilis\u00e9es sont d\u00e9clar\u00e9s.<\/p>\n<pre><code>library(ggplot2)\r\nlibrary(ggmap)\r\nlibrary(osmdata)\r\nlibrary(sf)\r\n<\/code><\/pre>\n<p>La zone de d\u00e9limitation (<em>bounding box<\/em>) qui constitue la portion terrestre \u00e0 repr\u00e9senter sur la carte est manuellement d\u00e9finie sous la forme d&#8217;un vecteur nomm\u00e9. Les coordonn\u00e9es choisies ici (latitudes et longitudes minimales et maximales ) ne couvrent que la zone de l&#8217;arrondissement de Chicoutimi.<\/p>\n<pre><code>bbox.slsj &lt;- c(-71.130267, 48.386369, -71.011821, 48.463147)\r\nnames(bbox.slsj) &lt;- c(\"left\", \"bottom\", \"right\", \"top\")\r\n<\/code><\/pre>\n<p>Dans le long bloc de code suivant, les fonctions <code>opq()<\/code>, <code>add_osm_feature()<\/code> et <code>osm_data_sf()<\/code> sont enchain\u00e9es \u00e0 l&#8217;aide de l&#8217;op\u00e9rateur <code>%&gt;%<\/code> pour extraire du projet <em>OpenStreetMap<\/em> les donn\u00e9es suivantes et les stocker dans diff\u00e9rents objets :<\/p>\n<ul>\n<li>le r\u00e9seau routier principal (<em>trunk<\/em>, <em>motorway<\/em>, <em>primary<\/em>) et leurs acc\u00e8s (<em>link<\/em>)<\/li>\n<li>le r\u00e9seau routier secondaire et local (<em>road<\/em>, <em>secondary<\/em>, <em>tertiary<\/em>, <em>residential<\/em>, <em>living_street<\/em>)<\/li>\n<li>diff\u00e9rents types de chemins p\u00e9destres<\/li>\n<\/ul>\n<p>Concernant le r\u00e9seau cyclable, dans un premier temps, sont extraites les pistes cyclables (<code>value=\"cycleway\"<\/code>). Par la suite, sont extraites toutes les voies pouvant accueillir des cyclistes (<code>key = \"bicycle\"<\/code><code>).<\/code><\/p>\n<p>La fonction <code>st_crop()<\/code> est utilis\u00e9e pour v\u00e9rifier que seules les voies de communication situ\u00e9es dans la zone de d\u00e9limitation pr\u00e9alablement d\u00e9finie sont conserv\u00e9es dans chacun de ces objets.<\/p>\n<pre><code>rues.principales.slsj &lt;- opq(bbox = bbox.slsj) %&gt;%\r\nadd_osm_feature(key = \"highway\", value = c(\"trunk\", \"motorway\", \"primary\", \"trunk_link\", \"motorway_link\", \"primary_link\")) %&gt;%\r\nosmdata_sf()\r\n\r\nrues.principales.slsj &lt;- st_crop(rues.principales.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))\r\n\r\nrues.secondaires.slsj &lt;- opq(bbox = bbox.slsj) %&gt;%\r\nadd_osm_feature(key = \"highway\", value = c(\"road\", \"secondary\", \"tertiary\", \"residential\", \"living_street\")) %&gt;%\r\nosmdata_sf()\r\n\r\nrues.secondaires.slsj &lt;- st_crop(rues.secondaires.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))\r\n\r\nvelo.slsj &lt;- opq(bbox = bbox.slsj) %&gt;%\r\nadd_osm_feature(key = \"highway\", value = c(\"cycleway\")) %&gt;%\r\nosmdata_sf()\r\n\r\nvelo.slsj &lt;- st_crop(velo.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))\r\n\r\nvelo2.slsj &lt;- opq(bbox = bbox.slsj) %&gt;%\r\nadd_osm_feature(key = \"bicycle\") %&gt;%\r\nosmdata_sf()\r\n\r\nvelo2.slsj &lt;- st_crop(velo2.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))\r\n\r\nrando.slsj &lt;- opq(bbox = bbox.slsj) %&gt;%\r\nadd_osm_feature(key = \"highway\", value = c(\"pedestrian\", \"footway\", \"track\", \"path\")) %&gt;%\r\nosmdata_sf()\r\n \r\nrando.slsj &lt;- st_crop(rando.slsj$osm_lines, c(ymin = bbox.slsj[[2]], ymax = bbox.slsj[[4]], xmin = bbox.slsj[[1]], xmax = bbox.slsj[[3]]))<\/code><\/pre>\n<p>Il est int\u00e9ressant de noter que gr\u00e2ce au projet <em>OpenStreetMap<\/em>, il est possible d&#8217;\u00e9tablir une distinction entre les pistes cyclables et les autres voies cyclables.<\/p>\n<p>En contexte qu\u00e9b\u00e9cois, le MTQ (2008) d\u00e9finit une piste cyclable comme se distinguant \u00ab <em>des autres types de voies cyclables par le fait qu\u2019elle est toujours s\u00e9par\u00e9e physiquement de la circulation automobile, qu\u2019elle soit am\u00e9nag\u00e9e en site propre ou \u00e0 l\u2019int\u00e9rieur d\u2019une emprise routi\u00e8re.<\/em> \u00bb ; les autres voies cyclables pouvant \u00eatre une bande cyclable, une chauss\u00e9e d\u00e9sign\u00e9e ou un accotement rev\u00eatu.<\/p>\n<p>Le bloc de code suivant permet de t\u00e9l\u00e9charger et stocker dans l&#8217;objet <code>map.slsj<\/code> un fond de carte <a href=\"https:\/\/maps.stamen.com\/#toner\/12\/37.7706\/-122.3782\" target=\"_blank\">Stamen<\/a> en noir et blanc (<code>bw<\/code>) de la zone g\u00e9ographique choisie. Le fond de carte <code>terrain-background<\/code> ne contient que la topographie du lieu.<\/p>\n<pre><code>map.slsj &lt;- get_stamenmap(c(bbox.slsj), zoom=13, maptype=\"terrain-background\", color = \"bw\")<\/code><\/pre>\n<p>Enfin, la carte est construite au moyen des packages <code>ggmap<\/code> et <code>ggplot2<\/code>. Il est \u00e0 noter que le r\u00e9seau routier principal, le r\u00e9seau secondaire, les pistes cyclables, les voies cyclables et les chemins p\u00e9destres de diff\u00e9rents types constituent des calques diff\u00e9rents sur cette carte. Chacun d&#8217;entre eux est caract\u00e9ris\u00e9 par des variations de couleurs, de tailles, de degr\u00e9s de transparence. Nous jouons ici sur la superposition du calque de toutes les voies cyclables (en vert plus fonc\u00e9) et celui des pistes cyclables (en vert plus clair) pour distinguer les pistes cyclables des autres voies cyclables.<\/p>\n<pre><code>ggmap(map.slsj) +\r\n  labs(x=\"Longitude\",\r\n       y=\"Latitude\",\r\n       title=\"Pistes cyclables, autres voies cyclables\\net chemins p\u00e9destres \u00e0 Chicoutimi\",\r\n       caption =\"Map tiles by Stamen Design, under CC BY 3.0\\nData by OpenStreetMap, under ODbL\\n\u00a9 les contributeurs d\u2019OpenStreetMap\") +\r\n  geom_sf(data = rues.principales.slsj,\r\n          col = \"ivory2\",\r\n          size = 0.2,\r\n          alpha = 0.75,\r\n          inherit.aes = FALSE) +\r\n  geom_sf(data = rues.secondaires.slsj,\r\n          col = \"ivory2\",\r\n          size = 0.2,\r\n          alpha = 0.3,\r\n          inherit.aes = FALSE) +\r\n  geom_sf(data = rando.slsj,\r\n          col = \"goldenrod2\",\r\n          size = 0.2,\r\n          alpha = 1,\r\n          inherit.aes = FALSE) +\r\n  geom_sf(data = velo2.slsj,\r\n          col = \"seagreen3\",\r\n          size = 0.5,\r\n          alpha = 1,\r\n          inherit.aes = FALSE) +\r\n  geom_sf(data = velo.slsj,\r\n          col = \"greenyellow\",\r\n          size = 0.5,\r\n          alpha = 1,\r\n          inherit.aes = FALSE) +\r\n  coord_sf(expand = FALSE)<\/code><\/pre>\n<p>On obtient alors la carte suivante.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-813 alignnone\" src=\"https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.1.png\" alt=\"\" width=\"4283\" height=\"4200\" srcset=\"https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.1.png 4283w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.1-150x147.png 150w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.1-300x294.png 300w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.1-768x753.png 768w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.1-1024x1004.png 1024w\" sizes=\"(max-width: 4283px) 100vw, 4283px\" \/><\/p>\n<p>Apr\u00e8s quelques am\u00e9liorations graphiques non d\u00e9taill\u00e9es ici, la carte illustrative finale pr\u00e9sente l&#8217;aspect suivant.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-812 alignnone\" src=\"https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.2.png\" alt=\"\" width=\"4283\" height=\"4200\" srcset=\"https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.2.png 4283w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.2-150x147.png 150w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.2-300x294.png 300w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.2-768x753.png 768w, https:\/\/portfolio.uqac.ca\/vincentarnaud\/files\/2020\/12\/carte.cycles.2-1024x1004.png 1024w\" sizes=\"(max-width: 4283px) 100vw, 4283px\" \/><\/p>\n<p>Il est int\u00e9ressant de noter que les voies cyclables semblent suivre l&#8217;\u00e9coulement de la rivi\u00e8re Saguenay, \u00e0 l&#8217;exception de sections proches du c\u00e9gep et de l&#8217;universit\u00e9. Quant au r\u00e9seau p\u00e9destre, la <a href=\"https:\/\/zoneportuaire.com\/\" target=\"_blank\">zone portuaire<\/a>, le <a href=\"https:\/\/rivieredumoulin.saguenay.ca\/\" target=\"_blank\">Parc de la Rivi\u00e8re-du-Moulin<\/a> et le centre de v\u00e9lo de montagne <a href=\"https:\/\/www.velochicoutimi.qc.ca\/\" target=\"_blank\"><em>le Panoramique<\/em><\/a> sont \u00e9vidents. Mais les sentiers du centre de v\u00e9lo de montagne ne sont pas des chemins p\u00e9destres m\u00eame s&#8217;ils sont accessibles en raquettes l&#8217;hiver. Le choix de types de chemins p\u00e9destres \u00e0 afficher aurait donc pu \u00eatre affin\u00e9&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans l&#8217;univers de la visualisation de donn\u00e9es (DataViz pour les intimes), la cartographie prend une grande place. De nombreux concours cartographiques sont organis\u00e9s (voir par exemple, les r\u00e9sultats de celui organis\u00e9 dans le cadre de la Journ\u00e9e SIG organis\u00e9e par l&#8217;Universit\u00e9 Laval en novembre 2020). Il n&#8217;est cependant pas toujours ais\u00e9 d&#8217;obtenir des fonds de &hellip; <a href=\"https:\/\/portfolio.uqac.ca\/vincentarnaud\/cartographie-et-dataviz\/\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Cartographie et Dataviz<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":129,"featured_media":818,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/posts\/803"}],"collection":[{"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/users\/129"}],"replies":[{"embeddable":true,"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/comments?post=803"}],"version-history":[{"count":12,"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/posts\/803\/revisions"}],"predecessor-version":[{"id":823,"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/posts\/803\/revisions\/823"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/media\/818"}],"wp:attachment":[{"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/media?parent=803"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/categories?post=803"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/portfolio.uqac.ca\/vincentarnaud\/wp-json\/wp\/v2\/tags?post=803"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}