Programa das 5as Jornadas Brasileiras de gvSIG

programa_5as_jornadas_gvsig_brasil_Já está disponível o programa provisório das 5as Jornadas Brasileiras de gvSIG que se realizará nos dias 14 a 16 de setembro de 2016, no Auditório do Centro de Ciências Rurais da UFSM – Santa Maria/RS – Brasil.

Recordamos que também continua aberta a inscrição (limitada-gratuita) que pode ser feita através do formulário existente na web.

O evento representará a quinta reunião formal de usuários e desenvolvedores ligados ao software gvSIG organizada no Brasil.

Esperamos sua participação.

Posted in gvSIG Desktop | Leave a comment

La cuarta distribución de gvSIG 2.3 candidata a versión final (RC4) ya está disponible

Ya está disponible la cuarta distribución candidata a versión (Release Candidate) de gvSIG 2.3 (gvSIG 2.3 RC4).

logo_2_3_RC4Os animamos a que nos reportéis los posibles errores y sugerencias que encontréis a través de la lista de usuarios.

En esta distribución se han incluido varias novedades que aún no iban en las RC anteriores, entre las que destacan varias relativas a las Vistas 3D, o el acceso a datos LiDAR.

 

Todas las novedades de esta versión son:

Para usuarios:

  • Lectura y escritura de formato PRJ (proyecciones)
  • Segmentación dinámica/Sistema de Referencia Lineal (LRS)
  • Nuevas herramientas de edición: cambiar sentido, curva a polilínea, paralela
  • Añadir capa a localizador desde tabla de contenidos
  • Mejoras de scripting
  • Soporte de R
  • Mejoras PostGIS
  • Soporte CSW 2.0.2
  • Soporte de nuevos formatos a través de GDAL/OGR
  • Mejoras de usabilidad
  • Actualización de idiomas
  • Nuevo instalador compatible con 64 bits
  • Disponible distribución para Windows 64 bits
  • Generador automático de distribuciones
  • Generador automático de paquetes Debian
  • Versión portable para Mac
  • Acceso a Google Maps
  • Acceso a Bing Maps
  • Acceso a Google Street View
  • Nuevos servidores de OSM (Stamen)
  • Soporte de datos LiDAR (.las)
  • Asistente para CSV
  • Vistas 3D:
    • Soporte de reproyección de Vistas 2D a 3D
    • Soporte de datos vectoriales en Vistas 3D
    • Animaciones 3D
    • Anaglifos
  • Buscador de Catastro (España)
  • Nueva biblioteca de símbolos INSPIRE
  • Geoproceso de detección de edificios a partir de datos LiDAR y detección de diferencias de alturas

A nivel arquitectura:

  • Acceso a ráster a través de GDAL
  • Soporte de proyecciones a través de GDAL
  • Soporte a multigeometrías
  • Actualización de versión de Groovy

Podéis descargar esta versión desde la página web de gvSIG.

¡Gracias por vuestra colaboración!

Posted in community, gvSIG Desktop, spanish, testing | Tagged | 1 Comment

Fourth gvSIG 2.3 release candidate (RC4) is now available

The fourth gvSIG 2.3 Release Candidate (gvSIG 2.3 RC4) is now available.

logo_2_3_RC4We encourage you to test it and send us any errors and suggestions in the users mailing list.

It includes several new features from the previous release candidate distributions. The main ones are related to 3D Views or LiDAR data, and a distribution for MAC OS X.

 

All the novelties of this version are:

For users:

  • PRJ format (projections) reading and writing
  • Dynamic segmentation/Linear Reference System (LRS)
  • New editing tools: change sense, curve to polyline, parallel
  • Add layer to locator from Table of Contents
  • Scripting improvements
  • R support
  • PostGIS improvements
  • CSW 2.0.2 support
  • New formats support through GDAL/OGR
  • Usability improvements
  • Language update
  • New installer compatible with 64 bits
  • Windows 64 bits distribution available
  • Distributions automatic generator
  • Debian packages automatic generator
  • Portable version for Mac
  • Access to Google Maps
  • Access to Bing Maps
  • Access to Google Street View
  • New OSM servers (Stamen)
  • LiDAR data support (.las)
  • CSV wizard
  • 3D Views:
    • 2D to 3D views reprojection support
    • Vector data support in 3D views
    • 3D animations
    • Anagliphs
  • Cadastre browser (Spain)
  • New INSPIRE symbol library
  • Geoprocess to detect buildings from LiDAR data and height differences detection

