Mapeamento Colaborativo da História de São Paulo (1870-1940)

himacoO grupo Hímaco reúne professores, pesquisadores e estudantes da Universidade Federal de São Paulo e do Arquivo Público do Estado de São Paulo, e tem o objetivo de explorar as possibilidades das geotecnologias em investigações históricas. Desde o início, o grupo optou por trabalhar com o gvSIG, tanto por conta das suas funcionalidades técnicas, como dos valores que ajuda a praticar, voltados à livre circulação do conhecimento e ao trabalho colaborativo.

O trabalho desenvolvido pelo grupo até o momento pode ser conferido em seu site: www.unifesp.br/himaco. Ali, há uma página de download, onde estão disponíveis rasters e vetores referentes ao passado da cidade de São Paulo, bem como um tutorial de introdução ao gvSIG aplicado a estudos históricos. Como estudo piloto, o grupo investigou as principais enchentes na cidade no período que vai de 1870 a 1940, e um mapa temático referente à maior delas, a de 1929, também se encontra disponível.

No momento, o grupo prepara um novo projeto de pesquisa, que representa um desafio bastante grande, tanto em termos técnicos como metodológicos. Esse post tem o objetivo de apresentar a concepção desse projeto e desde já anunciar que vamos precisar de muita ajuda para dar conta dele. Em breve, o projeto estará pronto para ser enviado às agências financiadoras. Até lá, estamos abertos a críticas e sugestões. Depois disso, se conseguirmos o financiamento, mais ainda 😉

Segue o título e o resumo do mesmo.

Mapeamento Colaborativo da História de São Paulo (1870-1940)

O projeto prevê o desenvolvimento e a disponibilização na rede mundial de computadores de uma base cartográfica digital histórica da cidade de São Paulo, referente ao período de sua modernização urbano-industrial (1870-1940), associada a uma interface que permita a interatividade de pesquisadores interessados, de forma a que estes possam alimentar a base disponibilizada com eventos espacializáveis de suas próprias investigações. Dessa forma, pesquisadores interessados poderão produzir mapas e visualizações de suas respectivas pesquisas, a partir da base fornecida, ao mesmo tempo em que acabarão por enriquecer a base disponibilizada com as informações que terão alimentado ao sistema. Pretende-se, assim, criar as condições para o enriquecimento das abordagens da história de São Paulo daquele período, fazendo-o em conformidade com os mais recentes e interessantes desdobramentos das chamadas humanidades digitais, voltados ao trabalho colaborativo e à livre circulação do conhecimento.

Luis Ferla. Hímaco.

Posted in community, portuguese | Tagged , , | 1 Comment

Control de acceso en gvSIG 2.1.0

Hola a todos!

De nuevo aquí para contaros sobre el sistema de permisos de gvSIG.
En versiones anteriores de gvSIG, cuando un desarrollador tenía que realizar una personalización en la que en función del usuario este tuviese que tener acceso a unas u otras herramientas, o tener acceso de solo lectura a determinadas fuentes de datos, capas o tablas, no había nada especifico en gvSIG que le ayudase a abordar ese desarrollo y tenía que hacerlo él todo. En muchas ocasiones teniendo que reescribir código de gvSIG para introducir sus comprobaciones de permisos.
Con gvSIG 2.1.0 se han introducido mecanismos para gestionar el acceso a las distintas herramientas, así como a fuentes de datos. Poco a poco iremos extendiendo el sistema de permisos a otras funcionalidades de gvSIG como pueden ser :

  • Geoprocesos
  • Páginas de preferencias
  • Documentos del proyecto
  • Acceso a snappers

En este artículo vamos a ver cómo podemos usar estos mecanismos.
Lo primero que hay que tener claro es que gvSIG no viene con una gestión de usuarios integrada.
Pero… ¿Qué quiere decir esto?
Pues simplemente que gvSIG no dispone de herramientas para dar de alta usuarios o asignarles permisos a estos. Normalmente cuando precisamos dotar a gvSIG de un sistema de permisos es porque queremos integrarlo en una organización que ya tiene su propio sistema de gestión de usuarios. Así que no vamos a tener que duplicarlo para usarlo en gvSIG.
En gvSIG se ha definido un API que permite autenticar a un usuario, y comprobar si tiene autorización para realizar determinadas acciones. Este API es muy simple. Consta de dos entidades:

  • SimpleIdentityManager, que nos permite autenticar a un usuario.
  • SimpleIdentity, que representa a un usuario autenticado, y nos permite verificar si este está autorizado a acceder a una acción determinada.

