从LineString过滤线段

问题描述 投票:0回答:2

我的数据集由LineString组成,我想过滤掉此LineString的各个线段。更确切地说,每个街道段。

直到现在,我已经从数据集中提取了各个点,并将它们保存在单独的列表中。此外,我想再次收集这些点,并根据它们创建单独的LineString,以将其存储到Geodataframe中。数据具有以下形式:

LINESTRING (3275.284016199762 340555.8579582386, 3241.504528076811 340504.1348617533, 3245.415803206172 340501.457084205, 3280.414559049542 340552.7138220053, 3285.19053022

我的问题是,我必须为每次迭代创建并显式保存单独的LineString。谁能帮我这个?有更好的方法吗?

import help_functions as fun
from shapely import wkb
from shapely import wkt
from shapely.geometry import Point, LineString
import geopandas as gp
import numpy as np

#Loop over LineString and gather Points
c=[]

for i in range(0,end):
    c.append(Point(route1.coords[i]))


iterator=len(c)
max=len(c)-1

#Loop to store LineStrings - got stuck here
for i in np.arange(0,iterator):
    if i<max:
        LineString([c[i], c[i+1]]).wkt

    else:
        break;

输出应如下所示:

线串(A点,B点)

线串(B点,C点)

线串(C点,D点)

.....线串(Y点,Z点)

python postgis point geopandas shapely
2个回答
0
投票

欢迎您加入。

您无需编写代码即可拆分LineString。让PostGIS来完成工作:)下面的快捷示例使用CTE中的CTEST_DumpPoints,然后使用窗口函数ST_DumpPoints创建另一条路径为path + 1的行:

LineString

0
投票

谈到Shapely,它没有提供将曲线对象(lead()lead())分割为段的功能,因此您必须编写自己的段。这是一个示例,说明如何使用WITH j AS ( SELECT ST_DumpPoints('LINESTRING (10 10, 12 12, 14 14, 16 16, 18 18)') AS g ) SELECT ST_AsText(point) FROM ( SELECT ST_MakeLine((g).geom, lead((g).geom,1) OVER ()) AS point FROM j) i WHERE i.point IS NOT NULL st_astext ------------------------- LINESTRING(10 10,12 12) LINESTRING(12 12,14 14) LINESTRING(14 14,16 16) LINESTRING(16 16,18 18) (4 Zeilen) LineString对和LinearRing对对迭代到zip的情况:

zip
© www.soinside.com 2019 - 2024. All rights reserved.