geografías, sistemas y más

Categoría: Uncategorized

Instalación de Geoserver

En el mes de junio 2023 se celebraron las jornadas de IDERA en Santa Rosa – La Pampa – Argentina. Para esta ocasión, junto al equipo de la Dirección de Información Geoespacial del Instituto Geográfico Nacional preparamos un taller de estilos aplicados a Geoserver.

A continuación quiero compartir la documentación que fuimos generando para la instalación de Geoserver. Si quieren ver el repositorio, éste es el link

¿Qué es Geoserver?

Geoserver es un servidor web de código abierto desarrollado en Java, multiplataforma, que permite a los usuarios compartir y editar datos geoespaciales. Diseñado para la interoperabilidad y publicación de datos de cualquier fuente de datos espaciales con estándares abiertos.

¿Es el único Servidor de datos geográficos open source?

No, no es el único. Existen otras alternativas cómo mapserver

Guía de instalación

Hay múltiples formas de instalar geoserver: con los instaladores, a través de docker, a través de una máquina virtual, usando OSGeo Live, etc. Los pasos acá sugeridos están pensados para hacer pruebas y no para un entorno de producción. Para esto último, no dudes en consultar a tu informático amigo 😉 . Por otro lado, también es importante señalar que el mejor camino es vía docker (estes en el Sistema Operativo que estes). Puede parecer un poco intimidante usar docker para aquellos que no venimos de las Ciencias de la Computación pero la instalación es más rápida y evita problemas de dependencia y errores.

Algunas ventajas de usar docker:

  • con docker ya instalado en tu PC, cuando pruebes geoserver va a andar o andar
  • no vas a tener que instalar nada extra para que funcione. En el caso del instalador de Windows necesitas hacer varios pasos extras y todo depende de cada compu
  • tanto la instalación cómo la desistalación no te va a generar ningún inconveniente de dependencias
  • vas a poder usar docker para probar otras herramientas. En el caso del software dedicado a la generación y procesamiento de información geoespacial es muy útil. Ejemplos: si vas a usar R o Python…

Instalación de Geoserver en Windows

  • Antes de instalar geoserver vas a necesitar tener instalado Java 64 bits JRE o JDK. Podes descargarlo desde acá
  • Luego tenes que descargar Geoserver desde acá

Instalación en Windows vía docker

La documentación oficial está aquí

Si ya tenemos docker instalado, en una terminal ( pone en inicio «cmd» y abrila) escribir:

docker pull docker.osgeo.org/geoserver:2.24.x

Lo que hace este comando es descargar la imagen oficial de geoserver para Docker

Para correr el contenedor:

docker run -it -p8080:8080 docker.osgeo.org/geoserver:2.24.x

Si queremos utilizar el contenedor con una carpeta para poner data (shapes, etc) debemos correr

docker run -v C:\Users\martin\Documents\docker:/opt/geoserver_data -it -p8080:8080 docker.osgeo.org/geoserver:2.24.x

en donde C:\Users\martin\Documents\docker es la carpeta donde irán los shapes o capas a subir

Instalación en GNU-Linux vía docker

Si usas alguna distribución GNU-Linux te sugerimos que optes por la instalación vía docker; de esta forma no vas a tener problemas de dependencias ni nada de eso. Solo necesitas tener instalado docker, docker compose y permisos de administrador.

La documentación oficial está aquí

En una terminal (ctrl+ alt + t) escribir:

docker pull docker.osgeo.org/geoserver:2.24.x

alt_text

En la imagen se ve que se agregó sudo para tener los permisos de administrador

Para correr el contenedor:

docker run -it -p8080:8080 docker.osgeo.org/geoserver:2.24.x

Si queremos utilizar el contenedor con una carpeta para poner data (shapes, etc) debemos correr

docker run --mount type=bind,src=/home/martin/Documents/docker,target=/opt/geoserver_data -it -p8080:8080 docker.osgeo.org/geoserver:2.24.x

o sino

docker run -v /home/martin/Documents/docker:/opt/geoserver_data -it -p8080:8080 docker.osgeo.org/geoserver:2.24.x