La distribución estándar de gvSIG viene con una implementación base de estos servicios en la que existe un usuario predeterminado, “guest“, que cuando se le pregunta, responde siempre que sí esta autorizado a acceder a un recurso; pero podemos reemplazar esta implementación por una nuestra, y ahí esta lo interesante.

En el proyecto org.gvsig.tools están definidos los interfaces de SimpleIdentityManager y SimpleIdentity, su implementación por defecto, así como alguna clase abstracta para facilitarnos la implementación de estos interfaces, además de disponer en el “locator” de tools de métodos para recuperar y registrar implementaciones de ellos.
Para ilustrar como podemos aportar nuestra implementación del SimpleIdentityManager vamos a preparar un plugin para gvSIG que:

  • Registre una implementación propia de SimpleIdentityManager, la cual valide los usuarios contra una BBDD simple en ficheros “property” en los que se encuentre la información de permisos asociada a cada usuario.
  • Y presente un diálogo de identificación de usuario al arrancar gvSIG y valide este contra el SimpleIdentityManager registrado en gvSIG.

Lo de menos es el soporte usado como BBDD, cada cual tendrá el suyo propio en su organización, lo importante es ver como se encajan las piezas para poder disponer de un control de acceso a acciones y recursos personalizado en gvSIG.

En el SVN del proyecto “templates” del redmine de gvSIG encontraremos los fuentes del proyecto org.gvsig.trivialidentitymanagement, con la implementación que voy a ir comentando. Podéis descargarlo desde :

http://devel.gvsig.org/svn/gvsig-plugintemplates/org.gvsig.trivialidentitymanagement/trunk/org.gvsig.trivialidentitymanagement

En él encontraremos básicamente tres proyectos:

  • org.gvsig.trivialidentitymanagement.app.mainplugin
  • org.gvsig.trivialidentitymanagement.lib.impl
  • org.gvsig.trivialidentitymanagement.lib.api

org.gvsig.trivialidentitymanagement.lib.api
En él tendremos la definición de nuestro API, que debe extender de el de gvSIG.
Tendremos los interfaces:

  • TrivialIdentityManager
  • TrivialIdentity

org.gvsig.trivialidentitymanagement.lib.impl
Aquí tendremos las clases que implementan nuestro API. Tendremos:

  • DefaultTrivialIdentityManager
  • DefaultTrivialIdentity

La implementación de estos es muy sencilla. Solamente hacer mención a unos pocos detalles:

  • El SimpleIdentityManager siempre tiene que devolver, en su método getCurrentIdentity, un SimpleIdentity, nunca null, aunque no haya un usuario registrado. Bien podemos devolver un usuario que responde siempre que está autorizado, o que responde siempre que no lo está. Dependerá de lo que nos interese en nuestra personalización.
  • El método “isAuthorized(actionName)”, recibe un nombre de acción y debe responder si el usuario está autorizado a ejecutar la acción asociada a ese nombre.
  • El método “isAuthorized(actionName, resource,resourceid)“, deberá devolver si el usuario está autorizado o no a realizar la acción indicada sobre el recurso indicado. Actualmente, con gvSIG 2.1.0, solo el acceso a fuentes de datos, DataStore de DAL, utiliza este mecanismos, pasando como recurso el DataParameter asociado a la acción que se intenta realizar. Las acciones que usa el DAL son:
    • create-store
    • open-store
    • read-store

Antes de ver la implementaron de ejemplo vamos a ver en que consistiría la BBDD de ficheros properties que usaremos. Dentro de la carpeta de la instalación del plugin tendremos una carpeta  “dbusers” y en ella un fichero property por usuario, que llamaremos con el nombre del usuario seguido de “.property”. Así, si tenemos un usuario “user01” tendremos un fichero “user01.properties”.

En el ejemplo tendremos dado de alta un usuario “user01” con la siguiente configuración:

attr.password=user01
attr.fullname=Test user 01
# El usuario no puede cargar recursos cuyo nombre de fichero termine en dxf
action.dal-read-store.parameter.name=file
action.dal-read-store.parameter.pattern=.*[.]dxf
action.dal-read-store.ifmatches=false
# Tampoco puede acceder a la herramienta de información de un punto.
action.layer-info-by-point=false

La implementación de nuestro ejemplo, básicamente contiene un Map para cada usuario, e indexando por el nombre de la acción obtenemos un booleano que nos indica está autorizado a ejecutar esa acción, diciendo que si están todas las que no conoce:

@Override
public boolean isAuthorized(String actionName) {
    try {
	String value = (String) this.properties.get(ACTION_PREFIX+actionName);
	if( StringUtils.isBlank(value) ) {
	    return true;
	}
	boolean  b = BooleanUtils.toBoolean(value);
	return b;

    } catch(Throwable th) {
	return true;
    }
}

El método que comprueba si tenemos acceso a un recurso, es algo mas complicado, pero también muy básico. Solo gestiona recursos de DAL, así que el recurso es siempre un DataParameter. Para cada acción tiene la siguiente información:

  • name, un nombre de parámetro del DataParameter que recibe.
  • pattern, una expresión regular que aplicar sobre el parámetro indicado.
  • ifmatches, un valor booleano que nos indica si debemos retornar true o false cuando el valor del parámetro concuerde con la expresión regular.

Con algo tan simple ya podemos restringir el acceso a los recursos en función del usuario. Vamos a ir viendo poco a poco el código de este método:

@Override
public boolean isAuthorized(String actionName, Object resource, String resourceName) {
    try {

	if( resource == null ) {
	    return this.isAuthorized(actionName);
	}
	if( !DataManager.CREATE_STORE_AUTHORIZATION.equalsIgnoreCase(actionName) &&
	    !DataManager.READ_STORE_AUTHORIZATION.equalsIgnoreCase(actionName) &&
	    !DataManager.WRITE_STORE_AUTHORIZATION.equalsIgnoreCase(actionName) ) {
	    // Si no es una accion conocida no la tratamos de forma especial
	    return this.isAuthorized(actionName);
	}
	if( !(resource instanceof DataParameters) ) {
	    return true;
	}
	...

Lo primero que hacemos es comprobar si hemos recibido un recurso. Si no lo hemos recibido delegamos en el método isAuthorized que solo recibe el nombre de acción.
Luego nos cercioramos que la acción que se quiere realizar es una de las que soporta nuestro sistema de autorización. En nuestro caso solo soportamos las peticiones de acciones de DAL, así que si no es ninguna de ellas también delegamos en el método isAuthorized que solo recibe el nombre de acción. Y por ultimo comprobamos que el recurso es del tipo DataParameters, que es con los que vamos a trabajar, y si no lo es, como no sabemos manejarlo, simplemente decimos que sí que esta autorizado.

Sea cual sea el tipo de validación que utilicemos estas primeras lineas serán siempre muy parecidas, mientras que el resto de lineas del método ya serán muy dependientes de contra qué y cómo realicemos la comprobación de si un usuario tiene o no autorización para realizar una acción sobre un recurso.

Vamos a ver muy rápido el código del ejemplo:

        ...
	String ifmatchesValue = (String) this.properties.get(ACTION_PREFIX+actionName+".ifmatches");
	if( StringUtils.isBlank(ifmatchesValue) ) {
	    return true;
	}     

	DataParameters params = (DataParameters) resource;
	String parameterValue = null;
	String parameterPattern = (String) this.properties.get(ACTION_PREFIX+actionName+".parameter.pattern");
	if( StringUtils.isBlank(parameterPattern) ) {
	    return true;
	}
	String parameterName = (String) this.properties.get(ACTION_PREFIX+actionName+".parameter.name");
	if( StringUtils.isBlank(parameterName) ) {
	    return true;
	}
	if( parameterName.equalsIgnoreCase("all") ) {
	    parameterValue = params.toString();
	} else {
	    if( resource instanceof FilesystemStoreParameters && parameterName.equalsIgnoreCase("file") ) {
		parameterValue = ((FilesystemStoreParameters) resource).getFile().getAbsolutePath();
	    } else {
		if( params.hasDynValue(parameterName) ) {
		    Object x = params.getDynValue(parameterName);
		    if( x == null ) {
			return true;
		    }
		    parameterValue = x.toString();
		}
	    }
	}
	...

Lo que hace en estas lineas de código es recuperar los valores de los tres datos, “name“, “pattern” y “ifmatches” asociados a la acción que se ha solicitado, y luego intenta recuperar de los DataParameter el valor indicado por “name“, usando como casos especiales los nombres de parámetro “all” y “file“.

Una vez ya hemos recopilado esta información, la cosa es ya mas simple:

        ...
	if( StringUtils.isBlank(parameterValue) ) {
	    return true;
	}
	if( !parameterValue.matches(parameterPattern) ) {
	    return true;
	}
	return BooleanUtils.toBoolean(ifmatchesValue);

    } catch(Throwable th) {
	return true;
    }
}

