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
> 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 :-)
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.
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.