en donde /home/martin/Documents/docker es la carpeta donde irán los shapes

Geoserver vía OSGeo Live

OSGeoLive es un DVD de arranque autónomo, unidad USB o máquina Virtual basada en Lubuntu, que permite probar una gran variedad de software geoespacial de código abierto sin necesidad de instalar algo particular. Se compone enteramente de software libre, lo que le permite ser libremente distribuido, duplicado y compartido. Para conocer más acerca de éste proyecto ingresa aquí: https://live.osgeo.org/es/

Dentro de todos los programas que componen a OSGeoLive se encuentra Geoserver. Podemos utilizar esta distribución tanto desde una maquina virtual como tambien desde un usb de arranque. Para cualquiera de las dos opciones vamos a descargar el archivo desde https://live.osgeo.org/es/download.html.

Podes consultar la documentación oficial


Desde una máquina virtual

Para este ejemplo, necesitamos instalar una máquina virtual descarga Oracle Virtual Box desde acá y descargar el archivo de OsGeoLive en formato vm ( consulta acá )


Desde un USB de arranque

Necesitas cualquier programa para generar un usb de arranca (booteable).

Etcher Balena es un programa multiplataforma (tanto para Windows cómo para GNU Linux )

  1. Seleccionas el archivo .*iso descargado de https://live.osgeo.org/es/
  2. Seleccionas el Pendrive
  3. Tocas flash
  4. Reinicias y tenes que seleccionar desde el BIOS que bootee primero el USB

Si en algún momento necesitas volver a restaurar tu usb, seguí éstos pasos : https://www.pendrivelinux.com/restoring-your-usb-key-partition/#DiskPart_Has_Encountered_an_Error

¿Cómo arrancar Geoserver?

Si éstos métodos no te sirven podes guiarte por la documentación oficial en este link

Sale Counter!

ACLARACIÓN 2023  Por un problema de migración se perdieron las imágenes.

Lo importante: link a la app , link al código


Marzo 2020, empieza la pandemía, incertidumbre, confinamiento y Counter Strike…. Resulta que pocos días de dictarse el confinamiento en Argentina, se organizaron unas partidas de Counter Strike Global Offensive. Lo que empezó con un rato de distracción derivo en un nivel de manija importante. Jugamos casi todos los días a las 19hs durante 7 meses seguidos de dos a tres horas sumando miles de mensaje en el grupo de wasap discutiendo las partidas (Estudio Counter se llamó off the record).

El punto es que en algún momento se investigo sobre la posibilidad de obtener estadísticas de cada partida, se armaron tablas para completar manual pero nada de eso prospero.

library(CSGo)

Julio 2021, en una de tantas noches de insonmio veo que existe una API de CSGO para utilizar con R Studio (Gracias Adson Costanzi Filho). A partir de eso, la manija se apoderó de mi y decidí armar una shiny app… un poco para fogonear en el grupo, otro poco para practicar un poco de shiny y no oxidarme.

Por si no les interesa, el código, el link a la app está acá. Sino acá va un poco del esqueleto de la APP…

 

Tres cosas importantes:

  • necesitamos credenciales para usar la api . Si escribimos en r vignette("auth", package = "CSGo")nos aparece el paso a paso para conseguir la credencial de la api
  • necesitamos nuestro user id, o el user id de algún amigo. Para ésto debemos ir a nuestro perfil de steam y desde ahí vamos a ver que la url tiene un formato similar a este: ‘https://steamcommunity.com/profiles/76561198263364899/’ En este caso, el user id son todos esos números que aparecen en la URL

 

  • Por último tenemos que poner la configuración de nuestro perfil en “público” de lo contrario no vamos a obtener ningún dato cuando utilicemos la API. Para eso último debemos ir a Editar Perfil dentro de Steam y dejar configurado el perfil cómo aparece en la imagen

Luego de todo ésto arrancamos en R. La idea de la APP era tener una parte de gráficos comparativos (siempre jugamos los mismos y esto servía para picantear quienes eran los mejores rankeados o los peores) y otra parte con estadísticas individuales utilizando un filtro reactivo con los jugadores.

 

