Notes on the GeoServer Workshop

These are the notes I took on the GeoServer workshop at the last gvSIG Conference.

Data Directory

It is important to change the settings of the geoserver_data_dir in the web.xml file to keep the data each time you restart the application container (like Tomcat). It is also good to check out the other settings as it contains interesting facts such as the type of projections to be used or the size of the cache. There are configurable data on the fly and data not configurable on the fly.

Let’s try adding some data sources to generate the layers. To add a shapefile, you have to copy the file in the same physical server machine. To include the shapefile in GeoServer, look for the option of adding a new shapefile datastore type. If you use the location “file: data /…” you use a relative uri to geoserver. You can also search using the “Browse” and use absolute paths.

Warning: Do not you give permission to any user on the configuration interface because they can see all the physical hard disk in this type of dialog.

Memory Mapped Buffers

It is best to use memory mapped buffers (unless you use Windows) if you have enough RAM, then you will avoid continuous access to physical disk. Also, it is best to reproject from native to declared projection. If the shapefile is very big, calculate the bounding box take some time. This does not happen in real databases where spatial indexes.

GeoServer allows you to insert watermarks in your data (for example to use OpenStreetMap).

When you use database connections, you should check the validate connection option, because you never know when the connection is going to crash.

GeoWebCache

GeoWebCache allows, on the latest version of GeoServer, to set up easily which layers will be cached.

You can use data which varies through time, for example for storms and hurricanes. On the database table, you will have a column for time. You can also use elevation data, but then you have to use it with Google Earth. The interesting thing is that, once you have the data, some hipothetical free visor can be used to support it…

Notes of the gvSIG 2.0 workshop

Estos son los apuntes que tomé sobre gvSIG 2.0 en las últimas Jornadas GvSIG.

Pre-Requisitos

  • Java
  • Eclipse
  • Ant (opcional)
  • Maven (opcional)
  • gvSIG (esto es recursivo :))

La principal ventaja de gvSIG 2.0 es que puedes crear un plugin sin saber cómo funciona gvSIG ni tener que compilarlo. Tenemos una instalación de gvSIG que despliega unos binarios que genera el workspace.. But we don’t have to change the source code. Unless, of course, something doesn’t work (bugs) or we have to add some new functionality to the core. Better if you don’t touch it, ask the developers and they will take care.

Creating the workspace

With the binary, there is a wizard which creates an Eclipse workspace with a default template. That leaves all set up but to compile our extension. It also includes a wizard to easily generate installables. These wizards are accessible through the application, at the application menu.

Org.gvsig.tools is the basic infrastructure library to develop plugins. The main functionality is focused on the registration of extension points, utilities to separate API, implementations, SPI (service provider), and monitoring tasks (which in version 1.0 used to freeze the application). This library also supports events, persistence, etc …

gvSIG Plugins

Una biblioteca es un fichero jar. Cuando nuestra aplicación contiene el archivo jar, org.gvsig.tools prepara e inicializa esta biblioteca dentro del núcleo. Las clases en la biblioteca implementan la interfaz Library (AbstractLibrary).

Los managers (PluginsManager) son el punto de entrada a las funcionalidades. Son como factorías (singletons) (al menos uno por librería) que levanta instancias de las funcionalidades incluídas dentro de la librería. También guarda la configuración del módulo.

Los locators (PluginsLocator) permiten registrar implementaciones de managers. Nos permiten recuperar la implementación de manager de un API en concreto. "Dame el manager de esta librería."

Un plugin es una pieza que aporta una funcionalidad: botones y barras de herramientas, opciones de menús, proveedores de datos y tipos de documentos. Andami no ha evolucionado mucho desde la versión 1.x. Andami es el marco para los complementos.

El plugin siempre tendrá al menos dos ficheros:

  • config.xml que indica las clases que implementan el plugin, las dependencias y los menús
  • package.info que indica la versión, el nombre, el build,... del plugin.

gvSIG Extensions

Una extensión (IExtension) es un conjunto de herramientas asociadas con un complemento dentro de una barra de herramientas o menú y funcionan en conjunto. Un grupo de plugins, puedes decir. La extensión que implementa ExclusiveUIExtension especifica qué herramientas son o no visibles, sin tocar el código del núcleo.

Para crear un nuevo complemento, utilizamos la herramienta de generación de menús de complementos disponibles en la versión de desarrollo. Esto genera el espacio de trabajo automáticamente e instala el complemento desde el cual generamos el complemento. Si no tienes una versión de desarrollo, tendrás que compilar gvSIG de los fuentes..

