R’da Leaflet Paketi ile Harita Üzerinde Dinamik Etiketleme: Dynamic Tagging on Maps Using Leaflet Packages in R

Çalışma kapsamında ağırlıklı olarak leaflet, leaflet.extras, leaflet.extras2 ve mapview paketleri kullanılarak harita üzerinde etiketleme çalışmaları ile farklı formatta kaydetme çalışmaları yapılacaktır. Çalışmada R programlama dili kullanılmıştır.

Yüklenen Kütüphaneler

Aşağıdaki R kod bloğunun çalıştırılmasından sonra kütüphanelerin yüklenip yüklenmediğine dair aşağıdaki gibi mantıksal vektör sonuçları gelecektir. Eğer mantıksal vektör sonuçlarının hepsi TRUE ise kütüphanelerin tamamı yüklenmiştir. Kolaylık sağlaması açısından aşağıdaki kütüphanelerin yüklenmesini gösterir tabloyu da elde etmek ve daha kolay okumanız için aşağıdaki kod bloğu içerisinde kısa bir kod yazdım. Bu kod çalıştırıldığında aşağıdaki tabloda görüleceği üzere bütün kütüphaneler yüklenmiştir. Eğer ilgili kütüphane yüklenmemiş olursa Paket Kurulumu Gerekli ifadesi tablo satırında yazacaktır. Satırda yazan bu uyarı metnine göre paketi ya kurar yada yüklersiniz. Bir paketin kurulması ile yüklenmesinin aynı şey olmadığını burada ifade etmek gerekir konuyu yabancı olanlar için. Paket kurulumu ilk defa yapılan bir işlem iken, paketin yüklenmesi zaten kurulan bir paketin yüklenmesi yani çalışır duruma getirilmesidir. İlk defa bir paket kurulumu gerçekleştiriliyorsa install.packages() fonksiyonunu, zaten bir paket kurulumu gerçekleştirilmiş ise ilgili paketin veya kütüphanenin yüklenmesi veya okunması için library() veya require() fonksiyonlarını kullanıyoruz. Fonksiyonlardaki parantez () içerisine yüklenecek paket veya kütüphane adını yazıyoruz.

kütüphane<-c("dplyr","tibble","tidyr","ggplot2","readr","RColorBrewer","crosstalk","leaflet","DT", "htmlwidgets","kableExtra","readr", "leaflet.extras", "sf", "plotly", "leafpop", "downloadthis", "tidygeocoder", "leaflet.extras2")
yükle<-sapply(kütüphane, require, character.only = TRUE, warn.conflicts = FALSE)
 
#Kütüphane yüklenme durumunu gösteren tablo
 
tablo=suppressWarnings(yükle, classes = "warning")
   
isim=names(tablo)
   
deger=as_tibble(tablo)
   
data.frame(sıra=1:length(isim), kütüphane=isim, yuklenme_durumu=deger$value) %>% mutate(yuklenme_durumu=if_else(yuklenme_durumu==TRUE, "Yuklendi", "Paket Kurulumu Gerekli")) %>% kbl(caption = "Kütüphane Yüklenme Bilgisi") %>% kable_classic_2(full_width = F, html_font="arial")

Yukarıdaki kod bloğunun çalıştırılmasından sonra kütüphane yüklenme bilgisi aşağıdaki tabloda verilmiştir.

Veri Setinin Oluşturulması

Bu kısımda sentetik veri seti üretilerek bu veri seti üzerinde haritalama çalışmaları yapılmıştır.

deneme <- data.frame(
  Firma = rep(c("Ulusoy", "Metro", "Süzer", "Kanberoğlu"),3),
  Adres = rep(c("Ankara","İstanbul","Artvin","Rize"), 3),
  Tur=rep(c("A","B"),6),
  Ciro =rep(c(10000, 12500,30000,40000, 60000,80000),2)) %>%
  tidygeocoder::geocode(address = Adres, method = "osm", verbose = TRUE)
deneme

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen veri seti aşağıdaki tabloda verilmiştir. Kod bloğunda tidygeocoder::geocode() fonksiyonunun kullanılmasının nedeni illere göre enlem (lat) ve boylam (long) bilgisinin alınarak veri setine iki ayrı değişken olarak eklenmek istenmesidir. Doğal olarak enlem ve boylam bilgisi olmadan harita oluşturamıyoruz.

Haritanın Oluşturulması

