2 votos

Tengo la siguiente multilínea, y estoy buscando encontrar la intersección entre cada par

Tengo un par de líneas, que me gusta encontrar la intersección de cada una de ellas con la otra. Sé que para dos líneas puedo hacer lo siguiente:

from shapely.geometry import LineString

line1 = LineString([(0,0), (1,0), (1,1)])

line2 = LineString([(0,1), (1,1)])

print(line1.intersection(line2))

Digamos que tengo la siguiente multilínea, y busco encontrar la intersección entre cada par?

MULTILINESTRING ((0 0, 0 20), (20 0, 20 20), (7.49080237694725 11.97316968394073, 5.67208473076472 5.229834926470677), (19.01428612819832 3.12037280884873, 25.96681259449994 4.024633854021577), (14.6398788362281 3.119890406724053, 21.51766222234933 1.803845175041164))

1voto

Anton8000 Puntos 165

Puede utilizar itertools.combinaciones para combinar todos los posibles pares de líneas extraídos de la multilínea:

from shapely.geometry import MultiLineString
from itertools import combinations

multiline = MultiLineString([[(614633.1598889811, 6614684.232110311), (614585.0239559432, 6615176.69973293), (614244.3696605981, 6615210.024609649), (614174.0171430812, 6615058.211282375)], 
                             [(614849.2836035677, 6614574.273030049), (615163.3363697577, 6614591.624011607), (615477.7302093033, 6614608.993836996), (615475.8039105758, 6614892.159749944), 
                              (615474.6318041045, 6615064.459401229), (614967.3343471865, 6615119.389699113)], 
                             [(615054.1363645532, 6614185.399992246), (615163.3363697577, 6614591.624011607), (615227.7403992868, 6614831.207001455), (615475.8039105758, 6614892.159749944), 
                              (615835.3545208545, 6614980.506471327), (615867.958614701, 6615021.869873968), (615474.6318041045, 6615064.459401229), (615474.2581286087, 6615119.389699113), 
                              (615286.7657710963, 6615227.024200648)], 
                             [(616057.5676853136, 6615001.338955494), (615867.958614701, 6615021.869873968), (616067.9839273975, 6615275.633330373)]])

for line1, line2 in combinations([line for line in multiline],2):
    if line1.intersects(line2):
        print(line1.intersection(line2))

La salida de la voluntad:

MULTIPOINT (615163.3363697577 6614591.624011607, 615474.6318041045 6615064.459401229, 615475.8039105758 6614892.159749944)
POINT (615867.9586147011 6615021.869873968)

enter image description here

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