In an arquitecture level:

  • Access to raster files through GDAL
  • Projection support through GDAL
  • Multi-geometry support
  • Groovy version updated

You can download this version from the gvSIG website.

Thanks for your collaboration!

Posted in community, development, english, gvSIG Desktop, testing | Tagged | Leave a comment

Towards gvSIG 2.3: 3D animations

One of the novelties related to 3D in gvSIG 2.3 is the possibility to create animations.

gvSIG users will have an animations manager where zooms (or frames) will be able to be saved in order to create the animation.

Here you have a video about how this new tool works:

Posted in english, gvSIG Desktop | Tagged , | 1 Comment

Towards gvSIG 2.3: New integration at the Scripting libraries

scriptThis is the first of a series of posts where we are going to explain all the novelties at the Scripting module, from its new integration to the new developed tools.

A small reminder about the Scripting Module. Its development is focused on Jython libraries and scripts, because of its ease, versatility and power. This language allows us to mix Java and Python in the same application. Apart from it there are another options to create scripts like Groovy or R.

You can test this new integration in the new gvSIG 2.3 RC2 version already. There’s some bug in the libraries, and if you find any other error you can inform us at the gvSIG mailing lists. We also will publish new documentation.

New integration

What have we done?

For the new gvSIG 2.3 version we have done several important changes at the Python libraries integration with the gvSIG API. At this new integration we have followed an approximation that is different to the previous gvSIG versions.

Instead of rewriting all the classes that gvSIG has in its API already, we have delivered extra methods, developed in Jython, on these existing classes. We also have added new methods to the gvSIG API. It will be very useful because Java developers will be able to use them too.

Why have we done it?

At that way we decrease the efforts required to maintain these libraries, and we increase the compatibility with the rest of the gvSIG API too.

One of the errors of the previous version was that we had to work with Java and Python objects at the same time and it was very difficult because of their incompatibility.

What consequences does it have?

At this way we always are going to work with Java objects in our scripts (if we only are working on the gvSIG API).

We remember that, as we are working with Python, we will be able to create classes that have characteristics from Java and Python. We will be able to import Python libraries, Jython libraries that mix Java and Python, and Java libraries that gvSIG includes, or external ones.

Is the compatibility with gvSIG 2.2 version kept?

In spite of the important changes that have been applied in an internal level, they won’t be noted in an external one. We have tried to keep the compatibility with gvSIG 2.2 as much as we have been able to. In the next weeks we will publish a new post about these changes, showing source code, where you will be able to change the libraries path or some lines of code.

We’ve also added a compatibility option for gvSIG 2.2 scripts, that we are testing.

What part of the libraries are affected by this implementation?

It affect mainly to the classes that refer to the data processing. We’ve wanted to simplify this part to encourage inexperienced users that are interested in creation of new geoprocesses or data analysis to do it in an easy and fast way, like in the 2.2 version.

In the same way, we’ve created some functions that will make easy the creation of objects, for example layers, or the accessing to the loaded ones.

The geometry (geom) and window manager (commonsdialog) libraries have increased their capacity and ease of use in a considerable way.

Besides, we’ve developed some extra libraries made in Jython, like formpanel, that will help us to generate scripts with graphical interface, or classes that will help us to implement scripts as geoprocesses at the Toolbox.

What are the main advantages?

It will make the communication easy between our scripts and the gvSIG API. At this way, we want to encourage new developers making easy all the typical processing data operations, as well as to the advanced developers, ensuring the compatibility between different extensions developed on Jython, Java and gvSIG.

 

As there have been a lot of changes at the libraries and tools, we encourage you to inform us about the errors that you detect in the scripting libraries at the Users and Developers mailing lists.

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

Camino a gvSIG 2.3: Insertar nuevos geoprocesos mediante Scripting

post_geo_minComentábamos el otro día la facilidad de generar geoprocesos con la nueva implementación de librerías de Scripting, los cambios respecto a la versión anterior y mostrábamos un ejemplo de geoproceso.