Comprobamos si concuerda el valor del parámetro con la expresión regular y devolvemos el valor de “ifmaches” en caso de que lo haga.

Hay algún detalle más como los métodos:

  • getAttributeNames, que devuelve una lista de nombres de atributos extra que tiene asociado ese usuario
  • O getAttribute, que nos permite recuperar el valor de un atributo extra del usuario.

Pero no son de mucha importancia, y se explican por si solos.

org.gvsig.trivialidentitymanagement.app.mainplugin
Bueno, pues una vez ya tenemos nuestras clases …. ¿cómo le decimos a gvSIG que las utilice?

Para eso tendremos que crear un plugin y dejar en el algo de configuración adicional.
Por un lado crearemos en el plugin una clase que implemente Runnable, en la que meteremos el código de inicialización de nuestro sistema de permisos. Y por otro deberemos crear en el raíz de nuestro plugin en la carpeta de la instalación el fichero “identity-management.ini”. Este fichero solo precisa de dos lineas, aunque puede contener mas información si la precisamos para nuestra implementación. Vemos esas dos lineas;

IdentityManager=org.gvsig.trivialidentitymanagement.impl.DefaultTrivialIdentityManager
IdentityManagementInitializer=org.gvsig.trivialidentitymanagement.Initializer

La entrada IdentityManager, contendrá el nombre de la clase a utilizar como la implementación del SimpleIdentityManager de gvSIG. Esta clase y todo lo que precise deberá estar en el class-path de nuestro plugin. gvSIG, al iniciarse, comprobara si algún plugin tiene este fichero “identity-management.ini”, y utilizara la clase indicada en la entrada IdentityManager para cargarla y registrarla en el locator de tools. De esta forma cualquier porción de gvSIG que acceda al locator de tools para recuperar el SimpleIdentityManager obtendrá el nuestro.

La otra entrada, IdentityManagementInitializer, contendrá el nombre de una clase de nuestro plugin que implemente el interface runable. Una vez registrado nuestro SimpleIdentityManagement, se cargara esa clase y se invocara a su método run para que esta se encargue de realizar las inicializaciones que precisemos para que nuestro sistema funciones correctamente. Veamos que tenemos en el código de nuestro ejemplo:

public void run() {
    TrivialIdentityManager identityManager = (TrivialIdentityManager) ToolsLocator.getIdentityManager();
    PluginsManager pluginsManager = PluginsLocator.getManager();
    PluginServices plugin = pluginsManager.getPlugin(this);

    // Initialize the folder database  for the TrivialIdentityManager
    File pluginFolder = plugin.getPluginDirectory();
    File dbfolder = new File(pluginFolder, "dbusers");
    identityManager.setdbFolder(dbfolder);

    // Show login dialog
    // Do not return if user cancel login.
    LoginDialog loginDialog = new LoginDialog(pluginFolder);
    loginDialog.showDialog();
    logger.info("User logged as '"+identityManager.getCurrentIdentity().getID()+"'.");
}

Como vemos, hace basicamente dos cosas:

  • Inicializar en nuestro TrivialIdentityManager la BBDD donde esta almacenada la información de permisos.
  • Presentar un cuadro de diálogo para autenticar al usuario.

