5 votos

¿Dividir polígonos con único vértice compartido?

Estoy tratando de usar QGIS para dividir un conjunto de polígonos en una sola partes donde hay una combinación en un solo vértice. La imagen muestra una serie de ejemplos.

Me he tomado un solo polígono y en el uso de 'Singlepart a varias partes' para generar el ejemplo. Sin embargo, esto no crear una única parte donde hay que tocarlo o compartida de los vértices. Hay una forma de división aún más estos polígonos donde sólo un único vértice en común?

Yo no quiero un manual de proceso: cualquier solución debe ser capaz de ser utilizado como parte de un fichero automatizado de PyQGIS secuencia de comandos.

Example joined polygons

Prueba de geometría WKT:

Polygon ((393796.08000000001629815 389603.25, 393784.08000000001629815 389603.25, 393784.08000000001629815 389615.25, 393780.08000000001629815 389615.25, 393780.08000000001629815 389611.25, 393776.08000000001629815 389611.25, 393776.08000000001629815 389615.25, 393780.08000000001629815 389615.25, 393780.08000000001629815 389619.25, 393784.08000000001629815 389619.25, 393784.08000000001629815 389623.25, 393792.08000000001629815 389623.25, 393792.08000000001629815 389635.25, 393796.08000000001629815 389635.25, 393796.08000000001629815 389631.25, 393800.08000000001629815 389631.25, 393800.08000000001629815 389627.25, 393804.08000000001629815 389627.25, 393804.08000000001629815 389623.25, 393808.08000000001629815 389623.25, 393808.08000000001629815 389627.25, 393812.08000000001629815 389627.25, 393812.08000000001629815 389619.25, 393820.08000000001629815 389619.25, 393820.08000000001629815 389611.25, 393824.08000000001629815 389611.25, 393824.08000000001629815 389603.25, 393800.08000000001629815 389603.25, 393800.08000000001629815 389607.25, 393796.08000000001629815 389607.25, 393796.08000000001629815 389603.25))

3voto

gnovice Puntos 70970

Respuesta Corta-

Para la topología de corrección/limpieza puede utilizar la HIERBA 'v. limpio" algoritmo de procesamiento de la caja de herramientas. En el caso de romper la opción de la herramienta de limpieza sería perfecto para la división de polígonos.

Para obtener información sobre cómo acceder a los algoritmos de procesamiento en PyQGIS refieren - http://docs.qgis.org/2.14/en/docs/user_manual/processing/console.html#calling-algorithms-from-the-python-console


Respuesta detallada -

La sintaxis de definición de v. limpia -

ALGORITHM: v.clean - Toolset for cleaning topology of vector map.
input <ParameterVector>
tool <ParameterSelection>
thresh <ParameterNumber>
GRASS_REGION_PARAMETER <ParameterExtent>
GRASS_SNAP_TOLERANCE_PARAMETER <ParameterNumber>
GRASS_MIN_AREA_PARAMETER <ParameterNumber>
output <OutputVector>
error <OutputVector>
tool(Cleaning tool)
    0 - break
    1 - snap
    2 - rmdangle
    3 - chdangle
    4 - rmbridge
    5 - chbridge
    6 - rmdupl
    7 - rmdac
    8 - bpol
    9 - prune
    10 - rmarea
    11 - rmline
    12 - rmsa

Para su propósito, tendrás que usar 'break' opción en la herramienta de limpieza. El thresh, GRASS_SNAP_TOLERANCE_PARAMETER y GRASS_MIN_AREA_PARAMETER puede ser 0. El QGIS algoritmos de procesamiento de esperar que la medida de parámetros en un formato diferente, que puede ser obtenido a partir de QgsRectangle objeto -

rect = layer.extent();            #Where 'layer' is the input QgsVectorLayer object
extent = "%f , %f , %f , %f "% (rect.xMinimum(), rect.xMaximum() , rect.yMinimum(), rect.yMaximum() )

Ahora puede ejecutar el algoritmo en PyQGIS por la importación de procesamiento y uso de runalg o runandload -

