Camino a gvSIG 2.4: Mayor funcionalidad usando gvpy desde Scripting

Como muchos ya conoceréis, gvpy es una librería que facilita la ejecución de geoprocesos desde scripting. De esta forma, es posible ejecutar geoprocesos de nuestra toolbox (incluido algunos que añadamos nosotros desde otros scripts) con una línea de código.

Para la nueva versión de gvSIG 2.4, se ha realizado un pequeño cambio en esta librería para gestionar objetos que antes no era posible capturar desde scripting. Por ejemplo, algunos geoprocesos como el de Perfiles, “profile”, tenían como salida una gráfica (un objeto creado por la librería jfreechart). Con esta nueva funcionalidad, es posible capturar este objeto, y procesarlo como si fuera otro más.

Por ejemplo, tenemos la tarea de generar una gran cantidad de perfiles correspondientes a las secciones de una carretera, tal y como aparece en la imagen en rojo.

Queremos guardar las imágenes de todos esos perfiles en una carpeta. Para ello podemos usar el geoproceso “profile”. El geoproceso “profile” genera un único perfil correspondiente a una línea, siendo un script básico así para una única línea:

# encoding: utf-8

import gvsig
from gvsig.libs import gvpy
reload(gvpy)
from org.jfree.chart import ChartUtilities
    
def main(*args):

    #Remove this lines and add here your code
    route = gvsig.currentView().getLayer("perfil_huesca")
    dem = gvsig.currentView().getLayer("MDTHuesca")
    r = gvpy.runalg( "profile",route,dem,"",False,"")

    aJFreeChart = r[0].getChart()
    from java.io import FileOutputStream
    out = FileOutputStream("C:/temp/imagen1.png")

    ChartUtilities.writeChartAsPNG(out,
            aJFreeChart,
            500, #aChartPanel.getWidth(),
            200)#aChartPanel.getHeight());

Por tanto, lo que nosotros haremos es repetir este geoproceso cada vez con una línea diferente de sección (cambiando la línea seleccionada en la capa) y grabando la gráfica de salida en una carpeta.

El script quedaría algo así:

# encoding: utf-8

import gvsig
from gvsig.libs import gvpy

from org.jfree.chart import ChartUtilities
from java.io import FileOutputStream
import os

def main(*args):

    route = gvsig.currentView().getLayer("Secciones transversales")
    dem = gvsig.currentView().getLayer("MDTHuesca")

    features = route.features()
    selection = route.getSelection()
    idfeature = 0
    for i in features:
        idfeature+=1
        selection.select(i)
        r = gvpy.runalg( "profile",route,dem,"",False,"",ADDLAYER=False)
        aJFreeChart = r[0].getChart()

        filename = gvsig.getTempFile("imagen_"+str(idfeature),".png", "C:\\temp")
        #filename = os.path.join("C:\\temp", "imagen_"+str(n)+".png")
        
        out = FileOutputStream(filename)
        ChartUtilities.writeChartAsPNG(out,
                aJFreeChart,
                500, #aChartPanel.getWidth(),
                200)#aChartPanel.getHeight());
        out.close()
        selection.deselectAll()
    return

Si cambiáis ADDLAYER por True, por cada ejecución del geoproceso se añadirá la capa correspondiente al perfil creado.

De esta forma, tendríamos en nuestra carpeta de salida todas estas imágenes de los perfiles, cada una correspondiente a una ejecución del geoproceso “Perfiles” con una entidad diferente seleccionada:

Este script es solo un pequeño ejemplo que se podría mejorar. Si realizas alguna mejora no dudes en ponerte en contacto con nosotros y procederemos a su publicación en el blog para compartirla con todos.

Saludos y espero que os sea de utilidad.

This entry was posted in development, gvSIG Desktop, scripting, spanish and tagged . Bookmark the permalink.

2 Responses to Camino a gvSIG 2.4: Mayor funcionalidad usando gvpy desde Scripting

  1. Pingback: Camino a gvSIG 2.4: Mayor funcionalidad usando gvpy desde Scripting – GeoNe.ws

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s