A partir de aquí, y según sea nuestra aplicacion y organización podemos adaptar este proyecto de ejemplo para que valide contra una BBDD relacional, un servicio web o un servidor de LDAP. No debería ser complicado hacerlo. La única precaución a tener es que la información de los permisos que tiene un usuario debería cargarse al instanciar la clase SimpleIdentity y cuando se llame a los métodos isAuthorized trabajar contra esa información ya en memoria. Si tenemos que acceder a un servicio externo cada vez que se compruebe si el usuario tiene permiso para acceder a una acción puede relentizarse mucho la ejecución de gvSIG.

Vamos a ver el proyecto de ejemplo en acción.

Con la configuración que hemos visto el usuario  user01 no podrá cargar ficheros DXF ni podrá acceder a la herramienta de información.

Con el plugin org.gvsig.trivialidentitymanagement.app.mainplugin instalado, al arrancar gvSIG nos presentra la siguiente pantalla:

login

Nos identificaremos con usuario “user01” y clave “user01” y continuara la carga de gvSIG.
Si una vez arrancado gvSIG intentamos cargar un fichero DXF nos presentara un mensaje diciendo que no estamos autorizados a realizar esa acción:

no-autorizado-dxf

Y si cargamos una capa vectorial, observaremos que no tenemos la herramienta de información.

sin-herramienta-de-informacion
Bueno, espero que os sirva, y a ver cuando tengo otro ratito y cuento algún que otro truquito que me queda en la manga sobre el control de acceso en gvSIG 2.1.0.

Me gustaría agradecer los comentarios de Juan Carlos Gutiérrez que en su momento me ayudaron en el diseño al hacerme participe de sus necesidades relacionadas con el control de acceso a los datos en gvSIG.

Un saludo a todos

Posted in development, gvSIG Association, gvSIG Desktop, spanish | Tagged | 4 Comments

MOOC Cycle “GIS for Users” free of charge

índiceThe gvSIG-Training e-Learning platform opens its registration period for the MOOC cycle “gvSIG for Users” in English, offered by gvSIG Association, in collaboration with GISMAP.

This cycle is made up of three different Modules:
Module 1: “Introduction to GIS” (starting on the 4th of May 2015)
Module 2: “Layer Editing” (starting on the 25th of May 2015)
Module 3: “Raster Analysis” (starting on Autumn 2015)

It will lead participants to how to use and exploit the potentiality of the open source software gvSIG while performing the most common GIS activities. This Course is both addressed to beginners and skilled GIS users who want to learn how to use this software.

The Course is open in continuous form and each module requires a participants engagement of around thirty hours.

Participants can thus plan individually the time to allocate to the course and complete all the scheduled activities without interfering with their daily work.

This Course is completely free of charge except for those participants asking for the corresponding credits of the gvSIG user certification program from the gvSIG Association, that is submitted to the payment of 40 Euros for each module or 100 Euros for the whole cycle.

For further information about topics, goals…:
http://web.gvsig-training.com/index.php/es/quienes-somos-2/noticias-2/145-the-free-mooc-cycle-gvsig-for-users

For registration, you have to press “Enroll” at the corresponding Module, and then accept the “Site policy agreement”. Finally you will have to register at the web page, or login if you were registered already.

Posted in english, gvSIG Desktop, training | Tagged | 7 Comments

Nueva edición del curso gratuito “Introducción a Scripting en gvSIG 2.1”

linux-python-logoEl objetivo de este MOOC es el de dar a conocer el potencial de la programación geoespacial, la posibilidad de crear nuevas herramientas, nuevos geoprocesos o análisis de datos, que nos aumentarán la potencia de gvSIG adaptándose a nuestras necesidades. También la automatización de tareas, que nos podrían generar un ahorro de tiempo y de trabajo considerable.

El curso estará en modalidad de inscripción gratuita y abierta desde el 4 de Mayo de 2015, pudiendo inscribirse o completarse en el momento en que el alumno lo desee. De este modo el curso estará disponible de forma permanente.

Para realizar este curso no se necesitan conocimientos previos sobre programación, será un nivel básico, además de explicar cada línea de código. El curso está realizado con el lenguaje de programación Python, el favorito para comenzar a programar, muy intuitivo y rápido de aprender.

Realizar este curso es completamente gratuito. Aquellos que lo completen y quieran recibir un Certificado de Aprovechamiento, correspondiente a 30 créditos del programa de Certificación de gvSIG, solo tendrán que aportar una contribución de 40 Euros, además de realizar un proyecto personal sobre un Script en gvSIG que será subido al Repositorio y estará disponible para toda la comunidad.