leaflet(deneme) %>%
  addTiles(group = "OpenStreetMap") %>%
    addPulseMarkers(lng =~long, lat=~lat,  icon = makePulseIcon(), label=paste(deneme$Firma,"firmasının cirosu:", deneme$Ciro), labelOptions = labelOptions(noHide = F, direction = 'top', style = list(
        "color" = "green",
        "font-family" = "calibri",
        "font-style" = "bold",
        "box-shadow" = "3px 3px rgba(0,0,0,0.25)",
        "font-size" = "15px",
        "border-color" = "rgba(0,0,0,0.5)"
      ))) %>%
  addMiniMap() %>%  
  addSearchOSM() %>% 
  addReverseSearchOSM() %>% 
  addResetMapButton() %>% 
  addSearchGoogle()

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen harita aşağıda verilmiştir. R Studio üzerinde çalıştırıldığında harita üzerinde bulunan kırmızı işaretleyiciler yanıp sönmektedir. Bunun için addPulseMarkers() fonksiyonu kullanılmıştır. Ayrıca il üzerine tıklandığında açılan bir etiket tanımlanmıştır. Bu etiket atama işlemi ise label=paste(deneme$Firma,”firmasının cirosu:”, deneme$Ciro) fonksiyonu ile yapılmıştır. Yani kırmızı kutu üzerine işaretleyiciler üzerine tıklandığında Firma adı ile birlikte cirosu görünecektir. addMiniMap() fonskiyonu ile de harita üzerinde mini bir harita oluşturulmaktadır.

Haritada il üzerine tıklandığında açılan bir etiket aşağıdaki gibi olacaktır. Eğer etiketleri harita üzerinde sabitlemek istiyorsak labelOptions = labelOptions(noHide = T) fonksiyonunu yazmamız yeterlidir.

Belirli Bir Bölgenin Kare İçine Alınarak İşaretlenmesi I

Yukarıda yapılan işlemlerden farklı olarak faydalı olabilir düşüncesiyle harita üzerinde belirli koordinatlara sahip bir bölgenin kare içerisine alınması işlemini de göstermek istiyorum. Bu uygulama için Türkiye örneği üzerinden gidelim.

leaflet() %>% addTiles() %>%
  addRectangles(
    lng1=25, lat1=35,
    lng2=45, lat2=43,
    fillColor = "transparent", color="red", label="TÜRKİYE'NİN YAKLAŞIK KOORDİNATLARI", labelOptions = labelOptions(noHide = T, direction = 'top')
  )

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Türkiye haritası kare içerisine alınmış bir şekilde aşağıda verilmiştir. Kare içerisine alınma işlemi addRectangles() fonksiyonu ile yapılmaktadır. Burada enlem ve boylamlar sırasıyla kuzey ve güney, ve aynı zamanda doğu ve batı şeklinde belirlenmelidir.

Belirli Bir Bölgenin Kare İçine Alınarak İşaretlenmesi II

Bu kısımda bir öncekinden farklı olarak kare içerisine alınmış bölgenin etiketi stilize edilmiştir. Bu amaçla aşağıda da görüleceği üzere addRectangles() fonskiyonu içerisinde tanımlanmış labelOptions parametresi içerisinde tanımlanmış style alt parametrisi kullanılmıştır.

leaflet() %>% addTiles() %>%
  addRectangles(
    lng1=25, lat1=35,
    lng2=45, lat2=43,
    fillColor = "transparent", color="red", label="YENİ STİLDE TÜRKİYE'NİN YAKLAŞIK KOORDİNATLARI", labelOptions = labelOptions(noHide = T, direction = 'top', style = list(
        "color" = "black",
        "font-family" = "Cursive",
        "font-style" = "Lucida Handwritingl",
        "box-shadow" = "3px 3px rgba(0,0,0,0.25)",
        "font-size" = "14px",
        "border-color" = "rgba(0,0,0,0.5)",
        "padding" = "4px",
        "background-color"= "rgba(255, 255, 255, 2)",
        "font-weight" = "bold"
      )))

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Türkiye haritası kare içerisine alınmış bir şekilde yeni etiket tasarımı ile aşağıda verilmiştir.

Haritanın PNG ve JPEG Formatlarında Kaydedilmesi

Harita üzerinde yaptığımız işlemlerden sonra eğer haritayı kaydetmek istiyorsak önümüze farklı formatta seçenekler çıkmaktadır. Bu formatlar, html, png, pdf ve jpeg formatları olabilmektedir. Farklı formatlarda haritanın kaydedilmesi için bu kısımda mapview paketi kullanılmıştır. Aşağıdaki çalışmada bir önceki çalışmada elde edilmiş harita png formatında kaydedilmiştir. Bu kaydetme işleminde kullanılan fonksiyon mapshot() olup, bu fonksiyon içerisinde diğer formatlar da tanımlanabilmektedir.

