如何在Shapely中获得LineString的端点

问题描述 投票:0回答:2
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),但没有切下它们的位置。我该如何进行这项工作?

python shapely
2个回答
0
投票

解决了两个使Linesstring如下拆分的例程。

  1. 功能:split_first返回第一个点,没有第一个点的LineString返回

  2. 功能: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)

0
投票

要获取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
© www.soinside.com 2019 - 2024. All rights reserved.