如何在Python中将折线分割成直线段?

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

我有一个 GeoDataFrame,其中包含有关波兰道路的信息。数据来自OSM。大多数较大或/和弯曲的道路已经被分成较小的直线路段,但其中一些仍然是弯曲/弯曲的。

我需要至少 10 个声誉才能发布图片,这是一个新帐户,所以我将其发布在 imgur 上,这里是示例链接:https://i.stack.imgur.com/cdVvw.png

我的问题是:是否可以使用 python 将多段线分割成该多段线包含的多个直线段?如果答案是肯定的,那么该怎么做呢? 我发现的最接近的问题是这个:https://gis.stackexchange.com/questions/226056/postgis-how-to-split-a-polyline-into-straight-segments但它适用于PostGIS。

python split line
1个回答
0
投票

我遇到了同样的问题,我正在使用 pyQGIS for QGIS。

此函数从 QGIS 线上获取点,然后为每对点创建一条新线。

from qgis.core import QgsFeature, QgsGeometry

def to_segments(line):
    # get points
    # https://github.com/qgis/QGIS/blob/release-3_34/python/plugins/processing/algs/qgis/PointsFromLines.py
    points = []
    geom = line.geometry()
    if geom.isMultipart():
        lines = geom.asMultiPolyline()
        for line in lines:
            for i in range(len(line)):
                points.append(line[i]) # need to improve for multi polylines
    else:
        line = geom.asPolyline()
        for i in range(len(line)):
            points.append(line[i])

    # create segments
    # https://gis.stackexchange.com/questions/60307/creating-line-with-three-points-with-python-in-qgis
    segments = []
    for i in range(len(points)-1):
        seg = QgsFeature()
        seg.setGeometry((QgsGeometry.fromPolyline([points[i],points[i+1]])))
return(segments)

然后您必须将所有段添加到您的 dataProvider (类似于 prov.addFeature([seg]))

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