Linestring1 = LINESTRING (51.2176008 4.4177154, 51.21758 4.4178548, **51.2175729 4.4179023**, *51.21745162000732 4.41871738126533*)
Linestring2 = LINESTRING (*51.21745162000732 4.41871738126533*, **51.2174025 4.4190475**, 51.217338 4.4194807, 51.2172511 4.4200562, 51.2172411 4.4201077, 51.2172246 4.4201654, 51.2172067 4.420205, 51.2171806 4.4202355, 51.2171074 4.4202929, 51.2170063 4.4203409, 51.2169564 4.4203641, 51.2168076 4.4204243, 51.2166588 4.4204833, 51.2159018 4.420431, 51.2154117 4.4203843)
考虑到这两个线串是从较大的线串上切下来的,如何获得LineString的端点?
-Point(51.21745162000732 4.41871738126533)已删除
-线串1的新的最后一个元素=“ 51.2175729 4.4179023
-线串2的新第一个元素=“ 51.2174025 4.4190475
简而言之,我想获得第一部分的新的最后一个值(linestring1)和第二部分的新的第一个值(linestring2),但没有切下它们的位置。我该如何进行这项工作?
解决了两个使Linesstring如下拆分的例程。
功能:split_first返回第一个点,没有第一个点的LineString返回
功能:split_last返回最后一个点,并且从第一个点起的LineString不包括最后一个点
代码
from shapely.ops import nearest_points
from shapely.geometry import Point
from shapely.geometry import LineString
def split_first(linestring):
" returns first point and linestring without first point "
coords = list(linestring.coords)
p, *x = coords
return Point(p), LineString(x)
def split_last(linestring):
" returns first point and linestring without first point "
*x, p = list(linestring.coords) = list(linestring.coords)
return Point(p), LineString(x)
Test
数据
linestring = LineString([(51.2176008,4.4177154), (51.21758,4.4178548), (51.2175729,4.4179023), (51.21745162000732,4.41871738126533)])
第一个点,线串不包括第一个点
p, l = split_first(linestring)
print(p)
print(l)
Out
POINT (51.2176008 4.4177154)
LINESTRING (51.21758 4.4178548, 51.2175729 4.4179023, 51.21745162000732 4.41871738126533)
最后一个点,线串不包括最后一个
p, l = split_last(linestring)
print(p)
print(l)
Out
POINT (51.21745162000732 4.41871738126533)
LINESTRING (51.2176008 4.4177154, 51.21758 4.4178548, 51.2175729 4.4179023)
要获取LineString
的端点,您只需访问其boundary
属性:
boundary
或者,您可以从from shapely.geometry import LineString
line = LineString([(0, 0), (1, 1), (2, 2)])
endpoints = line.boundary
print(endpoints)
# MULTIPOINT (0 0, 2 2)
first, last = line.boundary
print(first, last)
# POINT (0 0) POINT (2 2)
坐标序列中获得第一个和最后一个点:
coords
但是,在您的特定情况下,由于要删除第一行的最后一点和第二行的第一点,并且只有在获得端点之后,才应该使用以下命令构造新的coords
对象:相同的from shapely.geometry import Point
first = Point(line.coords[0])
last = Point(line.coords[-1])
print(first, last)
# POINT (0 0) POINT (2 2)
属性:
LineString