Uso de Mapas interactivos con Leaflet

Listado bibliotecas a usar:

readr

Esta biblioteca permite el uso y manejo de archivos de tipo csv y txt

htmlwidgets

Esta biblioteca se utiliza para generar el documento html del mapa y los marcadores aplicados.

Leaflet

Leaflet es una biblioteca JavaScript de código abierto que se utiliza para crear aplicaciones de mapas web. es compatible con la mayoría de las plataformas móviles y de escritorio, y admite HTML5 y CSS3.

--------------------------------------------------------------------------------------------

Caso práctico de Leaflet

Leaflet - Contenedor

mapabase_001 <- leaflet()
mapabase_001 

MAPA BASE - OpenStreetMap - GRIDS (Rejillas) - HTML

mapabase_001 <- leaflet() %>% 
  addTiles()
mapabase_001

Ahora se muestra el uso de regilla en mapa principal(GRID):

mapabase_002 <- leaflet() %>% 
  addTiles() %>% 
  addGraticule(interval = 30,style = list(color="purple",weight=3))
mapabase_002 
htmlwidgets::saveWidget(mapabase_002,"C:/jupyter_src/Mapas_R/resultado/mapabase_002.html")

LATITUD - LONGITUD - MARCADOR - SETVIEW - POPUP - HTML

Generamos marcadores utilizando la latitud y longitud de cada sitio que deseamos incluir:

Palacio de Gobierno: 19.4324501,-99.1319000

Catedral: 19.4324501,-99.1363428

mapa_001 <- leaflet() %>% 
  addTiles() %>% 
  setView(lat =19.4324501 ,lng =-99.1337679 ,zoom = 16) %>% 
  addMarkers(lat=19.4324501,lng=-99.1319000,popup = "<b>PALACIO DE GOBIERNO</b>")
mapa_001 

MULTIPLES MARCADORES - LATITUD - LONGITUD - MARCADORES - SETVIEW - POPUP - HTML

IMPORTAR REGISTROS DESDE ARCHIVOS TXT - CSV

Primero cargamos archivo que contiene latitud, longitud y el color a aplicar en marcador de ruta

lat_lng_lugar_mx <- read_csv("C:/jupyter_src/Mapas_R/lat_lng_lugar_mx.txt", show_col_types = FALSE)
View(lat_lng_lugar_mx)

Relacionar csv con el mapa

Ahora aplicamos esos campos del archivo para los marcadores:

mapa_003 <- leaflet(lat_lng_lugar_mx) %>% 
  addTiles() %>%
  setView(lat =19.4324501 ,lng =-99.1337679 ,zoom = 16) %>% 
  addMarkers(lat =~latitud ,lng =~longitud ,popup =~lugar )
mapa_003

Generar archivo de mapa interactivo en formato html

Finalmente generamos el archivo html de mapa:

htmlwidgets::saveWidget(mapa_003,"C:/jupyter_src/Mapas_R/resultado/mapa_003.html")

AÑADIR MULTIPLES MARCADORES - DATA FRAMES

Ahora utilizamos un dataframe como fuente para incluir los multiples marcadores en el mapa:

cent_hist_001 <- data.frame(lugar=c("<b>PALACIO DE GOBIERNO</b>","<b>MUNICIPALIDAD DE CD MEX</b>","<b>CATEDRAL DE CD MEX</b>"),
                            latitud=c(19.4324501,19.4316534,19.4340968),
                            longitud=c(-99.1319000,-99.134148,-99.1329472))


mapa_004 <- leaflet(data =cent_hist_001 ) %>% 
  addTiles() %>% 
  setView(lat =19.4324501 ,lng =-99.1337679 ,zoom = 16) %>% 
  addMarkers(lat =~latitud ,lng =~longitud ,popup =~lugar )
mapa_004
htmlwidgets::saveWidget(mapa_004,"C:/jupyter_src/Mapas_R/resultado/mapa_004.html")