Ahora vamos a ver cómo podemos integrar nuestro geoproceso en la Caja de Herramientas que tiene gvSIG. Esto nos permitirá acceder a ellos de manera sencilla, además de hacer que formen parte de otras herramientas como el Modelizador o su ejecución mediante gvpy.

El ejemplo, que nos podría servir de plantilla para vuestors scripts sería el siguiente:

from gvsig import *
from gvsig import geom
from gvsig.commonsdialog import *

from gvsig.libs.toolbox import *
from es.unex.sextante.gui import core
from es.unex.sextante.gui.core import NameAndIcon

from es.unex.sextante.gui.core import SextanteGUI
from org.gvsig.geoprocess.lib.api import GeoProcessLocator

class GridPol(ToolboxProcess):

  def defineCharacteristics(self):
        """Definir los parametros de entrada y salida de nuestro proceso. """
        # Fijamos el nombre con el que se va a mostrar nuestro proceso
        self.setName("Grid uniforme dentro de poligonos")

        # Indicamos el grupo en el que aparecera
        self.setGroup("Vectorial")

        params = self.getParameters()
        
        # Indicamos que precisamos un parametro LAYER, del tipo poligono y que es obligatorio
        params.addInputVectorLayer("LAYER","Capa de entrada", SHAPE_TYPE_POLYGON, True)
        
        # Indicamos que precisamos una distancia para el grid
        params.addNumericalValue("DISTANCEGRID", "Distancia Grid",0, NUMERICAL_VALUE_INTEGER)
        
        # Y por ultimo indicamos que precisaremos una capa de salida de puntos.
        self.addOutputVectorLayer("RESULT_POINT", "GirdPol_point", SHAPE_TYPE_POINT)

  def processAlgorithm(self):
        """ Esta operacion es la encargada de realizar nuetro proceso. """
        features=None

        try:

            """
            Recogemos los parametros y creamos el conjunto de entidades asociadas a la capa
            de entrada.

            Se obtendran dos capas en la vista con el mismo tipo de datos.
            ** Una capa es la generada por nosotros desde el script
            ** La otra capa es la gestionada a traves de la Toolbox creada en output_store
            
            """
            params = self.getParameters()
            sextantelayer = params.getParameterValueAsVectorLayer("LAYER")
            distancegrid = int(params.getParameterValueAsDouble("DISTANCEGRID"))
    
            # La capa obtenida es de un tipo especial
            # para facilitar gestionamos su store
            store = sextantelayer.getFeatureStore()
            features = store.features()

            ### Capa 1: Gestionada por el script
            sch = createSchema()
            sch.append("GEOMETRY", "GEOMETRY")
            sch.get("GEOMETRY").setGeometryType(geom.POINT, geom.D2)
            shp = createShape(sch)
            

    
            ### Capa 2: Aprovechando las opciones de la Toolbox
            output_store = self.buildOutPutStore(
                    features.getDefaultFeatureType(),
                    SHAPE_TYPE_POINT,
                    "GridP_points",
                    "RESULT_POINT"
              )
              
            # Progress bar
            self.setRangeOfValues(0, features.getSize())
            n = 0
            
            for feature in features:
                # Incrementamos barra progreso
                self.next() 

                # Proceso
                extent = feature.getDefaultEnvelope()
        
                xmin = extent.getMinimum(geom.DIMENSIONS.X)
                xmax = extent.getMaximum(geom.DIMENSIONS.X)
                
                ymin = extent.getMinimum(geom.DIMENSIONS.Y)
                ymax = extent.getMaximum(geom.DIMENSIONS.Y)
        
                rows = int(ymax-ymin) / distancegrid
                cols = int(xmax-xmin) / distancegrid
                
                x = xmin
                y = ymax
                
        
                for i in range(rows+1):
                    if self.isCanceled():
                        break
                    for j in range(cols+1):
                        pt = geom.createPoint2D(x, y)
                        if feature.geometry().contains(pt):
                            # Puntos contenidos en el poligonos
                            # son agregados a la capa

                            ### Capa 1
                            shp.append(GEOMETRY=pt)
    
                            ### Capa 2
                            newfeature = self.createNewFeature(output_store, feature)
                            newfeature["GEOMETRY"] = pt
                            output_store.insert(newfeature)
    
                            
                        x += distancegrid
                    x = xmin
                    y -= distancegrid

            # Capa 1: Agregamos a la Vista activa
            shp.commit()
            currentView().addLayer(shp)
            
            # Capa 2 se encargara la toolbox de gestionarla
            return True
        
        finally:
            DisposeUtils.disposeQuietly(features)
            print "Proceso terminado %s" % self.getCommandLineName()
            return True