import processing
processing.runalg("grass7:v.clean", layer , 0 , 0 , extent , 0 , 0 , <OutputVector> , None );

He seguido los pasos anteriores para el WKT proporcionada en la pregunta sobre QGIS 2.18 con HIERBA 7 y funcionó bien.

Espero que esto ayude!

3voto

Joe Puntos 16

En primer lugar, se siente como QGIS tiene un error ya que no considera su polígono como no válido. Me gustaría considerar la posibilidad de escribir una pregunta para qgis-los usuarios de la lista de correo y con base en la retroalimentación quizás un informe de error.

No sé cómo corregir su polígonos con QGIS secuencia de comandos del programa, si no incluso creo que no hay nada que reparar. Una alternativa sería el uso de una base de datos espaciales y algunos de SQL. La primera cosa a hacer sería correr ST_MakeValid que convertirá la auto-intersección de polígonos en multipolígonos. Cómo explotar multipolígonos depende de la base de datos: PostGIS ha "ST_Dump" y SpatiaLite ha "ElementaryGeometries".

  1. PostGIS

SELECCIONE ST_Dump( ST_MakeValid( ST_GeomFromText(' Polígono ((393796.08000000001629815 389603.25, 393784.08000000001629815 389603.25, 393784.08000000001629815 389615.25, 393780.08000000001629815 389615.25, 393780.08000000001629815 389611.25, 393776.08000000001629815 389611.25, 393776.08000000001629815 389615.25, 393780.08000000001629815 389615.25, 393780.08000000001629815 389619.25, 393784.08000000001629815 389619.25, 393784.08000000001629815 389623.25, 393792.08000000001629815 389623.25, 393792.08000000001629815 389635.25, 393796.08000000001629815 389635.25, 393796.08000000001629815 389631.25, 393800.08000000001629815 389631.25, 393800.08000000001629815 389627.25, 393804.08000000001629815 389627.25, 393804.08000000001629815 389623.25, 393808.08000000001629815 389623.25, 393808.08000000001629815 389627.25, 393812.08000000001629815 389627.25, 393812.08000000001629815 389619.25, 393820.08000000001629815 389619.25, 393820.08000000001629815 389611.25, 393824.08000000001629815 389611.25, 393824.08000000001629815 389603.25, 393800.08000000001629815 389603.25, 393800.08000000001629815 389607.25, 393796.08000000001629815 389607.25, 393796.08000000001629815 389603.25))') ));

  1. SpatiaLite

Paso uno:

SELECCIONE ST_MakeValid( ST_GeomFromText(' Polígono ((393796.08000000001629815 389603.25, 393784.08000000001629815 389603.25, 393784.08000000001629815 389615.25, 393780.08000000001629815 389615.25, 393780.08000000001629815 389611.25, 393776.08000000001629815 389611.25, 393776.08000000001629815 389615.25, 393780.08000000001629815 389615.25, 393780.08000000001629815 389619.25, 393784.08000000001629815 389619.25, 393784.08000000001629815 389623.25, 393792.08000000001629815 389623.25, 393792.08000000001629815 389635.25, 393796.08000000001629815 389635.25, 393796.08000000001629815 389631.25, 393800.08000000001629815 389631.25, 393800.08000000001629815 389627.25, 393804.08000000001629815 389627.25, 393804.08000000001629815 389623.25, 393808.08000000001629815 389623.25, 393808.08000000001629815 389627.25, 393812.08000000001629815 389627.25, 393812.08000000001629815 389619.25, 393820.08000000001629815 389619.25, 393820.08000000001629815 389611.25, 393824.08000000001629815 389611.25, 393824.08000000001629815 389603.25, 393800.08000000001629815 389603.25, 393800.08000000001629815 389607.25, 393796.08000000001629815 389607.25, 393796.08000000001629815 389603.25))') );

Paso 2:

Recopilar todos los datos a partir de los datos originales, con corrección de los polígonos, en una tabla y continuar con ElementaryGeometries función https://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html.

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