Más información sobre el temario, inscripción, etc.: http://web.gvsig-training.com/index.php/es/quienes-somos-2/noticias-2/140-massive-online-open-course-de-introduccion-a-scripting-en-gvsig-2-1

Para poder matricularse al curso se debe entrar en “Matriculación” al final de la página, y aceptar después el “Acuerdo con las Condiciones del Sitio”. Finalmente se debe realizar el registro.

Posted in development, gvSIG Desktop, scripting, spanish | Tagged , | 1 Comment

Nueva edición del Plano de Toledo del Greco con gvSIG

00_greco

Con este post os queremos presentar el trabajo realizado por uno de los colaboradores más activos del proyecto gvSIG, el profesor Cesáreo Bas Vivancos, director del Máster Universitario en Valoración, Catastro y Sistemas de Información Territorial  y de la Cátedra gvSIG. Junto con Rafael del Cerro Malagón, ha elaborado la nueva edición del plano de Toledo del Greco como aporte significativo a la celebración del IV Centenario del Greco.

La metodología seguida mediante el uso de gvSIG puede consultarte en el siguiente texto.

00_Greco2Un excelente ejemplo del uso de gvSIG con cartografía histórica.

Posted in community, gvSIG Desktop, spanish | Tagged | 3 Comments

Manual gvSIG: llamamiento a traductores

Thank-you-post-it_XoombiTras el lanzamiento de gvSIG 2.1 nos quedaba una asignatura pendiente, la actualización del manual de gvSIG. Tarea que estamos aprovechando no sólo para revisar y actualizar sus contenidos, sino también para aplicar un estilo uniforme a toda la documentación de usuario.

Es una tarea laboriosa debido a que gvSIG es hoy día una aplicación con un elevado número de funcionalidad. El objetivo es que esté disponible para la salida de gvSIG 2.2.

Lo que pedimos es vuestra colaboración para ayudarnos a que esté disponible en otros idiomas, y al menos nos gustaría que estuviera en inglés.

Para ello hemos estructurado el manual de forma que cada voluntario pueda traducir pequeños módulos de forma rápida. Por poco que podáis traducir estaréis haciendo un gran aporte a esta tarea.

Os animamos a todos los que tengáis un nivel bueno de inglés a colaborar y ayudar a que la documentación de gvSIG sea accesible al mayor número de usuarios.

Todos los interesados contactar con: info@gvsig.com

Posted in community, gvSIG Desktop, spanish | 4 Comments

Primer curso online de gvSIG para usuarios sobre la última versión, gvSIG 2.1

Tras la publicación de la última versión de gvSIG, está ya disponible el primer curso online en la plataforma gvsig-training.com sobre dicha versión, gvSIG 2.1.

En este curso se incluyen tanto las funcionalidades de las versiones anteriores como las nuevas herramientas incluidas en gvSIG.

Entre las novedades más importantes de esta versión se incluye la creación de librerías de símbolos propias, a partir de símbolos creados con cualquier programa de dibujo. Una funcionalidad muy interesante también es que una vez creada la librería, se puede generar un paquete de instalación que puede ponerse a disposición de los distintos usuarios de una organización. También se han incluido una gran cantidad de librerías disponibles para descargar desde la propia aplicación, relativas a emergencias, medio ambiente, criminología, etc.

En este curso el usuario aprenderá a crear vistas con cartografía, tanto local como remota, tanto ráster como vectorial, a crear capas nuevas, a realizar análisis básico (áreas de influencia…), y a crear sus propios mapas con su leyenda, escala, norte…, entre otras cosas.

El curso comenzará a partir del día 7 de abril, y las inscripciones siguen abiertas en el portal gvsig-training.com. Para realizar la inscripción se debe acceder a http://web.gvsig-training.com/index.php/es/cursos/online/actuales/product/42-curso-de-gvsig-para-usuarios-idioma-espanol-internacional-10a-edicion

Completando el curso se obtiene el Certificado Usuario Básico de la Asociación gvSIG, y permite acceder al Certificado Experto, a través de los otros cursos disponibles.

¡Os esperamos!

 

Posted in community, gvSIG Desktop, spanish, training | 1 Comment