LS0tDQp0aXRsZTogIlVzbyBkZSBNYXBhcyBpbnRlcmFjdGl2b3MgY29uIExlYWZsZXQiDQphdXRob3I6ICJTdXNhbmEgUm9kcmlndWV6Ig0KZGF0ZTogIjIwMjMtMTAtMDYiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiBmbGF0bHkNCi0tLQ0KDQo8IS0tIGRvY3VtZW50byByIG1hcmtkb3duIGRlbCB1c28gZGUgbGVhZmxldCB5IFIgY29uIGFyY2hpdm9zIC0tPg0KDQojIFVzbyBkZSBNYXBhcyBpbnRlcmFjdGl2b3MgY29uIExlYWZsZXQNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoNCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGh0bWx3aWRnZXRzKQ0KbGlicmFyeShsZWFmbGV0KQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KIyMgTGlzdGFkbyBiaWJsaW90ZWNhcyBhIHVzYXI6DQoNCiMjIyByZWFkcg0KDQpFc3RhIGJpYmxpb3RlY2EgcGVybWl0ZSBlbCB1c28geSBtYW5lam8gZGUgYXJjaGl2b3MgZGUgdGlwbyBjc3YgeSB0eHQNCg0KIyMjIGh0bWx3aWRnZXRzDQoNCkVzdGEgYmlibGlvdGVjYSBzZSB1dGlsaXphIHBhcmEgZ2VuZXJhciBlbCBkb2N1bWVudG8gaHRtbCBkZWwgbWFwYSB5IGxvcyBtYXJjYWRvcmVzIGFwbGljYWRvcy4NCg0KIyMjIExlYWZsZXQNCg0KTGVhZmxldCBlcyB1bmEgYmlibGlvdGVjYSBKYXZhU2NyaXB0IGRlIGPDs2RpZ28gYWJpZXJ0byBxdWUgc2UgdXRpbGl6YSBwYXJhIGNyZWFyIGFwbGljYWNpb25lcyBkZSBtYXBhcyB3ZWIuIGVzIGNvbXBhdGlibGUgY29uIGxhIG1heW9yw61hIGRlIGxhcyBwbGF0YWZvcm1hcyBtw7N2aWxlcyB5IGRlIGVzY3JpdG9yaW8sIHkgYWRtaXRlIEhUTUw1IHkgQ1NTMy4NCg0KXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC1cLVwtXC0tDQoNCiMjIENhc28gcHLDoWN0aWNvIGRlIExlYWZsZXQNCg0KIyMjIExlYWZsZXQgLSBDb250ZW5lZG9yDQoNCmBgYHtyfQ0KDQptYXBhYmFzZV8wMDEgPC0gbGVhZmxldCgpDQptYXBhYmFzZV8wMDEgDQoNCmBgYA0KDQojIyMgTUFQQSBCQVNFIC0gT3BlblN0cmVldE1hcCAtIEdSSURTIChSZWppbGxhcykgLSBIVE1MDQoNCmBgYHtyfQ0KbWFwYWJhc2VfMDAxIDwtIGxlYWZsZXQoKSAlPiUgDQogIGFkZFRpbGVzKCkNCm1hcGFiYXNlXzAwMQ0KDQpgYGANCg0KQWhvcmEgc2UgbXVlc3RyYSBlbCB1c28gZGUgcmVnaWxsYSBlbiBtYXBhIHByaW5jaXBhbChHUklEKToNCg0KYGBge3J9DQoNCm1hcGFiYXNlXzAwMiA8LSBsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkR3JhdGljdWxlKGludGVydmFsID0gMzAsc3R5bGUgPSBsaXN0KGNvbG9yPSJwdXJwbGUiLHdlaWdodD0zKSkNCm1hcGFiYXNlXzAwMiANCg0KDQpodG1sd2lkZ2V0czo6c2F2ZVdpZGdldChtYXBhYmFzZV8wMDIsIkM6L2p1cHl0ZXJfc3JjL01hcGFzX1IvcmVzdWx0YWRvL21hcGFiYXNlXzAwMi5odG1sIikNCg0KYGBgDQoNCiMjIyBMQVRJVFVEIC0gTE9OR0lUVUQgLSBNQVJDQURPUiAtIFNFVFZJRVcgLSBQT1BVUCAtIEhUTUwNCg0KR2VuZXJhbW9zIG1hcmNhZG9yZXMgdXRpbGl6YW5kbyBsYSBsYXRpdHVkIHkgbG9uZ2l0dWQgZGUgY2FkYSBzaXRpbyBxdWUgZGVzZWFtb3MgaW5jbHVpcjoNCg0KUGFsYWNpbyBkZSBHb2JpZXJubzogMTkuNDMyNDUwMSwtOTkuMTMxOTAwMA0KDQpDYXRlZHJhbDogMTkuNDMyNDUwMSwtOTkuMTM2MzQyOA0KDQpgYGB7cn0NCm1hcGFfMDAxIDwtIGxlYWZsZXQoKSAlPiUgDQogIGFkZFRpbGVzKCkgJT4lIA0KICBzZXRWaWV3KGxhdCA9MTkuNDMyNDUwMSAsbG5nID0tOTkuMTMzNzY3OSAsem9vbSA9IDE2KSAlPiUgDQogIGFkZE1hcmtlcnMobGF0PTE5LjQzMjQ1MDEsbG5nPS05OS4xMzE5MDAwLHBvcHVwID0gIjxiPlBBTEFDSU8gREUgR09CSUVSTk88L2I+IikNCm1hcGFfMDAxIA0KDQpgYGANCg0KIyMjIE1VTFRJUExFUyBNQVJDQURPUkVTIC0gTEFUSVRVRCAtIExPTkdJVFVEIC0gTUFSQ0FET1JFUyAtIFNFVFZJRVcgLSBQT1BVUCAtIEhUTUwNCg0KIyMjIyBJTVBPUlRBUiBSRUdJU1RST1MgREVTREUgQVJDSElWT1MgVFhUIC0gQ1NWDQoNClByaW1lcm8gY2FyZ2Ftb3MgYXJjaGl2byBxdWUgY29udGllbmUgbGF0aXR1ZCwgbG9uZ2l0dWQgeSBlbCBjb2xvciBhIGFwbGljYXIgZW4gbWFyY2Fkb3IgZGUgcnV0YQ0KDQpgYGB7cn0NCmxhdF9sbmdfbHVnYXJfbXggPC0gcmVhZF9jc3YoIkM6L2p1cHl0ZXJfc3JjL01hcGFzX1IvbGF0X2xuZ19sdWdhcl9teC50eHQiLCBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQ0KVmlldyhsYXRfbG5nX2x1Z2FyX214KQ0KYGBgDQoNCiMjIyBSZWxhY2lvbmFyIGNzdiBjb24gZWwgbWFwYQ0KDQpBaG9yYSBhcGxpY2Ftb3MgZXNvcyBjYW1wb3MgZGVsIGFyY2hpdm8gcGFyYSBsb3MgbWFyY2Fkb3JlczoNCg0KYGBge3J9DQptYXBhXzAwMyA8LSBsZWFmbGV0KGxhdF9sbmdfbHVnYXJfbXgpICU+JSANCiAgYWRkVGlsZXMoKSAlPiUNCiAgc2V0VmlldyhsYXQgPTE5LjQzMjQ1MDEgLGxuZyA9LTk5LjEzMzc2NzkgLHpvb20gPSAxNikgJT4lIA0KICBhZGRNYXJrZXJzKGxhdCA9fmxhdGl0dWQgLGxuZyA9fmxvbmdpdHVkICxwb3B1cCA9fmx1Z2FyICkNCm1hcGFfMDAzDQoNCmBgYA0KDQojIyMgR2VuZXJhciBhcmNoaXZvIGRlIG1hcGEgaW50ZXJhY3Rpdm8gZW4gZm9ybWF0byBodG1sDQoNCkZpbmFsbWVudGUgZ2VuZXJhbW9zIGVsIGFyY2hpdm8gaHRtbCBkZSBtYXBhOg0KDQpgYGB7cn0NCmh0bWx3aWRnZXRzOjpzYXZlV2lkZ2V0KG1hcGFfMDAzLCJDOi9qdXB5dGVyX3NyYy9NYXBhc19SL3Jlc3VsdGFkby9tYXBhXzAwMy5odG1sIikNCmBgYA0KDQojIyMgQcORQURJUiBNVUxUSVBMRVMgTUFSQ0FET1JFUyAtIERBVEEgRlJBTUVTDQoNCkFob3JhIHV0aWxpemFtb3MgdW4gZGF0YWZyYW1lIGNvbW8gZnVlbnRlIHBhcmEgaW5jbHVpciBsb3MgbXVsdGlwbGVzIG1hcmNhZG9yZXMgZW4gZWwgbWFwYToNCg0KYGBge3J9DQpjZW50X2hpc3RfMDAxIDwtIGRhdGEuZnJhbWUobHVnYXI9YygiPGI+UEFMQUNJTyBERSBHT0JJRVJOTzwvYj4iLCI8Yj5NVU5JQ0lQQUxJREFEIERFIENEIE1FWDwvYj4iLCI8Yj5DQVRFRFJBTCBERSBDRCBNRVg8L2I+IiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZD1jKDE5LjQzMjQ1MDEsMTkuNDMxNjUzNCwxOS40MzQwOTY4KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25naXR1ZD1jKC05OS4xMzE5MDAwLC05OS4xMzQxNDgsLTk5LjEzMjk0NzIpKQ0KDQoNCm1hcGFfMDA0IDwtIGxlYWZsZXQoZGF0YSA9Y2VudF9oaXN0XzAwMSApICU+JSANCiAgYWRkVGlsZXMoKSAlPiUgDQogIHNldFZpZXcobGF0ID0xOS40MzI0NTAxICxsbmcgPS05OS4xMzM3Njc5ICx6b29tID0gMTYpICU+JSANCiAgYWRkTWFya2VycyhsYXQgPX5sYXRpdHVkICxsbmcgPX5sb25naXR1ZCAscG9wdXAgPX5sdWdhciApDQptYXBhXzAwNA0KDQpodG1sd2lkZ2V0czo6c2F2ZVdpZGdldChtYXBhXzAwNCwiQzovanVweXRlcl9zcmMvTWFwYXNfUi9yZXN1bHRhZG8vbWFwYV8wMDQuaHRtbCIpDQoNCmBgYA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KOjo6IHsudG9jaWZ5LWV4dGVuZC1wYWdlIGRhdGEtdW5pcXVlPSJ0b2NpZnktZXh0ZW5kLXBhZ2UiIHN0eWxlPSJoZWlnaHQ6IDA7In0NCjo6Og0K