두 점에서 Shapely LineString을 만드는 방법


11

두 개의 점이 있으면 직선 LineString객체 를 만들고 싶습니다 .

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

에 대한 매끈한 설명서LineString 상태 :

일련의 Point인스턴스는 유효한 생성자 매개 변수가 아닙니다. A LineString는 포인트로 설명되지만 Point 인스턴스로 구성되지는 않습니다.

나는 두 점을 그래서 만약 AB, 라인 생성의 짧은 / 더 / 더 쉬운 방법이 AB현재의 내 "최고"생각보다가 ...

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

... 다소 복잡해 보입니다. 더 쉬운 방법이 있습니까?

최신 정보

오늘 릴리스 된 Shapely 1.3.2에서는 매뉴얼의 위 내용이 더 이상 올바르지 않습니다. 이제부터

AB = LineString([A, B])

작동합니다 !

답변:


9

Shapely 1.3부터 ​​Points에서 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__코드를 그대로 붙여 넣은 후 "입력 [<...Point object at 0x..>, <...Point object at 0x...>]이 LineString의 잘못된 모양입니다 "라는 ValueError를 linestring.pyc # 228에서받습니다 . 내가 놓친 것이 있습니까?
ojdo

업데이트 : 해당 풀 요청 # 102 는 마스터에만 있으며 아직 분기 1.3에 병합되지 않았으므로 현재 1.3.1 릴리스에는 없습니다.
ojdo

네가 옳아. 방금 github.com/Toblerity/Shapely/issues/130 에서이 문제를 해결 하고 PyPI에 1.3.2를 업로드했습니다.
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.