def main(*args):
        # Creamos nuesto geoproceso
        process = GridPol()
        # Lo registramos entre los procesos disponibles en el grupo de "Scripting"
        process.selfregister("Scripting")
        
        # Actualizamos el interface de usuario de la Toolbox
        process.updateToolbox()

        msgbox("Incorporado el script '%s/%s/%s' a la paleta de geoprocesos." % (
                "Scripting",
                process.getGroup(),
                process.getName()
          ), 
          "Proceso registrado"
        )

En la primera parte, defineCharacteristics, incluiríamos el aspecto de la interfaz, podríamos añadir los controles necesarios para capturar los parámetros que nuestro script necesite.

En la segunda parte, processAlgorithm, incluiríamos lo que es nuestro script. Para que la Caja de Herramientas gestione nuestras capas de salida a través del módulo de geoprocesamiento y que se integre mejor con el Modelizador o funcione correctamente cuando sea lanzado desde gvpy, tendrá que cumplir ciertos requisitos y ciertas formas a la hora de generar las capas. En este caso he incluido las dos formas de hacerlo en el mismo geoproceso. Si no nos interesan estas opciones extra, el script será el mismo que ya teníamos creado.

Una vez ejecutado nos aparecerá el siguiente mensaje, confirmando que se ha ejecutado correctamente y que es accesible desde la Caja de Herramientas:

post_geo_insertado

Ahora podemos ir a ejecutarlo

 

post_geo_caja

Si lo ejecutamos accederemos a la interfaz del geoproceso que hemos creado en la parte de defineCharacteristics de nuestra clase:

post_geo_interfaz

Nos aparecerá la ventana de proceso que hemos programado:

post_geo_status

Y obtendremos el resultado esperado:

post_geo_resultado

Vemos que la salida de capas es multiple. Una capa es la gestionada por la Toolbox, la otra es la gestionada por nosotros directamente en el script.

Esta forma de insertar geoprocesos nos añadirá la opción de poder ejecutarlos mediante gvpy en un script similar al siguiente:

# encoding: utf-8

from gvsig import *
from gvsig.libs import gvpy

def main(*args):

        x = gvpy.runalg("GridPol", "pols_example", "10",ADDLAYER=True, NAME="Grid dentro poligono")

O que forme parte de un proceso en el Modelizador:

post_geo_modelizador

Guardamos el modelo y nos aparecerá en la Caja de Herramientas listo para ser usado:

post_geo_modelo

En este caso cogemos la capa poligonal, le aplicamos el proceso explicado anterior y añadimos un desplazamiento de sus puntos, dando como resultado algo similar a:

post_geo_model_resultado

Como veis, no será complicado crear nuestras propias Cajas de Herramientas, totalmente integradas en gvSIG.

Si estáis interesados en el tema o queréis aportar información o recomendaciones, no dudéis en poneros en contacto con nosotros en las Listas de Usuarios o Desarrolladores. Si hay interés seguiremos intentando generar toda la documentación posible para facilitaros las cosas a la hora de generar vuestros geoprocesos.

Posted in development, gvSIG Desktop, gvSIG development, scripting, spanish | 4 Comments

Ampliado el plazo de recepción de comunicaciones para 8as Jornadas LAC gvSIG

Se ha ampliado el plazo de recepción de comunicaciones para 8as Jornadas gvSIG de Latinoamérica y Caribe. La fecha límite para enviar vuestras propuestas es el 9 de septiembre.

8as_J_LAC_gvSIG-cabecera

En las próximas semanas iremos publicando información sobre los talleres que tendrán lugar en estas jornadas en el blog de gvSIG.

