如何从两点创建匀称的LineString


11

如果有两个点,我要从中创建一个直线LineString对象:

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

关于LineString状态的Shapely手册

Point实例序列不是有效的构造函数参数。A LineString由点描述,但不由Point实例组成。

因此,如果我有两个点AB,是否有AB比我当前“最佳”猜测更短/更好/更容易的方式来创建线...

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

...看起来很复杂。有没有更简单的方法?

更新资料

对于今天发布的Shapely 1.3.2,手册中的上述声明不再正确。所以从现在开始

AB = LineString([A, B])

工程

Answers:


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__同意)并逐字粘贴代码后,我从linestring.pyc#228收到了有关“输入[<...Point object at 0x..>, <...Point object at 0x...>]是LineString形状错误”的ValueError 。我错过了什么吗?
ojdo

更新:相应的拉取请求#102仅在主服务器中,尚未合并到分支1.3,因此在当前的1.3.1版本中不存在。
ojdo

你是对的。我现在已经在github.com/Toblerity/Shapely/issues/130中修复了此问题,并将1.3.2上传到PyPI。
sgillies

检查,现在可以使用;再次感谢您的及时跟进!
ojdo 2014年

3

基本方法是:

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

您还可以使用切片来连接坐标列表:

AB = LineString(A.coords[:] + B.coords[:])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.