Python + Shapely: Vertauschen zweier LineStrings in einem MultiLineString

OP #4514428
Lesenswert?

Hallo,

ich versuche in einem MultiLineString der Shapely-lib zwei LineStrigs zu 
tauschen:

from shapely.geometry import MultiLineString
from shapely.affinity import *
from shapely.geometry.polygon import LinearRing

ring_a = LinearRing([(0, 0), (2, 0), (2, 2), (0, 2), (0, 0)])
ring_b = translate(ring_a,1,1)

print(ring_a)
print(ring_b)

print("Multilinestring")
m_l_string = MultiLineString([ring_a, ring_b])
print(m_l_string)
print(m_l_string[0])
print(m_l_string[1])

print("exchange")
m_l_string[0], m_l_string[1] = m_l_string[1], m_l_string[0]

print(linestring)


Fehlermeldung:
    m_l_string[0], m_l_string[1] = m_l_string[1], m_l_string[0]
TypeError: 'MultiLineString' object does not support item assignment

Was mache ich falsch bzw. gibt's hier einen Trick?

FlorenzW
Gast #4514446
Lesenswert?

> Was mache ich falsch bzw. gibt's hier einen Trick?

Fehlermeldung lesen und verstehen: Zuweisung nicht möglich.

Also gleich richtig bauen:
> m_l_string = MultiLineString([ring_b, ring_a])


NB: ev. verleitet dich die geprintete Darstellung und die indexierte 
(lese-)Zugriffsmöglichkeit zu glauben es handle sich um eine Liste, das 
könnte aber auch nur eine (unbeabsichtig unvellständige) 
"inteface"-Implementation sein.
Stehen zum Verändern ev. Andere Methoden zur Verfügung? --> Doku lesen 
(oder Source, ist ja zum Glück Python :-)
OP #4514481
Lesenswert?

Nix Egsbert schrieb:
> Also gleich richtig bauen:
>> m_l_string = MultiLineString([ring_b, ring_a])

Geht leider nicht, soll zu Optimierungszwecken getauscht werden, um den 
Weg zwischen einer Vielzahl von LineStrings, die nacheinander angefahren 
werden, zu verkürzen.

> NB: ev. verleitet dich die geprintete Darstellung und die indexierte
> (lese-)Zugriffsmöglichkeit zu glauben es handle sich um eine Liste, das
> könnte aber auch nur eine (unbeabsichtig unvellständige)
> "inteface"-Implementation sein.

Dieser Verdacht drängt sich auf...

> Stehen zum Verändern ev. Andere Methoden zur Verfügung? --> Doku lesen
> (oder Source, ist ja zum Glück Python :-)

In der Doku hab ich nichts gefunden (was ich nur nicht so recht glauben 
will)

Mein work around:
In eine normale Python-Liste verwandeln, die Optimierung machen und in 
einen MultiLineString zurückschreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren