El 15 de febrero de 2017, 18:38, Alex Irmel Oviedo Solis <
alleinerw...@gmail.com> escribió:

> Hola a todos, estoy viendo los ejemplos de scripting en python y no
> encuentro un ejemplo donde se cree una capa vectorial a partir de una
> consulta a una bd en postgresql.
>
> Otra pregunta que tengo es como haria para usar un resultset de jdbc para
> generar la capa con los poligonos, uno de los campos es geometry.
>
>
Hola Alex,
un par de cosas...

El API que veas que existe para trabajar con un shape es
el mismo que para trabajar contra una BBDD con la excepcion de los
parametros necesarios
para crear el store. Esto es cierto en general, y sobre todo en el API
java, salvo
que en la parte de scripting se han creado algunos metodos de utilidad que
trabajan
especificamente con shapes.

Te pego aqui un pequeño script que abre una fuente de datos de postgresql y
la carga en una capa de la vista corriente.

#--><----------><----------><---------
# encoding: utf-8

import gvsig
from org.gvsig.app import ApplicationLocator

def main(*args):
  application = ApplicationLocator.getManager()
  mapContextManager = application.getMapContextManager()

  store = gvsig.openStore(
    "PostgreSQL",
    dbname="mydb",
    host="localhost",
    schema="public",
    table="country",
    dbuser="postgres",
    password="postgres",
    CRS="EPSG:4326",
    PKFields="gid",
    defaultGeometryField="geom"
  )
  # Ojo con este bucle, es muy peligroso, ya que puede
  # dejar bloqueado gvSIG hasta que termine de sacar por la
  # consola todos los registros. La salida por la consola es
  # muy lenta.
  for feature in store:
    print feature

  layer = mapContextManager.createLayer("country", store)

  store.dispose()

  gvsig.currentView().addLayer(layer)

#--><----------><----------><---------

Este pequeño script creo que responde a la pregunta sobre como cargar
una capa vectorial a partir de una tabla de la BBDD.

Si precisas filtrar los datos de la capa puedes usar el metodo
"addBaseFilter"
de la capa.

La otra cosa...
sobre si se puede crear una capa a partir de un resultset de jdbc me temo
que no.
Es algo que todo el mundo que empieza ha hacer cosas con gvSIG intenta
hacer, y
es una muy muy muy mala idea.

gvSIG para gestionar una capa precisa mas que un resulset. Cada vez que se
hace un
pan o un zoom, se crea un resulset para recuperar los datos que se
precisan, y esto no
lo podriamos hacer si la fuente de datos de la capa fuese un resulset.
Ni siquiera es aceptable que una capa sea una sentencia select en lugar de
una
tabla. Es algo que inicialmente se puede hacer, pero luego las sentencias a
usar
contra la BBDD se complican mucho cuando se tienen que añadir filtros
espaciales sobre
esa select, y algunas cosas no funcionan del todo bien o los rendimientos
bajan
mucho. Mi consejo es que uses DataStores basados en tablas y luego el
metodo "addBaseFilter"
de la capa si precisas filtrar.

Si lo que necesitas es hacer selects que involucren varias tablas para
cargarlos como
capas, crea vistas en la BBDD y luego ataca a estas desde gvSIG como si
fuesen tablas.
Ya se, en general seran solo de lectura, pero para la mayoria de los casos
suele ser
suficiente.

Otro consejo mas...
si quieres hacer cosas avanzadas desde scripting en gvSIG, usa el API de
java
directamente siempre que sea posible. Ya se que esta menos documetado, pero
tira
de los javadocs. En la documentacion de scripting

http://downloads.gvsig.org/download/web/html/es/scripting_devel_guide/2.3/index.html

Tienes los apartados:
2. Modelo de objetos simplificado
3. Modelo de clases simplificado

Donde tienes algunos diagramas de clases simplificados con enlaces a los
javadocs
que te pueden ser muy utiles.

Tambien te recomiendo, a pesar de estar algo desactualizada, la
documentacion sobre DAL:

http://docs.gvsig.org/plone/projects/gvsig-desktop/docs/devel/org.gvsig.fmap.dal/2.0.0

Un saludo
Joaquin



> Espero su pronta respuesta, saludos cordiales.
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores@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:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelce...@gvsig.com
jjdelce...@gvsig.org
gvSIG Association
www.gvsig.com
www.gvsig.org
_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores@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: 
https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores

Responder a