[QGIS-es] Problema al cargar vista de postgis2.x

Francisco Salas Rosette fsalas en pinar.geocuba.cu
Mar Nov 18 06:46:43 PST 2014


Hola a todos,

estamos trabajando en un plugin para QGis en python.

El objetivo es cargar capas de postgis 2.x  a partir de varios criterios de
selección, el problema se nos presenta cuando vamos a cargar una vista
creada por nosotros , les muestro un ejemplo de creación :

 

CREATE OR REPLACE VIEW vcaminos AS 

 SELECT e.codcamino, e.codprovinc, e.codmunicip, e.desde, e.hasta,
e.longitud, 

    e.nombrecomu, e.poseedor, e.ancho, e.tienecunet, e.estadocune,
e.no_carril, 

    e.nombre, e.estadocami, e.gid, 

 
st_intersection(st_setsrid(st_envelope('0104000000020000000101000000F8C2642A
A5650841DBF97EEA60DC12410101000000B22E6EA33C320C411D3867445C061141'::geometr
y), 2085), st_setsrid(e.the_geom, 2085))::geometry(LineString,2085) AS
the_geom

   FROM caminos e

  WHERE NOT
st_isempty(st_intersection(st_setsrid(st_envelope('0104000000020000000101000
000F8C2642AA5650841DBF97EEA60DC12410101000000B22E6EA33C320C411D3867445C06114
1'::geometry), 2085), st_setsrid(e.the_geom, 2085)));

 

ALTER TABLE vcaminos

  OWNER TO postgres;

 

 

El problema está cuando tratamos de cargar la vista al mapa usando nuestro
código , nos dice “ La capa PostgreSQL no tiene clave primaria.”. , sin
embargo si la adicionamos por la herramienta de QGis , vemos que esta llave
está definida y es gid , y si se adiciona  bien al mapa.

 

Mi pregunta es , ¿ el problema está en la definición de la vista ?, alguien
puede orientarme al respecto

 

 

Fragmento del código que adiciona la vista al mapa :

 

 

self.Datos =
self.conexion.limitar_vista(esquema,tabla,xSupIzq,ySupIzq,xInfDer,yInfDer)

if self.Datos:

                print self.Datos[0]

                uri = QgsDataSourceURI()

                uri.setConnection(self.server, str(self.port), self.bd,
self.user, self.password)

                #aDatos = [str(esquema), str(nombre_vista), geometry_col,
tipo_tabla]

                uri.setDataSource(self.Datos[0][0], self.Datos[0][1],
self.Datos[0][2])

                name_capa = self.Datos[0][1].capitalize()

                layer = QgsVectorLayer(uri.uri(), name_capa, "postgres")

                if layer.isValid():

                               QgsMapLayerRegistry.instance().addMapLayer(

                                               layer);

                               self.clickTool.cargoOK()

else:

                self.clickTool.noData()

 

 

Saludos

Francisco Salas

 


----------------------------------------------------------------------------------------------------
¿Dónde estoy? ¿Qué hay a mí alrededor? ¿A dónde quiero ir? ¿Dónde está lo que busco? ¿Cómo llegar? ¿Cómo anunciar mi negocio?


Si quiere solucionar todo esto visite y descargue la nueva aplicación móvil disponible en http://andariego.geocuba.cu

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.osgeo.org/pipermail/qgis-es/attachments/20141118/01d39d2c/attachment-0002.html>


Más información sobre la lista de distribución QGIS-es