我想从MultiLineString
中过滤掉所有短的隔离线(例如,长度<;2)。输出也是一个MultiLineString
。对于孤立线,我指的是那些不touch或intersect其他线
from shapely.geometry import MultiLineString
from pprint import pprint
from matplotlib import pyplot
from figures import SIZE, set_limits, plot_line, plot_bounds, color_issimple
from figures import plot_coords as _plot_coords
def plot_coords(ax, ob):
for line in ob:
_plot_coords(ax, line, zorder=1)
def plot_lines(ax, ob):
color = color_issimple(ob)
for line in ob:
plot_line(ax, line, color=color, alpha=0.7, zorder=2)
fig = pyplot.figure(1, figsize=SIZE, dpi=90)
#1: line1 original
ax = fig.add_subplot(121)
mline1 = MultiLineString([((0, 0), (2, 0)), ((1, 0), (1, 1)), ((1, 2), (3, 2)),
((3, 0), (3, 1))])
plot_coords(ax, mline1)
plot_bounds(ax, mline1)
plot_lines(ax, mline1)
ax.set_title('a) original')
set_limits(ax, -1, 4, -1, 3)
#2: line2 goal
ax = fig.add_subplot(122)
mline2 = MultiLineString([((0, 0), (2, 0)), ((1, 0), (1, 1)), ((1, 2), (3, 2))])
plot_coords(ax, mline2)
plot_bounds(ax, mline2)
plot_lines(ax, mline2)
ax.set_title('b) goal')
set_limits(ax, -1, 4, -1, 3)
pyplot.show()
这可以分为两个子问题:
第二个问题可能可以这样解决:
filtered = [line for line in list(mline1) if line.length<2]
如何解决第一个问题
解决方案:
相关问题 更多 >
编程相关推荐