# Instalamos el paquete y lo cargamos
install.packages("CSGo")
library(tidyverse) #para no perder la costumbre
library(CSGo)

 

Con el código get_stats_friends

csgo_stats <- get_stats_friends(api_key = 'tuAPI, user_id = 'tuID')  #el resultado es una lista
df <- as.data.frame(csgo_stats$friends_stats) #lo pasamos a df para trabajar más cómodo
view(df)

Vamos a ver que el data frame que creamos tiene un formato long. En name podemos ver algunos de los indicadores que arroja la API. Realmente es muy variada la info que da y puede llegar a marear. En mi caso, creo que me costo más sintetizar lo que quería mostrar que armar el código. El formato long lo cambie con pivot_wider.

stat <- df %>%  
filter(type=='stat' & category=='stats') %>% select(c(1,2,7)) 
%>% pivot_wider(names_from = name, values_from = value)

Indicadores

Para el dashboard arme dos tabItems: “Estadísticas individuales” y “Comparativo”.

Dentro de estadísticas individuales use:

  • hits_efficiency, hits_to_kill, kills_efficiency (éstos tres fueron copiados textual del blog de Adson ) visualizados con highcharter

UI SIDE

        fluidRow(
        box(
            title = "Efectividad según arma", status = "primary", solidHeader = TRUE,
            collapsible = FALSE,
            width = 12,
            height = 8,
            highchartOutput("plot1", height = 600)
        )
        )
SERVER SIDE
output$plot1 <- 
renderHighchart({
      eficiencia %>% filter(player_name==input$nombresset) %>% 
hchart( "line", hcaes(name_match, valores, group = estadisticas))
      
    })

Si bien el gráfico lo hice crudo, sin personalizar nada en la línea de código podemos ver que hay un filtro por player filter(player_name==input$nombresset) y por otro lado, si van a utilizar gráficos de ésta librería hay que usar la función renderHighchart.

 

Por otro lado, el resto de los indicadores de esa slide los hice con renderInfoBox tambien utilizando el filtro por player filter(player_name == input$nombresset)

  • Matchs jugados (total_matches_played)
  • Headshots (total_kills_headshot)
  • Ganados (total_wins)
  • Defuse (total_defused_bombs)
  • Kills (total_kills)
  • Muertes (total_deaths)
  • MVPs (total_mvps)
  • Kills con faca (total_kills_knife)

Un ejemplo de esto:

UI SIDE

        fluidRow(
            
            infoBoxOutput("kills", width = 3),
            infoBoxOutput("muertes", width = 3),
            infoBoxOutput("mvp", width = 3),
            infoBoxOutput("facas", width = 3)
            
        ),

SERVER SIDE

      #FACAS 
        output$facas <- renderInfoBox({
          a <- df %>%
            filter(player_name == input$nombresset)
          a <- a %>% filter(name=='total_kills_knife')  
          a<- sum(a$value)
        infoBox(
            "Kills con Faca", a, icon = icon("list"),
            color = "purple", fill = TRUE
        )
    })

Para el otro tabItem use:

  • Tiempo jugado
  • Ganados/Jugados
  • Kills/Shots
  • Headshot/Kills
  • Kills/Rounds
  • MVP/Matches
  • Deads por match
  • Puntos contribuidos por match

UI SIDE

              fluidRow(
                box(
                  title = "Deads por match", status = "primary", solidHeader = TRUE,
                  collapsible = TRUE, width = 6,
                  highchartOutput("plot8")
                ),

SERVER SIDE

    #DEADS/MATCHS
    output$plot8 <- renderHighchart({
      stat %>%  mutate(dead=as.integer(total_deaths)/as.integer(total_matches_played)) %>% arrange(dead) %>% 
              hchart("column", hcaes(x = player_name, y = round(dead,2)))%>% 
        hc_xAxis(title = NULL) %>% hc_yAxis(title= NA)
          })

Acá el código completo aquí

Links útiles: