10 votos

Anillo auto-intersecciones en PostGIS

Esta es una continuación de la pregunta anterior. Verás soy nuevo en PostGIS usuario.

He mirado en la validez de la topología en mis datos y encontrar alrededor de 1700 topología de problemas en la cubierta vegetal (polígono) conjunto de datos. Estos son todos los "Anillo Self_intersection".

El uso de información útil en esta presentación por Pablo Ramsay(página 20), he tratado de búfer de mis datos de acuerdo a:

ACTUALIZACIÓN del esquema.datos CONJUNTO de the_geom=buffer(the_geom,0.0) DONDE isvalid(the_geom)=false y isvalid(buffer(the_geom, 0.0))=true;

Pero me da la respuesta:

AVISO: el Anillo de Auto-intersección en o cerca del punto (editado) ERROR: la nueva fila para la relación "sgm_buffer" viola la restricción check "enforce_geotype_the_geom"

*** Error ***

ERROR: la nueva fila para la relación "sgm_buffer" viola la restricción check "enforce_geotype_the_geom" estado de SQL: 23514

También he hecho la prueba:

ACTUALIZACIÓN csgn.sgm_buffer CONJUNTO the_geom=buffer(the_geom,0.0)

y obtenemos:

ERROR: la nueva fila para la relación "sgm_buffer" viola la restricción check "enforce_geotype_the_geom"

*** Error ***

ERROR: la nueva fila para la relación "sgm_buffer" viola la restricción check "enforce_geotype_the_geom" estado de SQL: 23514

Así que asumo que este búfer técnica no funcionará en mis asuntos? O estoy haciendo algo mal?

Señor Ramsay pasa luego en el mismo documento para sugerir una técnica adicional para lidiar con la "figura de 8" polígonos. No estoy totalmente de entender cómo escribir esto en su totalidad en el código (o lo que está haciendo y si me va a ayudar):

SELECCIONE ST_BuildArea( ST_Union( 'LINESTRING VACÍO", ST_ExteriorRing( 'POLYGON((...))'

Así.... alguien puede ayudar? Esto está resultando en una verdadera pesadilla con mi apretado plazos y con habilidades limitadas en PostGIS.

14voto

Lars Mæhlum Puntos 4569

Creo que lo que está sucediendo es que su auto-intersección de polígonos se convierte en MULTIPOLÍGONOS cuando el almacenamiento en búfer.

usted tiene dos opciones:

1 quitar la restricción "enforce_geotype_the_geom", que puede hacer que en pgAdmin
2 poner el resultado en una nueva tabla en lugar de actualizar el viejo. que es a menudo una buena manera de hacer las cosas, porque entonces usted no cambia nada en la tabla original. la consulta puede ser algo como:

CREATE TABLE new_buffered_table as
SELECT ST_Buffer(the_geom,0.0) as the_geom, gid FROM original_table;

por supuesto, es posible que desee traer más campos de la nueva tabla.

pruebe el búfer truco primera. En el segundo enfoque Pablo puede decir a sí mismo, lo que afecta el vacío linestring. No recuerdo cómo que la magia sucede.

HTH Nicklas

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