我有一个 GeoDataFrame,其中包含有关波兰道路的信息。数据来自OSM。大多数较大或/和弯曲的道路已经被分成较小的直线路段,但其中一些仍然是弯曲/弯曲的。
我需要至少 10 个声誉才能发布图片,这是一个新帐户,所以我将其发布在 imgur 上,这里是示例链接:
我的问题是:是否可以使用 python 将多段线分割成该多段线包含的多个直线段?如果答案是肯定的,那么该怎么做呢? 我发现的最接近的问题是这个:https://gis.stackexchange.com/questions/226056/postgis-how-to-split-a-polyline-into-straight-segments但它适用于PostGIS。
我遇到了同样的问题,我正在使用 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]))