<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog | Sébastien Guyader - Blog</title><link>https://www.sebguyader.com/blog/</link><atom:link href="https://www.sebguyader.com/blog/index.xml" rel="self" type="application/rss+xml"/><description>Blog</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-fr</language><image><url>https://www.sebguyader.com/media/icon_hu_fe98182651eb1d95.png</url><title>Blog</title><link>https://www.sebguyader.com/blog/</link></image><item><title>Test Leaflet</title><link>https://www.sebguyader.com/blog/2021-11-01-test-leaflet/</link><pubDate>Mon, 01 Nov 2021 00:00:00 +0000</pubDate><guid>https://www.sebguyader.com/blog/2021-11-01-test-leaflet/</guid><description>
&lt;script src="./index_files/header-attrs/header-attrs.js"&gt;&lt;/script&gt;
&lt;p&gt;Sur le site &lt;a href="https://www.r-bloggers.com/"&gt;R bloggers&lt;/a&gt;, j’ai trouvé un article montrant comment placer des photos sur un fond de carte OpenStreetMap à partir des coordonnées GPS présentes dans les métadonnées (exif).
Tout cela en utilisant des outils libres :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pour les photos :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.digikam.org"&gt;digikam&lt;/a&gt; pour intégrer les coordonées GPS aux images&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/agriggio/art/wiki/Home"&gt;ART&lt;/a&gt; pour convertir les images raw en jpg&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;pour le reste :
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.r-project.org/"&gt;R&lt;/a&gt; et quelques librairies pour générer une table listant les photos, et leurs coordonnées GPS (via &lt;a href="https://exiftool.org"&gt;exiftool&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rstudio.com/"&gt;R Studio&lt;/a&gt; pour écrire ce blog dans le language &lt;code&gt;rmarkdown&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pandoc.org"&gt;pandoc&lt;/a&gt; pour convertir les pages &lt;code&gt;rmarkdown&lt;/code&gt; en pages HTML&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voici la liste des librairies &lt;code&gt;R&lt;/code&gt; utilisées :&lt;/p&gt;
&lt;pre class="r"&gt;&lt;code&gt;library(tidyverse)
library(leaflet)
library(leafpop)
library(htmlwidgets)
library(widgetframe)
library(exiftoolr)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Maintenant, le code :&lt;/p&gt;
&lt;pre class="r"&gt;&lt;code&gt;# Extraction des noms de fichiers images et des coordonnées GPS
# (métadonnées EXIF) et écriture dans un dataframe
files &amp;lt;- dir(&amp;quot;venise&amp;quot;, full.names=T)
df &amp;lt;- data.frame(exif_read(
files, quiet=T, tags = c(&amp;quot;Location&amp;quot;,&amp;quot;GPSLatitude&amp;quot;,&amp;quot;GPSLongitude&amp;quot;)))
# Construction du widget leaflet
map &amp;lt;- leaflet(df[,c(&amp;quot;GPSLatitude&amp;quot;,&amp;quot;GPSLongitude&amp;quot;)], height=700) %&amp;gt;%
addTiles() %&amp;gt;%
addCircleMarkers(
clusterOptions = markerClusterOptions(),
fillOpacity = 0.6, radius = 3,
lng = ~GPSLongitude, lat =~GPSLatitude,
popup = popupImage(as.character(df$SourceFile),
src=&amp;quot;local&amp;quot;, embed=F, width=400),
popupOptions = popupOptions(maxWidth = 1000, keepInView=T)
)
# Il faut corriger le chemin vers les images dans le widget créé,
# pour garder la structure initiale et faire que les photos s&amp;#39;affichent bien
for (i in 1:length(map[[&amp;quot;x&amp;quot;]][[&amp;quot;calls&amp;quot;]][[2]][[&amp;quot;args&amp;quot;]][[9]])){
map[[&amp;quot;x&amp;quot;]][[&amp;quot;calls&amp;quot;]][[2]][[&amp;quot;args&amp;quot;]][[9]][[i]] &amp;lt;- str_replace_all(
map[[&amp;quot;x&amp;quot;]][[&amp;quot;calls&amp;quot;]][[2]][[&amp;quot;args&amp;quot;]][[9]][[i]], &amp;quot;../graphs&amp;quot;, &amp;quot;venise&amp;quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enregistrer le widget au format HTML :&lt;/p&gt;
&lt;pre class="r"&gt;&lt;code&gt;saveWidget(frameableWidget(map),&amp;quot;leaflet.html&amp;quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ensuite il faut mettre &lt;code&gt;&amp;lt;iframe height="700" width="100%" frameborder="no" src="leaflet.html"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/code&gt; dans le corps HTML pour afficher la carte :&lt;/p&gt;
&lt;iframe height="700" width="100%" frameborder="no" src="leaflet.html"&gt;
&lt;/iframe&gt;
&lt;p&gt;Sur cette carte on peut zoomer, et cliquer sur les marqueurs pour afficher les vignettes des photos. Pour voir les photos en taille originale, il suffit de faire un clic droit puis “Afficher l’image”.&lt;/p&gt;
&lt;p&gt;Sachant que certaines photos ont des coordonnées GPS identiques (ou très proches), l’ajout de l’option &lt;code&gt;clusterOptions = markerClusterOptions()&lt;/code&gt; pour construire la carte permet de visualiser le recouvrement des marqueurs et d’accéder aux photos individuelles en cliquant sur les marqueurs de groupe. Le chiffre au centre d’un marqueur indique le nombre de marqueurs (et donc de photos) rassemblés.&lt;/p&gt;</description></item></channel></rss>