7 votos

¿Cómo arreglar líneas superpuestas?

Tengo una línea de conjunto de datos que contiene algunas de las líneas donde los "puntos finales" son, en realidad se encuentra en el centro de la línea. En la imagen de abajo, los nodos se muestran en verde y uno de los puntos finales de red. La línea se dobla sobre sí mismo.

¿Cómo puedo asegurar que los puntos finales son en realidad en el final de la línea, y eliminar la superposición?

complex line

Estas líneas son válidos, y complejo como lo han hecho se superpone, como confirmó mediante la bien formada.

>>> from shapely.wkt import loads
>>> wkt = "LINESTRING (0 0, 2 0, 1 0)"
>>> l = loads(wkt)
>>> l.is_valid
True
>>> l.is_simple
False

Ordenar las coordenadas que podría funcionar en algunos casos:

>>> sorted(l.coords)
[(0.0, 0.0), (1.0, 0.0), (2.0, 0.0)]

Pero no en otros como que iba a cambiar la geometría de la línea:

>>> wkt = "LINESTRING (0 0, 2 0, 1 -1)"
>>> l = loads(wkt)
>>> sorted(l.coords)
[(0.0, 0.0), (1.0, -1.0), (2.0, 0.0)]

Los intentos en el búfer de la línea con un 0 buffer, y la fusión de las líneas no han cambiado el orden de coordenadas.

16voto

hernan43 Puntos 566

Usted puede re-nodo no-simple LineString con uno o dos pasos:

  1. Crear un intersection del objeto con sí mismo, que puede crear una MultiLineString
  2. Para tratar de hacer un LineString singular, usarlinemerge

Por ejemplo:

from shapely.wkt import loads as load_wkt
from shapely.ops import linemerge

# Input LineString: valid, but non-simple
ls = load_wkt('LINESTRING(0 0, 2 0, 1 0)')
assert ls.is_valid and not ls.is_simple

# Make a simple shape, by finding the intersection with itself
sls = ls.intersection(ls)
assert sls.is_valid and sls.is_simple

# If it was a LineString to start with, then attempt to put it back to that type
if ls.geom_type == 'LineString' and sls.geom_type == 'MultiLineString':
    fls = linemerge(sls)
else:
    fls = sls

assert fls.is_valid and fls.is_simple
print(fls.wkt)

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