कैसे दो बिंदुओं से एक Shapely LineString बनाने के लिए


11

यदि दो बिंदु हैं, जिनसे मैं एक सीधी LineStringवस्तु बनाना चाहता हूं :

from shapely.geometry import Point, LineString
A = Point(0,0)
B = Point(1,1)

के लिए सुडौल मैनुअलLineString कहता है:

Pointउदाहरणों का एक अनुक्रम एक वैध कंस्ट्रक्टर पैरामीटर नहीं है। A LineStringको अंकों से वर्णित किया जाता है, लेकिन बिंदु उदाहरणों से बना नहीं है।

इसलिए अगर मेरे पास दो बिंदु हैं Aऔर B, क्या ABमेरे वर्तमान "सर्वश्रेष्ठ" अनुमान से एक लाइन बनाने का एक छोटा / बेहतर / आसान तरीका है ...

AB = LineString(tuple(A.coords) + tuple(B.coords))

... जो जटिल लगता है। क्या कोई आसान तरीका है?

अपडेट करें

आज के जारी किए गए शापली 1.3.2 के साथ, मैनुअल से उपरोक्त कथन अब सही नहीं है। तो अब से,

AB = LineString([A, B])

काम करता है !

जवाबों:


9

शापली 1.3 के बाद से, आप पॉइंट्स से एक लाइनस्ट्रीमिंग बना सकते हैं:

>>> from shapely.geometry import Point, LineString
>>> LineString([Point(0, 0), Point(1, 1)]).wkt
'LINESTRING (0 0, 1 1)'

मैनुअल में विरोधाभास के लिए क्षमा याचना।


दो मशीनों (एक लिनक्स, एक विंडोज) पर, Shapely 1.3.1 ( shapely.__version__सहमत) में अपग्रेड करने और अपने कोड वर्बेटिम को चिपकाने के बाद, मुझे [<...Point object at 0x..>, <...Point object at 0x...>]"इनपुटस्टार के लिए गलत आकार है " के बारे में linestring.pyc # 228 से एक वैल्यूएयर प्राप्त होता है । क्या मुझे कुछ याद आया?
ओजडो

अपडेट: संबंधित पुल अनुरोध # 102 केवल मास्टर में है, अभी तक शाखा 1.3 में विलय नहीं हुआ है और इस तरह वर्तमान 1.3.1 रिलीज में मौजूद नहीं है।
ओजडो

आप सही हे। मैंने अभी इसे github.com/Toblerity/Shapely/issues/130 में तय किया है और 1.3.2 को PyPI पर अपलोड किया है।
sgillies

जांचें, यह अब काम करता है; त्वरित अनुवर्ती के लिए धन्यवाद (फिर से)!
ओजडो

3

आधार विधि है:

AB = LineString([(A.x,A.y), (B.x,B.y)])

आप समन्वय सूचियों को संक्षिप्त करने के लिए स्लाइसिंग का उपयोग कर सकते हैं:

AB = LineString(A.coords[:] + B.coords[:])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.