Shapely LineString SVG 错误

Shapely LineString SVG Error

我正在尝试学习 Shapely,我最终想获取一系列 x,y 坐标并创建一条偏移线或平行线。昨晚我之前发布了一个关于这个过程的问题并意识到它可能令人困惑,所以让我重申一下并尝试以更小的块来攻击它。我是 运行 Windows 7 64 位的 Anaconda。我已经安装了 Shapely 和 Shapefile 模块。我正在尝试创建一个 LineString;但是,每当我这样做时,我都会收到错误消息。请查找代码:

from shapely.geometry import LineString

x1

Out[56]: 1633042.5200605541

y1

Out[57]: 700342.4999843091

x2

Out[58]: 1632943.7118592262

y2

Out[59]: 700441.360350892

LineString([(x1,y1),(x2,y2)])

Out[60]: 
Received invalid SVG data. 

这是什么意思'invalid SVG data'?难道我做错了什么。解决此问题后,我可能还会有其他问题,但让我们一步一步来。我尝试将 x1,y1,x2,y2 转换为浮点数,但似乎没有帮助。

从您的问题来看,您似乎是在 IPython (qt) 控制台中 运行 设置您的代码?该问题似乎与 Shapely 无关,而是 IPython 尝试 render/draw 您的 LineString 作为矢量图像(SVG 格式)的一些问题。

使用ipython qtconsole:

In [1]: from shapely.geometry import LineString

In [2]: x = LineString([(16.3,7.0),(16.2,7.1)])

In [3]: x
Out[3]: 
Received invalid SVG data.

如果您要在 "standard" IPython 控制台中 运行 相同的代码,甚至在标准的 Python 解释器中,您的代码应该可以正常工作。

仅使用 ipython:

In [1]: from shapely.geometry import LineString

In [2]: x = LineString([(16.3,7.0),(16.2,7.1)])

In [3]: x
Out[3]: <shapely.geometry.linestring.LineString at 0x113c30f60>

长话短说,您的原始代码一切正常;错误只是 IPython 控制台未能绘制 LineString。所有其他 Shapely 操作应该不受影响。例如:

In [4]: list(x.coords)
Out[4]: [(16.3, 7.0), (16.2, 7.1)]

In [5]: x.length
Out[5]: 0.14142135623731025

这是一个错误,现已修复。 SVG 数据确实无效。升级到 Shapely>=1.5.6