En PostGIS 2.0, busco una forma eficiente de crear una vista espacialmente habilitada que se pueda ver en QGIS.
Seguí el contexto de la Parte 2 de la respuesta de @Mike Toews a ¿Cómo crear una tabla a partir de tablas existentes (aplicando nuevos esquemas) en postgis DB? , y la vista se muestra como una capa de puntos (en mi caso) en el cuadro de diálogo "Agregar capas PostGIS". Pero después de crear la vista y habilitarla espacialmente, recibí el siguiente error al intentar agregar la vista a QGIS:
Debe seleccionar una tabla para agregar una capa
¿Alguien puede explicar por qué la vista espacial no se cargará en QGIS y qué debo hacer para que pueda cargarse como una capa en QGIS?
Actualmente estoy usando QGIS v1.8 del instalador OSGEO
Veo que está construido a partir de la base de datos de geonames, cargado en PostGIS. La tabla de geoname / datos espaciales se pueden seleccionar / ver en QGIS muy bien.
Cuando intento seleccionar " mt_view ", QGIS ve la vista en el cuadro de diálogo, pero no me permite seleccionarla. Da un cuadro de puntos alrededor del área, pero no resalta ni selecciona la vista.
Acabo de notar que cuando ejecuto mi primera consulta:
CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'
la vista aparece en el cuadro de diálogo Agregar capa de QGIS, pero no se puede seleccionar. Entonces cuando corro:
SELECT Populate_Geometry_Columns('data.test'::regclass);
Obtengo el resultado de "0", donde según la documentación , creo que debería devolver "1".
fuente
Respuestas:
Puedo confirmar que no es posible simplemente seleccionar una vista de la lista.
Parece necesario seleccionar primero la "columna de clave principal". Entonces la tabla se vuelve seleccionable:
fuente
(Actualizando mi respuesta ligeramente)
Mientras el campo OBJECTID (row_number) esté primero en la definición de columna de la vista , QGIS lo recogerá sin pedirle que agregue desde el menú 'agregar capa de vector'.
Acabo de corregir algunas vistas antiguas que se rompieron según la pregunta original, pero mover el campo OBJECTID al comienzo de la vista solucionó el problema.
fuente
PRIMARY KEY
definición definida, QGIS la recoge rutinariamente: nunca deja de 'seleccionar' la PK en cualquiera de mis tablas que tienen un PK, aunque casi todas mis PK sonVARCHAR
. Eso no puede suceder con aVIEW
porque PostgreSQLVIEW
s no puede tenerCONSTRAINT
s. Estoy bastante seguro de que es por eso que es necesario seleccionarVIEW
manualmente las PK para s cuando se importa a QGIS a través del botón 'Agregar capas PostGIS', por lo que las importo usando un script de Python.¿Tu punto de vista aparece en la
geometry_columns
tabla? Según el manual, la vista debería aparecer automáticamente en 2.0, pero no lo he probado.Intente ejecutar lo siguiente para verificar:
fuente
¿Utiliza su vista un campo entero único como un "gid" o equivalente PK de una de las tablas en su vista?
Sé que en versiones anteriores de QGIS he tenido problemas con las vistas que se agregan al mapa cuando no había un campo entero único. Sin embargo, recibí un mensaje de error diferente que señala ese problema, pero puede valer la pena verificarlo para cubrir todas las bases.
fuente