Forum: PC-Programmierung Python + Shapely: Vertauschen zweier LineStrings in einem MultiLineString


von Florian W. (florenzw)


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

von Nix Egsbert (Gast)


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 :-)

von Florian W. (florenzw)


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.

von Florian W. (florenzw)


Lesenswert?

Work around steht.
Zwar nicht schön, aber funktioniert.

Das mit dem Quellentext erwies sich als schwierig, da Shapely 
hauptsächlich die Funktionen der Geos-library durchschleift (und die war 
mir zu heftig).

Danke Nix Egsbert

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.