Ejercicio con MapGL

NoƩ Osorio

Datos

Recien acaban de publicar una librerĆ­a que le estaba dando seguimieto a su desarrollo (a base de leer sus teets) llamada mapgl. El autor de la librerĆ­a es Kyle Walker, seguramente has trabajado con alguna de las multiples librerĆ­as que ha desarrollado.

Pero bueno regresando al ejemplo, la librería se publicó hace dos o tres días, este es un ejemplo sencillo de la librería para probarla con datos del C5.

En este ejemplo igual uso la librería H3jsr que bÔsicamente conecta los hexÔgonos que desarrolló UBEr H3

Te dejo mis redes por si gustas contactarme :)

@noeosoriopk

Lectura de los datos del c5,

UsarƩ la base de datos de incidentes del c5 manteniendo solo aquelos que fueron confirmados por alguna autoridad (A) y Excluyo los que no tienen longitud ni latitud.

library(tidyverse)

c5 = read_delim(
  "https://archivo.datos.cdmx.gob.mx/C5/incidentes_viales/inViales_2022_2024.csv",
  delim = ",",
  col_names = T
) %>% 
  filter(codigo_cierre=="A",
         !is.na(longitud),
         !is.na(longitud)
  )

Usa el token de mapbox

La librerƭa requiere el token de mapbox, Si no lo tienes lo puedes solicitar super rƔpido en su pagina

library(mapgl)
token_mb = "aca va tu token"

Indexación con H3

La librerƭa H3jsr permite Indexar la zona y hacer conteos muy rƔpido, por lo que integrando el id del H3, me quedo con la zona que tiene mayor incidentes.

El indice de resolución que usé es 9 , solo con fines didacticos, pero mientras mÔs grande el número, (va de 0 a 15) mÔs pequeño es el hexÔgono y niveles de resolución mÔs pequeños el hexÔgono es mÔs grande.

id=c5 %>% 
  sf::st_as_sf(coords = c("longitud","latitud"),crs=4326) %>%
  select(folio,geometry) %>%
  as_tibble() %>% 
  mutate(h3=h3jsr::point_to_cell(geometry,res=9)) %>%
  count(h3,sort = T) %>% 
  head(1) %>% 
  pull(h3)

Mantengo solo los de la zona que presenta mayor nĆŗmero de incidentes confirmados.

pegriloso = c5 %>% 
  sf::st_as_sf(coords = c("longitud","latitud"),crs=4326) %>%
  select(folio,geometry) %>%
  as_tibble() %>% 
  mutate(h3 = h3jsr::point_to_cell(geometry,res=9)) %>% 
  filter(h3==id)

Por alguna razón debe ser data.frame sf

prueba2 = pegriloso %>% 
  as.data.frame() %>% 
  sf::st_as_sf()

Voila

Mi primer mapa com MapGL, para ver el entorno en 3d, si estƔs desde tu equipo de computo es con la tecla cntrl + arrastrar el cursor hacia arriba/abajo.

mapboxgl(access_token = token_mb) |>
  fit_bounds(prueba2, animate = FALSE) %>%
  add_circle_layer(
    id = "poi-layer",
    source = prueba2,
    circle_color = "#e31a1c",
    circle_radius = 8
  )

Función Compare

IntentƩ hacer un ejercicio para comparar pero no tuve Ʃxito

m1 <- mapboxgl(access_token = token_mb) %>% 
  fit_bounds(prueba2, animate = FALSE) %>%
  add_circle_layer(
    id = "poi-layer",
    source = prueba2,
    circle_color = "#e31a1c",
    circle_radius = 8
  )


m2 <- mapboxgl(mapbox_style("satellite-streets"),
               access_token = token_mb) %>% 
  fit_bounds(prueba2, animate = FALSE) %>%
  add_circle_layer(
    id = "poi-layer",
    source = prueba2,
    circle_color = "#e31a1c",
    circle_radius = 8
  )

compare(
  map1 = m1,
  map2 =  m2,
  width = "50%",
  elementId = "poi-layer"
)

pero lo volverƩ a intentar en los otros dƭas :), sin embargo puedes crear una con la librerƭa htmltools, aunque no me convence mucho.

library(htmltools)

browsable(
  tagList(list(
    tags$div(
      style = 'width:50%;display:block;float:left;',
      m1
    ),
    tags$div(
      style = 'width:50%;display:block;float:left;',
      m2
    )
  ))
)