Os animamos a participar no solo como asistentes, sino como ponentes, presentando vuestros trabajos realizados sobre gvSIG. Toda la información sobre el envío de comunicaciones podéis encontrarla aquí.

Por último os recordamos que también está abierta la inscripción como asistente. No esperéis al último momento, ya que las plazas son limitadas.

¡Os esperamos!

Posted in community, events, spanish | Tagged | Leave a comment

Camino a gvSIG 2.3: Distribución portable para Mac OS X

MAC_gvSIG_001

Una de las novedades del próximo gvSIG Desktop 2.3 es que vendrá con distribución para el sistema operativo Mac OS X. Una novedad muy esperada…al menos eso creemos, ya que casi todas las semanas alguien escribía a la Asociación gvSIG preguntando por un gvSIG Desktop para Mac.

Estará disponible en versión portable, con lo que para utilizarlo bastará con descomprimir el fichero .zip y ya pasar a ejecutar la app.

Al ser la primera distribución oficial para Mac vamos a necesitar ayuda extra para detectar errores que no tengamos contemplados, principalmente en cuanto a interfaz y así poder ir mejorando la distribución. Por eso os pedimos a todos los maqueros y aficionados a la marca de la manzana que nos ayudéis en el testeo.

En los últimos builds candidatos a final que hemos sacado ya se puede testear. Por ejemplo, en el denominado RC4, que podéis descargar de:

http://downloads.gvsig.org/download/gvsig-desktop-testing/dists/2.3.0/builds/2444/gvSIG-desktop-2.3.0-2444-RC4-darwin_macos_10.11-x86_64.app.zip

Una vez descargado, como comentaba, podéis descomprimir el zip y obtendréis un archivo ejecutable.

MAC_gvsig_portable

Ya sólo queda comenzar a probar gvSIG…

MAC_gvSIG_05

Podéis utilizar la lista de usuarios para darnos feedback. Y un último consejo: no cambiéis el nombre de la app, o no se podrá ejecutar.

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

Camino a gvSIG 2.3: Ejemplo de script con la nueva implementación

geo_gridpol2Ayer hablamos de los cambios en las librerías de Scripting, pero nada mejor para ver algunos de ellos que enseñarlos en un ejemplo.

Da la casualidad que nuestro compañero José Guerrero publicó un script para la generación de una malla de puntos uniforme dentro de cada polígono en una capa designada. Cogiendo su script y aplicando algunos cambios, lo transformé para que pueda ser usado en gvSIG.

Vemos que hacemos uso de la nueva implementación que ya explicamos en otro post, algunas funciones han ampliado su funcionalidad, y en general, funciona como lo hacía anteriormente, aunque por debajo todo sea distinto.

Para ejecutar este script solo es necesario tener una Vista abierta con una proyección por ejemplo EPSG:25830 y con una capa de polígonos seleccionada en esa Vista.

Si quieres cargar el script y probarlo por tu cuenta, debes irte a Herramientas – Scripting – Editor de Scripts. Seleccionamos Nuevo arriba a la izquierda, escribimos un nombre para nuestro script y aceptamos. Ya nos saldrá la pantalla en blanco donde copiar y pegar nuestro script. Para ejecutarlo podemos presionar F5.

# encoding: utf-8

from gvsig import currentLayer, currentView, createSchema, createShape
from gvsig import geom

# Basado en: https://joseguerreroa.wordpress.com/2016/08/31/creando-puntos-espaciados
# -regularmente-dentro-de-los-rasgos-features-de-un-vectorial-tipo-poligono-con-pyqgis/

