[Gvsig_usuarios] scripting gvSIG 2.0, centrar vista en un polígono

Joaquin del Cerro jjdelcerro.gvsig en gmail.com
Lun Dic 2 14:35:50 CET 2013


El 01/12/13 20:52, Laia Linares Ortells escribió:
> Hola,
> 
> escribo porque tengo una duda en un script que estoy haciendo con el módulo
> de scripting en gvSIG 2.0. Mi idea es centrar la vista en un polígono,
> debería usar getEnvelope() para encontrar las coordenadas máximas y mínimas
> y centrar la vista en esas coordenadas. No se si se puede hacer lo que
> quiero o no, pero no encuentro en la guia de referencia algo que me de una
> pista de cómo hacerlo. Alguien tiene alguna sugerencia?
> 

Holas,
a ver si te sirve algo de esto...
He cargado una capa con las provincias de andalucia
(http://downloads.gvsig.org/download/geodata/vector/SHP2D/provincias_andalucia.zip)
y he dejado la capa y la vista activas.

El script lo que hace es pillar la geometria de la provincia de granada
y centrar la vista en ella.
Si ya tienes la geometria no te hace falta mas que la ultima linea,
que es la que centra la vista en una geometria.


from gvsig import *

def main():

    layer = currentLayer()
    view = currentView()

    print "view: ", dir(view)
    print "layer: ", dir(layer)
    print "features: ", dir(layer.features())
    print "first feature: ", dir(iter(layer.features()).next())
    print "Map: ", dir(view.getMap())
    print "View port: ", dir(view.getMap().getViewPort())

    # Busco la provincia de granada y pillo su geometria
    set = layer.features("PROVINCIA = 'GRANADA'")
    first = iter(set).next()

    print first.PROVINCIA, first.GEOMETRY
    geom = first.GEOMETRY

    # Esta es la linea que centra la vista en la geometria "geom".
    view.getMap().getViewPort().setEnvelope(geom.getEnvelope())


Las lineas de prints, son solo para ayudarme ha encontrar los metodos
de un objeto. La funcion "dir" nos muestra la lista de metodos o
atributos que tiene un objeto. Por ejemplo:

    print "view: ", dir(view)

Nos muestra los metodos que tiene la vista y asi sabemos que podemos
invovar al metodo "getMap" de ella.

Lo de centrar la vista en una geometria...
pues la vista tiene una cosa que llamamos "MapContext" que se
obtiene con "getMap()" y representa el mapa que se visualiza en
la vista. Este tiene un ViewPort que representa el area geografica
que se esta viendo en ese mapa, y lo que hacemos es pillar el
ViewPort y decirle que el area que se esta viendo es el envelope
de la geometria que define el area que queremos ver.

Tal vez lo importante sea quedarse a modo de receta que con:

    # Esta es la linea que centra la vista en la geometria "geom".
    view.getMap().getViewPort().setEnvelope(geom.getEnvelope())

Con lo que podemos cambiar el area que se esta viendo en la vista a la de
la geometria que indiquemos con "geom".

Tambien podriamos hacernos una funcioncita con esto y simplente
llamarla donde la necesitemos. Quitando los prints podria quedar
algo como:

from gvsig import *

def centrarVista(view, geom):
    view.getMap().getViewPort().setEnvelope(geom.getEnvelope())

def main():
    layer = currentLayer()
    view = currentView()

    # Buscamos la geometria de la provincia de granada
    set = layer.features("PROVINCIA = 'GRANADA'")
    first = iter(set).next()

    # Ahora centramos la vista en esa geometria
    centrarVista(view, first.GEOMETRY)


Bueno, espero que te sirva de algo.

Un saludo
Joaquin


> Gracias
> 
> 
> 
> 
> _______________________________________________
> gvSIG_usuarios mailing list
> gvSIG_usuarios en listserv.gva.es
> 
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección:
> 
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios


-- 
--------------------------------------
Joaquin Jose del Cerro
Development and software arquitecture manager.
jjdelcerro en gvsig.com
gvSIG Association
www.gvsig.com
www.gvsig.org


Más información sobre la lista de distribución gvSIG_usuarios