library(mapview)
leaflet() %>% 
addTiles() %>%
addRectangles(
    lng1=25, lat1=35,
    lng2=45, lat2=43,
    fillColor = "transparent", color="red", label="YENİ STİLDE TÜRKİYE'NİN YAKLAŞIK KOORDİNATLARI", labelOptions = labelOptions(noHide = T, direction = 'top', style = list(
        "color" = "black",
        "font-family" = "Cursive",
        "font-style" = "Lucida Handwritingl",
        "box-shadow" = "3px 3px rgba(0,0,0,0.25)",
        "font-size" = "14px",
        "border-color" = "rgba(0,0,0,0.5)",
        "padding" = "4px",
        "background-color"= "rgba(255, 255, 255, 2)",
        "font-weight" = "bold"
      ))) %>% 
mapshot(file = "Turkiye.png")

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen Türkiye haritası kare içerisine alınmış bir şekilde png formatında aşağıda verilmiştir.

Bir diğer çalışmamızda ise çalışmamızın başında oluşturduğumuz haritayı jpeg formatında kaydedelim.

leaflet(deneme) %>%
addTiles(group = "OpenStreetMap") %>%
addPulseMarkers(lng =~long, lat=~lat,  icon = makePulseIcon(), label=paste(deneme$Firma,"firmasının cirosu:", deneme$Ciro), labelOptions = labelOptions(noHide = F, direction = 'top', style = list(
        "color" = "green",
        "font-family" = "calibri",
        "font-style" = "bold",
        "box-shadow" = "3px 3px rgba(0,0,0,0.25)",
        "font-size" = "15px",
        "border-color" = "rgba(0,0,0,0.5)"
      ))) %>% 
mapshot(file = "Turkiyeciro.jpeg")

Yukarıdaki kod bloğunun çalıştırılmasından sonra elde edilen haritamız jpeg formatında aşağıda verilmiştir.

Verinin harita üzerinde görselleştirilmesine yönelik yaptığım çalışmalardan biri olan bu R Markdown çalışmasının özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına bir katkı sunacağı düşünülmektedir.

Faydalı olması ve farkındalık oluşturması dileğiyle.

Bilimle ve teknolojiyle kalınız.

Saygılarımla…

Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.

Note: It can not be cited or copied without referencing.

Yararlanılan Kaynaklar

1.https://rstudio.github.io/crosstalk/ 

2.https://emilyriederer.github.io/demo-crosstalk/tutorial/tutorial-rmd.html 

3.https://www.jla-data.net/eng/leaflet-markers-in-r/ 

4.https://rstudio.github.io/leaflet/popups.html 

5.https://rstudio.github.io/crosstalk/using.html 

6.https://emilyriederer.github.io/demo-crosstalk/tutorial/tutorial-rmd.html 

7.https://plotly-r.com/client-side-linking.html 

8.https://nicar.r-journalism.com/docs/crosstalk-flexdashboard-leaflet-datatable/ 

9.https://rstudio-pubs-static.s3.amazonaws.com/367074_7396dc3734544b0f94e04b8801b24664.html 

10.https://rstudio.github.io/crosstalk/using.html 

11.https://rpubs.com/tevfik1461/deprem 

12.https://cran.r-project.org/web/packages/crosstalk/crosstalk.pdf 

13.https://cran.r-project.org/web/packages/leaflet.extras2/leaflet.extras2.pdf 

14.https://mrjoh3.github.io/2018/07/25/filtering-spatial-data/ 

15.https://rdrr.io/cran/leaflet/man/makeAwesomeIcon.html 

16.https://rstudio.github.io/leaflet/popups.html 

17.https://github.com/r-spatial/leafpop

18. Crostalk ve Leaflet Paketleriyle Türkiye Depremlerinin Analizi, https://rpubs.com/tevfik1461/harita

19. https://tevfikbulut.com/2021/06/29/crostalk-ve-leaflet-paketleriyle-turkiye-depremlerinin-analizi-analysis-of-turkey-earthquakes-using-crostalk-and-leaflet-packages/

20. RStudio Cloud: https://login.rstudio.cloud/

21. The R Project for Statistical Computing. https://www.r-project.org/

22. Mapview paketi, https://cran.r-project.org/web/packages/mapview/index.html

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s