def main(*args):
    """ Crear grid dentro de polionos con una distancia establecida """
    #Distancia entre puntos
    distancegrid = 5

    # Crear nueva capa
    sch = createSchema()
    sch.append("GEOMETRY", "GEOMETRY")
    sch.get("GEOMETRY").setGeometryType(geom.POINT, geom.D2)
    shp = createShape(sch)
    
    layer = currentLayer()
    features = layer.features()
    
    for feature in features:
        extent = feature.getDefaultEnvelope()

        xmin = extent.getMinimum(geom.DIMENSIONS.X)
        xmax = extent.getMaximum(geom.DIMENSIONS.X)
        
        ymin = extent.getMinimum(geom.DIMENSIONS.Y)
        ymax = extent.getMaximum(geom.DIMENSIONS.Y)

        rows = int(ymax-ymin)/distancegrid
        cols = int(xmax-xmin)/distancegrid
        
        x = xmin
        y = ymax

        for i in range(rows+1):
            for j in range(cols+1):
                pt = geom.createPoint2D(x, y)
                if feature.geometry().contains(pt):
                    # Puntos contenidos en el poligonos
                    # son agregados a la capa
                    shp.append(GEOMETRY=pt)
                x += distancegrid
            x = xmin
            y -= distancegrid
            
    shp.commit() # Guardamos
    currentView().addLayer(shp) # Agregamos a la Vista

Como vemos, queda un script bastante sencillo de leer, sin tener que preocuparnos de rutas o similar. Las proyecciones las coge de la Vista.
geo_gridpol1

Podríamos añadir muchas otras mejoras como la de crear una vista nueva cada vez que se ejecute el script para mostrar resultados currentProject().createView(“nueva vista”), preguntar por una capa que no estuviera cargada, etc. Iremos sacando más ejemplos en los que mostrar las nuevas funcionalidades.

En el próximo artículo veremos cómo convertir este script en un geoproceso que aparezca en nuestra Caja de Herramientas, de esta forma lo podríamos tener siempre accesible junto al resto de geoprocesos, dotarle de interfaz, incluirlo en el Model Builder y permitiendo otras funcionalidades como su ejecución desde gvpy.

Interesante crear tu propia caja de herramientas ¿verdad?

Posted in development, gvSIG Desktop, gvSIG development, scripting, spanish | 5 Comments

Camino a gvSIG 2.3: Compatibilidad y cambios en scripts

En el post anterior sobre la nueva integración de las librerías de scripting con la API de gvSIG, comentamos que habíamos realizados cambios importantes en su enfoque a nivel interno pero que, el uso de estas librerías, se mantuviera en lo posible a lo anteriormente desarrollado.

Hemos tenido en cuenta que mucha gente tiene scripts antiguos realizados para la versión 2.2, así que esta nueva implementación es muy parecida a la antigua con algunas excepciones que comentaré más abajo.

¿Qué pasa si tengo un script desarrollado para la versión 2.2?

Una posible solución es activar la compatibilidad de scripts con la 2.2. Esto se puede hacer desde el Scripting Composer, abriendo nuestro script y navegando en la pestaña de Propiedades. Aquí podemos activar la casilla de Compatibilidad con la 2.2. De esta forma cuando gvSIG ejecute este script, utilizará las librerías antiguas de la versión 2.2 de gvSIG.

img22prop

¿Cuáles son los cambios para actualizar mi código?

La siguiente opción sería realizar las modificaciones necesarios para adaptarlo a la versión 2.3. Los cambios no son grandes, así que animo a que optéis por esta opción en vuestros scripts.

Los cambios son menores y voy a ir explicando los más significativos para que podáis localizarlos y modificarlos.

También será útil si venís de programar en la 2.2, veréis la nueva forma de hacer las cosas. Como ya he dicho, no os preocupéis, los cambios son pequeños.

Imports
* 2.2: En la anterior versión existían varias librerías como gvsig, geom, commonsdialog… a las cuales se les hacia referencia directamente con un import:

import gvsig
import geom 
import commonsdialog

* 2.3: En la nueva versión hemos querido desarrollar todo dentro de una librería única que fuera gvsig. Estos módulos siguen existiendo solo que su acceso de ha modificado, siendo:

import gvsig
import gvsig.geom
import gvsig.commonsdialog

Podemos importarlo de diferente forma para que se adapte mejor al script que ya tengamos hecho, dependiendo a cómo lo teníamos hecho, siendo las diferentes opciones por ejemplo:

import gvsig.geom
ó
from gvsig import geom
ó
from gvsig.geom import *

Creación de capas: Tipo de geometrías
* 2.2: A la hora de crear capas, siempre tenemos que crear primero el esquema (FeatureType) de nuestra capa. En la anterior versión establecíamos qué tipo de geometría iba a utilizar la capa a la hora de generar la misma, por ejemplo, en el createShape().

