5 votos

PostGIS - ¿Por qué mis resultados de ST_Union (almacenados en una nueva tabla) salen como puntos y no como polígonos?

He decidido pasarme a PostGIS para fusionar polígonos en lugar de pasar horas haciéndolo en QGIS. Sin embargo, me encuentro con un problema en el que los resultados de una consulta ST_Union se almacenan, o al menos salen como puntos y no como polígonos fusionados.

Esta es mi consulta SQL:

DROP TABLE opengeo.london_merged;
CREATE TABLE opengeo.london_merged (
  the_geom geometry(MultiPolygon),
  CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
  CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL)
);

INSERT INTO opengeo.london_merged 
SELECT ST_Union(the_geom) AS the_geom
FROM opengeo.tq_building

Este es el resultado que obtengo de la nueva tabla opengeo.london_merged: enter image description here

Sin embargo, si ejecuto este mismo SQL en la tabla opengeo.tq_building como una vista SQL en GeoServer (sin crear una nueva tabla, sólo mostrando los resultados):

SELECT ST_Union(the_geom) AS the_geom
FROM opengeo.tq_building

Obtengo la siguiente salida, correcta: enter image description here

Es obvio que algo está pasando con la forma en que se crea la nueva tabla o cómo los datos se almacenan / recuperan de ella, sólo que todavía no sé lo suficiente sobre PostGIS para poner mi dedo en la llaga.

¿Cómo puedo almacenar la salida ST_Union en una nueva tabla para que la salida sean los polígonos esperados?

Editar

He ejecutado la siguiente vista SQL en la tabla opengeo.london_merged en GeoServer y me da la salida correcta, lo que sugiere que los datos se almacenan correctamente, pero se emiten / me dan mal cuando veo la tabla normalmente. ¿Tal vez un problema de tipo o SRID? No lo sé.

SELECT the_geom FROM opengeo.london_merged

Sigo deseando resolver esto.

3voto

Will Dana Puntos 418

Gracias a una sugerencia de Micha (más abajo) lo resolví creando una nueva tabla con los resultados de la consulta ST_Union, pero esta vez ejecutando el comando Poblar_columnas_geométricas() para asegurarse de que los tipos de geometría y el SRID son correctos.

Este es el nuevo SQL, mucho más limpio:

CREATE TABLE opengeo.london_merged_correct AS
SELECT
  ST_Union(the_geom) AS the_geom
FROM opengeo.tq_building;

-- Update the geometry_columns table
SELECT Populate_Geometry_Columns();

El resultado es correcto: enter image description here

Este proceso es también documentado aquí .

Gracias por la ayuda.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X