Create labels by scale (new extension)

English translation of the article by Álvaro Anguix.

We have already seen how to create legends by scale with the new extension “Complex Legend”. Having this new extension installed in our gvSIG, we also will be able to create labels depending on the scale of our View.

Let´s refresh how it works

As always, the first step is to go to labelling options: we open the properties window of the layer on which the label will be applied (right click on the layer name in the Table of Contents) and select the “Labelling” tab.

Z1_gvsig

The definition of a sensitive scale label is located inside the panel “User defined labels“.

01_label

Regarding to the associated panel, its structure has not changed a lot, so it can be handled as usual; only it will be taken into account that the operation “Define classes of features and label each differently” and the new option “Multiple label by scale must be selected from he drop-down menu.

02_label

Once this option is selected, a new entry can be added defining the label to show, clicking on the field “Label expression” which has been added in the table.

The window shown is very similar to the one already known, unless a new tab at the top to bring up a form where the range of the scale on which the label will be visible will be indicated.

03_label

 A functionality really interesting, don´t you think?

Posted in english, gvSIG Desktop, gvSIG development | Tagged , , , | 3 Comments

New extension: Create legends by scale

English translation of the article by Álvaro Anguix.

We carry on moving towards gvSIG 2.2 with a new add-on that allows working with legends by scale (also with labels, but we’ll see that in another post).

The plugin is called Complex Legend extension and, as usual, we can install it via the Add-ons Manager, indicating the URL installation from the drop-down testing repository (Testing gvSIG repository – http://downloads.gvsig.org/download/gvsig-desktop-testing/).

Note: To have this extension in English on gvSIG 2.1 you will need to install a translations update too (at the next version it will be included). From the same Testing gvSIG repository at the add-ons manager you have to install the Translations package (Version 1.0.0-25).

Let´s see how it works…

We make the usual procedure for changing the symbology of one layer: open the window “Properties” of the layer to which the legend will apply (with right button over the layer name in the TOC of the view) and select the tab ‘Symbols’.

Z1_gvsig

Between the different options for legends available, we will see one new legend: “Complex symbology”. We select it.

Z2_gvsig

Then, a form will be presented in which we will start to define the ranges and types of the scales to be used in each section.

We can add new ranges with the button ‘add‘ (green cross icon) and delete the selected one with the button ‘delete‘ (red cross).

Z3_gvsig

In function of the input data the combo will be completed and the bottom panel will be filled with the form needed to fill the specifics parameters of the legend.

Z4_gvsig

After this, it is only need to repeat this operation, as many times as ranges needed to be defined for the layer.

Z5_gvsig

We click accept and we will see the result. If everything has gone OK, the layer will be changing the legend in a dynamic way, depending on the view scale.

Another interesting utility is that in the ranges not covered by the legend, no information will be show, so, we can make the layer “invisible” for non defined scales.

In another post, we will see how to create labels by scale.

Posted in english, gvSIG Desktop, testing | Tagged , , , | 4 Comments

Número de la revista MAPPING dedicado a gvSIG

B_56007WAAAvm7n

El nuevo número de la revista MAPPING, el nº169 es un especial dedicado al proyecto gvSIG, con un conjunto de artículos relacionados con los trabajos presentados en las 10as Jornadas Internacionales de gvSIG.

Además de poder adquirir el número en papel, la revista se puede consultar on-line de forma gratuita.

Los artículos disponibles son:

  • gvSIG y el Sistema de Información Geográfica de los yacimientos de icnitas de dinosaurios de La Rioja. Diseño y aplicaciones patrimoniales.
  • Geobase, el Sistema de Información Geográfica basado en software libre del Registro de la Propiedad de España.
  • Resultados del proceso de migración del proyecto CartoCiudad a software libre.
  • Desarrollo rápido de geoportales con gvNIX.
  • La paleotopografía a través del estudio de sondeos geotécnicos.
  • Análisis delictivo con gvSIG Crime.
  • El SIG en la criminología y la criminología en el SIG: hacia una tercera generación de SIG criminológico.

Agradecemos esta iniciativa de la revista MAPPING y os animamos a todos a pasar un buen rato de lectura geomática.

Posted in gvSIG Desktop, press office, spanish | Tagged , , , , , | 2 Comments