* 2.3: En la nueva versión hemos simplificado este sistema. El tipo de geometría se establece solo en el esquema.

from gvsig import *
from gvsig.geom import *

def main(*args):

    fty = createFeatureType() #es lo mismo que createSchema()
    fty.append("GEOMETRY", "GEOMETRY")
    fty.get("GEOMETRY").setGeometryType(POINT, D2)
    shp = createShape(fty)

Las constantes POINT y D2 vienen de la librería geom.

Si los import fueran diferentes:

import gvsig
from gvsig import geom

def main(*args):

    fty = gvsig.createFeatureType()
    fty.append("GEOMETRY", "GEOMETRY")
    fty.get("GEOMETRY").setGeometryType(geom.POINT, geom.D2)
    shp = gvsig.createShape(fty)

Edición de entidades
* 2.2: En la versión anterior podíamos poder en edición una entidad directamente y modificarla. Por limitaciones en la nueva implementación esto no es posible ahora. Seguimos una aproximación más cercana a Java.
* 2.3: La forma de realizar una modificación en una capa y en sus entidades sería a través de una entidad editable que obtenemos de la entidad principal, y que luego actualizamos sobre el featureSet y no sobre la capa, como en la anterior versión:

from gvsig import *
from gvsig import geom

def main(*args):

    layer = currentLayer()
    features = layer.features()

    layer.edit() #Ponemos la capa en edición

    for i in features:
       c = i.getEditable() #Obtenemos una entidad editable
       c.set("NAME", "Modified_4") #Modifacmos la entidad
       #Actualizamos entidad sobre el featureSet
       features.update(c) 

    layer.commit() #Guardamos la capa

Crear una geometría de tipo punto
* 2.2: En la anterior versión utilizábamos para crear un punto la función createPoint(x, y)
* 2.3: Dadas las mejores en la librería de geometrías que hemos realizado, hemos modificado este método. Tenemos varias formas de llamarlo. Ambas se encuentran dentro del módulo gvsig.geom:

Una función que hemos incluido para imitar el comportamiento de la antigua:

p1 = geom.createPoint2D(x, y)

O la nueva que permite mayor versatilidad a la hora de generar puntos, teniendo que pasar como parámetro la dimensión de este punto:

p2 = geom.createPoint(geom.D2, x, y)

o una opción más genérica, en la cual primero crearíamos la geometría de punto vacía, y luego tendríamos que establecer sus coordenadas:

p3 = geom.createGeometry(geom.POINT)
p3.setX(x)
p3.setY(y)

Ambos obtienen como resultado un geometría de tipo punto de dimensiones 2D.

Valores devueltos por las funciones de commonsdialog
* 2.2: En la anterior versión, los objetos devueltos por la librería commonsdialog referentes a la obtención de rutas, se hacían excesivamente complicados, devolviendo arrays de java.io.File o similar.
* 2.3: En la nueva versión, hemos simplificado este retorno de valores. Si la multiseleción está establecida en False, devolverá un único String correspondiente a la ruta. Si la función no tiene parámetro multiselection o lo tiene establecido como True, devolverá una lista de String con las rutas correspondientes.

option = "OPEN_FILE"
fc = commonsdialog.filechooser(option, 
                                title="", 
                                initialPath=None, 
                                multiselection=False, 
                                filter = None, 
                                fileHidingEnabled=True, 
                                root=None)
print "filechooser:", fc
fc = commonsdialog.filechooser(option, 
                                title="", 
                                initialPath=None, 
                                multiselection=True, 
                                filter = None, 
                                fileHidingEnabled=True, 
                                root=None)
print "filechooser:", fc

Salida por consola:

filechooser: C:\Users\Oscar\values.txt
filechooser: [u'C:\\Users\\Oscar\\input1.csv', u'C:\\Users\\Oscar\\input2.txt']

Si seguimos encontrando diferencias de compatibilidad las iremos añadiendo al post.

Dado que hay muchos cambios en las librerías y en funcionalidades, os animamos a que nos informéis de errores que detectéis en estas nuevas herramientas para Scripting en las Listas de Usuarios o Desarrolladores.

Posted in development, gvSIG Desktop, scripting, spanish | 7 Comments