Conviene ir haciéndolo mientras se leen estos apuntes o puedes perderte.

440/5000 El complemento consta de dos proyectos de maven: org.gvsig.plugin y org.gvsig.plugin.app. org.gvsig.plugin proporciona la funcionalidad de la biblioteca independientemente de gvSIG (lógica de negocios). Puede tener dependencias de biblioteca, pero debe poder operar sin tener que abrir la aplicación. Es decir, no requiere nada de Andami, por ejemplo. En org.gvsig.plugin.app.mainplugin (dentro de org.gvsig.plugin.app) implementaremos la funcionalidad.

Los paquetes "api" deben contener interfaces y los paquetes "impl" deben contener implementaciones.

Ahora el espacio de trabajo está listo para trabajar con Eclipse si importamos el proyecto con el complemento de Maven. Si tomamos una plantilla adecuada para generar las fuentes de los complementos, se realiza casi todo el trabajo (excepto la lógica de negocios exacta de nuestro complemento).

Consejos Finales

Es importante tener un proyecto java para probar nuestro plugin con su propio main, sin tener que iniciar gvSIG. También se recomienda que la biblioteca tenga pruebas unitarias. Es decir, podemos hacer una aplicación con todo el poder de gvSIG, pero sin usar gvSIG en sí, es decir, como si fuera una poderosa biblioteca GIS. Conclusión: si lo hacemos bien, incluso podríamos usar nuestro complemento en otra aplicación sin aplicación ... como GoFleet.

Each plugin contains own installer, which created by a wizard inside the application.

Guía para compilar gvSIG 2.0

Me llena de orgullo y satisfacción compartir con vosotros los pasos que hay que seguir para trabajar con gvSIG, pasos descubiertos gracias a la voluntariosa ayuda de algunos compañeros desarrolladores, a los que pude conocer en las últimas Jornadas GvSIG.

Aunque se puede encontrar una guía más completa en la documentación oficial, estos sencillos pasos te permitirán personalizar y compilar. tu propia versión de gvSIG2.0 sin problemas

Lo primero, instalar ciertas dependencias básicas:

#apt-get install maven2 subversion

A continuación, creamos un directorio sobre el que trabajar.

$mkdir gvSIG; cd gvSIG

Una vez tenemos el directorio de trabajo, descargamos los fuentes básicos para preparar el entorno:

$svn co https://joinup.ec.europa.eu/svn/gvsig-desktop/branches/v2_0_0_prep/build/

Antes de compilar nada, preparamos un fichero de configuración básica.

$ cat > ~/.gvsig.platform.properties << EOF
native_platform=linux
native_distribution=all
native_compiler=gcc4
native_arch=i386
native_libraryType=dynamic
export native_classifier=${native_platform}-${native_distribution}-${native_compiler}-${native_arch}-${native_libraryType}
EOF

El siguiente código puede meterse en el fichero .bashrc del /home del usuario, pero también podemos ejecutarlo directamente sobre la consola que estamos trabajando:

$if [ -f "${HOME}/.gvsig.platform.properties" ]
then
. ${HOME}/.gvsig.platform.properties
export MAVEN_OPTS="-Xmx256M -XX:MaxPermSize=64m -Dnative-classifier=${native_classifier} -Dnative-platform=${native_platform}"
else
export MAVEN_OPTS="-Xmx256M -XX:MaxPermSize=64m"
fi

Una vez tenemos el entorno preparado, hacemos la primera compilación con maven. Paciencia, puede tardar.

$mvn install

Y ahora que hemos hecho la primera compilación con maven, procedemos a usar ant para terminar de preparar todo el entorno. Este comando accederá al repositorio online de gvSIG para descargar el resto de fuentes y compilará y generará el gvSIG.

$ant svn.checkout.all

Una vez tenemos el entorno listo, procedemos a preparar la aplicación gvSIG que vamos a utilizar. En este ejemplo usaremos la instalación típica de gvSIG:

$cd projects/gvsig-standard
$ant svn.checkout.all

Paciencia, mucha paciencia.

$mvn install

And it’s done. The application is on the products folder. To execute it, we execute the script gvSIG.sh.

Si al intentar arrancarlo aparece como error "command java not found" habrá que especificcar la variable JAVA_HOME:

$export JAVA_HOME=/usr/lib/jvm...

Now you can use your own customized version.

Soon, I will post about how to create plugins.