9 votos

¿Cómo acelerar el espacio particionado en postgis?

Tengo un montón de superposición de polígonos y estoy intentando particionar el espacio para evitar la superposición. Creo que mi problema es bastante simple. El uso de algunos de ESRI producto y http://arcscripts.esri.com/details.asp?dbid=16700 mi compañero de trabajo calculada en 48s.

Estoy tratando de hacerlo con postgis el uso de http://s3.opengeo.org/postgis-power.pdf#page=24 (adivinar los detalles, el uso de http://trac.osgeo.org/postgis/wiki/UsersWikiSimplifyPreserveTopology como fuente de inspiración) pero es tan lento que no puedo hacerlo con más de 10 polys (tengo 800 de ellos a split). La parte lenta es la ST_Union, he intentado varias cosas, pero ninguna que el éxito, aquí es el estado actual de las cosas :

select geom from
(select st_linemerge(st_union(geom)) as geom from
    (select st_exteriorring((st_dumprings((st_dump(t.geom)).geom)).geom) as geom from
        (SELECT geometry AS geom, id
               FROM tt
              WHERE campaign_id = 204
              ORDER BY id limit 200) t) t2) t3

esta ha sido la informática para 26 min (el linemerge() no lo es en realidad ). Los polígonos son Multipolígonos en caso de que el st_dump errores.

¿Tiene alguna sugerencia ? El st_union() de la línea de trabajo es muy lento parte.

Gracias,

Nico.

PS: aquí están algunos números : 852 multipolígonos, que conduce a 14880 polígonos, que conduce a 21467 linestrings por un total de 315513 vértices.

3voto

dlanod Puntos 8661

¿Qué versión de PostGIS está utilizando? Sistemas es mucho más lenta si usted está usando PostGIS < 1.4 o GEOS < 3.2. Unión mucho más rápida fue introducida en la 1.4, pero también requiere GEOS 3.2 +. Así que primero si usas inferior a 1.4, actualizar a por lo menos 1.5.

SELECT postgis_full_version();

Para comprobar.

También es su intención de mantener los bordes originales de los polígonos. Si desea disolver zonas superpuestas,

SELECT ST_Union(geom) FROM tt WHERE campaign_id = 204;

Haría el truco.

3voto

Scro Puntos 1729

Esta respuesta no puede ayudar a @nraynaud directamente, pero sí pretende arrojar algo de luz sobre el tema.

Existe un problema similar en spatiaLite < 4.0 debido a un problema con GEOS. Vea este enlace para una discusión de la cuestión.

La solución es reemplazar el ST_Union() con la función de ST_UnaryUnion(ST_Collect( )). Por desgracia, ST_UnaryUnion no está disponible hasta postGIS 2.0 (como lo que yo puedo decir.)

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