¿Hacer una vista espacial en PostGIS y agregarla como capa en QGIS?

49

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.

QGIS no puede seleccionar mt_view como capa


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".

RyanDalton
fuente
1
Confirmo el problema. Con QGIS 1.8, PostGIS 2.0 y una vista creada a partir de una tabla con una clave primaria, la vista aparece en las capas disponibles pero aparece el mensaje de error "Debe seleccionar una tabla para agregar una capa".
giohappy
2
¿Hay otra forma de establecer automáticamente la clave primaria en la ventana Agregar capa de Postgis cuando trabajamos con vistas? Es muy difícil seleccionar un campo de clave principal en esta pantalla para cualquier capa / vista si imagina que un usuario SIG normal y una vista tienen muchos campos enteros.
@Pgimenez, sugeriría comenzar una nueva pregunta con lo que mencionó anteriormente, y luego hacer referencia a la url de esta pregunta en la suya. Eso le dará una visibilidad mucho más amplia.
RyanDalton
No hay forma de visualizar un casco convexo en qgis 1.8 lisboa? Intenté seguir a los vievs en Postgis 1.5. Me dijeron que usara una columna de identificación para publicarlo en Qgis. Si no utiliza una columna de identificación, no puede cargarla de todos modos debido a un error. 1. cree o reemplace la vista con_hull_baeume3 (oferta) como seleccione '0', ST_ConvexHull (ST_Collect (geom)) FROM baeume; 2. cree o reemplace la vista con_hull_baeume4 (oferta) como oferta seleccionada, ST_ConvexHull (ST_Collect (geom)) DESDE el grupo baeume por oferta; pero este hace un casco convexo en cada uno de los puntos geométricos. Me refiero a solo usar 'select ST_ConvexHull (ST_Collect (geom)) FROM baeume;' funciona
ulan
1
¡Bienvenidos! Publique esto como una nueva pregunta, ya que no parece responder a la original. Al menos si es una pregunta, ya que la última declaración no está clara si tuvo éxito o no.
lynxlynxlynx

Respuestas:

54

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:

ingrese la descripción de la imagen aquí

bajo oscuro
fuente
1
Wow, nunca hubiera visto eso. ¡Muchas gracias! Edité el título para reflejar que el problema era con QGIS, no con la vista PostGIS.
RyanDalton
Parece que este es un problema para QGIS 1.8 (que aún no he usado). Estos pasos no son necesarios para 1.7.
Mike T
Así es, 1.7 trató de adivinar la clave principal. Pero no funcionó bien.
oscuro
en una nota al margen, @underdark, ¿QGIS acepta otros tipos de PK?
George Silva el
1
En QGIS3, la columna se encabeza "ID de característica", no "columna de clave principal" y (al menos para mí) está fuera del borde de la ventana predeterminada (es decir, no visible) y no hay indicación de que hubiera más columnas. Creo que registraré una solicitud de función para que se le soliciten estos detalles (si es necesario) después de la selección. Parece que los desarrolladores suponen que las personas se asegurarán de que haya una clave única en la primera columna.
Russell Fulton el
5

(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'.

CREATE OR REPLACE VIEW dqmt.addressverify AS 
 SELECT row_number() OVER (ORDER BY newaddresses.addressid) AS objectid,
    newaddresses.addressid
  , geom
   FROM dqmt.newaddresses;

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.

DPSSpacial
fuente
También he usado la sintaxis "row_number () over ()" para muchas vistas. Por lo general, he usado "gid" para mi campo de clave principal. ¿Todas sus otras vistas usan "objectid" como clave principal?
RyanDalton
generalmente objectid, que funcionó en el ejemplo anterior, pero intentará gid ... ¿es eso algo que QGIS reconoce antes que cualquier otro campo 'id'?
DPSSpatial
GID no tiene ningún efecto en esto ...
DPSSpatial
Solo imaginando posibilidades. gracias por comprobar
RyanDalton
(Tarde a esto, pero ...), supongo que si una tabla que se está cargando tiene una PRIMARY KEYdefinició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 son VARCHAR. Eso no puede suceder con a VIEWporque PostgreSQL VIEWs no puede tener CONSTRAINTs. Estoy bastante seguro de que es por eso que es necesario seleccionar VIEWmanualmente 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.
GT.
4

¿Tu punto de vista aparece en la geometry_columnstabla? 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:

SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims 
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';
Ian Turton
fuente
Sí, ejecutar esta verificación en mi opinión devuelve: the_geom, Point, 4269,2
RyanDalton
3

¿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.

Ando
fuente
Sí, la tabla de geonames tiene "geonameid", que es un ID único y tiene una restricción PRIMARY KEY establecida en ese campo.
RyanDalton