วิธีสร้าง 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))

... ซึ่งดูค่อนข้างซับซ้อน มีวิธีที่ง่ายกว่านี้ไหม?

ปรับปรุง

ด้วย Shapely 1.3.2 ที่วางจำหน่ายวันนี้ข้อความข้างต้นจากคู่มือไม่ถูกต้องอีกต่อไป ดังนั้นจากนี้ไป

AB = LineString([A, B])

ได้ผล !

คำตอบ:


9

ตั้งแต่ Shapely 1.3 คุณสามารถสร้าง LineString จากคะแนน:

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

ขอโทษสำหรับความขัดแย้งในคู่มือ


ในสองเครื่อง (หนึ่ง Linux หนึ่ง Windows) หลังจากอัปเกรดเป็น Shapely 1.3.1 ( shapely.__version__ตกลง) และวางรหัสคำต่อคำของคุณฉันได้รับ ValueError จาก linestring.pyc # 228 เกี่ยวกับ "อินพุต[<...Point object at 0x..>, <...Point object at 0x...>]เป็นรูปร่างผิดสำหรับ LineString" ฉันพลาดอะไรไปหรือเปล่า
ojdo

อัปเดต: คำขอการดึงที่สอดคล้องกัน# 102มีเฉพาะในต้นแบบเท่านั้นยังไม่ได้รวมเข้ากับสาขา 1.3 และดังนั้นจึงไม่ปรากฏในรุ่นปัจจุบัน 1.3.1
ojdo

คุณถูก. ฉันเพิ่งจะแก้ไขสิ่งนี้ในgithub.com/Toblerity/Shapely/issues/130และอัปโหลด 1.3.2 ไปยัง PyPI
sgillies

ตรวจสอบใช้งานได้ทันที ขอบคุณ (อีกครั้ง) สำหรับการติดตามอย่างรวดเร็ว!
ojdo

3

วิธีการพื้นฐานคือ:

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

คุณยังสามารถใช้การแบ่งส่วนเพื่อเชื่อมโยงรายการพิกัด:

AB = LineString(A.coords[:] + B.coords[:])
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.