You are here:GeoTux»Geo-Forums»Agregar polígonos desde BaseDeDatos en QGIS

Statistics

Invitados: 72
Usuarios registrados: 3232
Usuarios en línea:
-
Registrados hoy:
-

Register

RSS

Blogs and News:
Recibe las actualizaciones en Geo-Noticias y Geo-Blogs

Get them by e-mail
Recibir Geo-Noticias y Geo-Blogs por e-mail

¿What is this about?

Welcome, Guest
Username Password: Remember me

Agregar polígonos desde BaseDeDatos en QGIS
(1 viewing) (1) Guest
  • Page:
  • 1

TOPIC: Agregar polígonos desde BaseDeDatos en QGIS

Agregar polígonos desde BaseDeDatos en QGIS 30 Jan 2011 00:33 #531

  • efeferrari
  • OFFLINE
  • Visitante casual
  • Posts: 7
  • Karma: 0
Hola.

Me duda radica en lo siguiente.

Sé que con QGIS puedo importar polígonos desde la base de datos con su respectiva herramienta (Menú "Layer" > "Add Vector Layer..." y cliqueando el radio button "Database" ), la cual busca los datos en una tabla de la Base de Datos, crea un tema de polígonos con TODOS los polígonos que encuentre ahí.
Lo que quiero es extraer unicamente algunos registros específicos mediante un ID alfanumérico.

Me encuentro desarrollando un plugin para QGIS que resuelva esto, el cual hace una búsqueda por nombres de clientes, pero quiero que se seleccione un cliente y se carge únicamente su información espacial, pero no la tabla entera.

La siguiente imagen muestra mi formulario de búsqueda funcionando

Con eso, quiero que al presionar el botón "Cargar selección..." se cree en la vista de QGIS el o los polígonos correspondientes a ese cliente seleccionado.

Revisé la API de QGIS, pero no encontré lo que buscaba (y si lo encontré, no lo vi). También me bajé el código fuente de Quantum, pero mi búsqueda también fué infructuosa.

En resumen, me gustaría que me ayuden a encontrar el método que resuelva lo que necesito.
No sé que otra información pueda agregar, salvo que también pedí ayuda en el foro oficial, pero no me han respondido nada =/
Si quieren, puedo subir mi código del plugin, así como un backup de mi base de datos para que hagan pruebas.
Estoy trabajando con Python y MySQL.

Saludos.

Re: Agregar polígonos desde BaseDeDatos en QGIS 30 Jan 2011 16:45 #532

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
Hola efeferrari,

según entiendo, lo que necesitas es definir una cadena SQL sobre el objeto vector que construyas, algo así:

---------

vLayer.setSubsetString( "id = 5" )

---------

Ese subconjunto de features lo puedes definir antes o después de cargar la capa.
La documentación en este enlace.

Pdta: Cuando publicas preguntas en el foro no es necesario que las referencies en el blog, puesto que revisamos cada sección.

Espero te sirva.

Saludos,

Tuxman
Last Edit: 30 Jan 2011 16:47 by tuxman.

Re: Agregar polígonos desde BaseDeDatos en QGIS 31 Jan 2011 04:00 #534

  • efeferrari
  • OFFLINE
  • Visitante casual
  • Posts: 7
  • Karma: 0
Gracias por tu respuesta, aunque no la entendí mucho. Seré un poco más detallado con mi duda.

En la imagen siguiente está mi tabla de la base de datos MySQL.

[Clic para ver a tamaño completo]
El campo "uso" tiene polygon como tipo de datos y es en donde se guardan llos polígonos correspondientes a cada usuario.

Ahora, si yo utilizo la herramienta nativa de QGIS "Add vector Layer..." esta inserta ambos polígonos a la vista, así:


Entonces, lo que busco es seleccionar solo un polígono de la BD y cargarlo a la vista, para lo cual supongo habrá una función que me permita refinar la búsqueda.

Por lo visto, la función de QGIS es básicamente un SELECT * FROM 'tabla', por lo que me gustaría saber como se llama la función para modificarla y ajustarla a lo que necesito yo.
Last Edit: 31 Jan 2011 04:02 by efeferrari.

Re: Agregar polígonos desde BaseDeDatos en QGIS 31 Jan 2011 10:37 #535

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
efeferrari, si estás desarrollando un plugin para QGIS con Python, y lo que haces es cargar una capa vectorial, puedes definir una consulta a esa capa antes de cargarla al mapa, con esa consulta filtras los datos para que solo aparezcan los polígonos que cumplen la consulta.

No estoy seguro de la forma como cargas tus polígonos mediante código puesto que no he trabajado con MySQL y QGIS, pero deberías estar usando un objeto vector según dice la documentación,

Si es así, sobre ese objeto vector defines la consulta, que no tiene que ser un sql completo, sino solamente la parte del WHERE, como en el ejemplo que te puse:

---------
vLayer.setSubsetString( "id = 5" )
---------

Al hacer esto, solamente el polígono con id = 5 aparecerá en el mapa.

Saludos,

Tuxman.

Re: Agregar polígonos desde BaseDeDatos en QGIS 23 Feb 2011 04:07 #542

  • efeferrari
  • OFFLINE
  • Visitante casual
  • Posts: 7
  • Karma: 0
Hola,

Leyendo el link de las vLayers que me pasaste y un código que encontré con google en el foro oficial de QGIS, tengo el siguiente código:


uri = QgsDataSourceURI()
# set host name, port, database name, username and password
uri.setConnection("localhost", "3306", "final", "root", "123456" )
# set database schema, table name, geometry column and optionaly subset (WHERE clause)
uri.setDataSource("public", "potrero", "coordenada", "id_potrero = 1" )

vlayer = QgsVectorLayer(uri.uri(), "nombre_de_capa", "mysql" )
if not vlayer.isValid():
print "Fallo al cargar la capa!"


El uri.setDataSource lo probé con/sin "public" y también con/sin el "id_potrero" del final (que es optativo, de cualquier manera). Además, cuando declaro la variable "vlayer" con el método QgsVectorLayer, lo hice con el parámetro "mysql" y con "ogr".
A pesar de todos los cambios y pruebas que hice, vlayer.isValid() siempre decía que fallaba al cargar la capa.

Ya sé que no has trabajado con MySQL, pero tienes algún idea de cual sea mi problema?
Busqué por MySQL en la documentación, pero no apareció nada :'(

P.D.: La indentación del if y el print las tengo correctas, solo que el foro no me permitió dejar el espacio al inicio (y el tag code dejaba todo ese párrafo en una linea)
P.D. Off-topic: Me tomé unas vacaciones, por eso no respondí antes :B
Last Edit: 23 Feb 2011 17:28 by efeferrari.

Re: Agregar polígonos desde BaseDeDatos en QGIS 23 Feb 2011 16:42 #545

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
efeferrari, no tengo cómo probar el cargue. ¿Puedes enviar un backup de tu base de datos?

Saludos

Re: Agregar polígonos desde BaseDeDatos en QGIS 23 Feb 2011 17:26 #546

  • efeferrari
  • OFFLINE
  • Visitante casual
  • Posts: 7
  • Karma: 0
Hola, gracias por tu ayuda.

en este link www.mediafire.com/?3666d8k0t6y6l3k te dejo un backup de la base de datos.
El polígono se almacena en la tabla 'potrero' en el campo 'coordenada'.

Re: Agregar polígonos desde BaseDeDatos en QGIS 23 Feb 2011 20:56 #547

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
Uff, bueno, aunque no se si es la manera más 'pulcra' de hacerlo, parece que ya funciona.

-----------------
uri = "MySQL:final,host=localhost,port=3306,user=root,password=root|layername=potrero"
vLayer = QgsVectorLayer( uri,'potrero','ogr' )
if vLayer.isValid():
QgsMapLayerRegistry.instance().addMapLayer( vLayer )
-----------------

Sin embargo, no todo es color de rosa, al parecer las capas de MySQL no permiten definir el filtrado, bien sea desde Python o desde la interfaz de QGIS (definiendo un Query).

Saludos,

Tuxman

Re: Agregar polígonos desde BaseDeDatos en QGIS 23 Feb 2011 21:18 #548

  • efeferrari
  • OFFLINE
  • Visitante casual
  • Posts: 7
  • Karma: 0
Hola,

pues así estaba viendo. Aparentemente el soporte a MySQL aún no es lo suficientemente completo.
Te agradezco por ayudarme con esto, que me estaba quebrando la ceabeza desde hace mucho tiempo jaja.

Re: Agregar polígonos desde BaseDeDatos en QGIS 23 Feb 2011 21:40 #549

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
Si, ya me la estaba quebrando yo también, tuve que escarbar en el código fuente para conocer cómo cargan las capas de MySQL.

Está un poco raro, porque la documentación del driver de MySQL para OGR menciona que es posible definir consultas (filtros) SQL.

Yo te aconsejo escribir a la lista de correos de desarrolladores de QGIS. Tal vez no lo hayan incluido porque nadie lo ha pedido. A veces pasa.

Saludos,

Tuxman

Re: Agregar polígonos desde BaseDeDatos en QGIS 23 Feb 2011 22:02 #550

  • efeferrari
  • OFFLINE
  • Visitante casual
  • Posts: 7
  • Karma: 0
Según veo en la documentación del driver de MySQL, la solución estaría con el Ogr Sql.
  • Page:
  • 1
Time to create page: 0.66 seconds
 

On-line users

Latest Geo-Forums

No posts to display.

Latest Comments