PyQGIS中如何从提取图层获取坐标作为最短路径起点?
PyQGIS最短路径START_POINT参数设置解决方案
问题根源
模型构建器导出的代码中,outputs['NvtObjekt']['OUTPUT']返回的是图层ID字符串,而非QGIS图层对象,直接访问属性自然会报str object has no attribute...错误。
可行写法
方法1:先转为图层对象再提取坐标
先把输出的图层ID转为QgsVectorLayer对象,再提取字段值构建起点:
# 从outputs中获取图层ID并转为图层对象 start_layer = QgsProject.instance().mapLayer(outputs['NvtObjekt']['OUTPUT']) # 获取第一个要素(所有要素坐标一致,取一个即可) first_feature = next(start_layer.getFeatures()) # 提取X、Y字段值(注意字段名要和你的图层完全匹配) start_x = first_feature['X'] start_y = first_feature['Y'] # 构建起点PointXY对象 start_point = QgsPointXY(start_x, start_y) # 调用最短路径工具时传入该对象 processing.run("native:shortestpathpointtopoint", { # 其他必填参数(如网络图层、终点等) 'START_POINT': start_point, # ... })
方法2:直接在参数中内嵌表达式(简化版)
如果不想单独写变量,可以直接在processing.run的参数里完成转换:
processing.run("native:shortestpathpointtopoint", { # 其他参数 'START_POINT': QgsPointXY( float(next(QgsProject.instance().mapLayer(outputs['NvtObjekt']['OUTPUT']).getFeatures())['X']), float(next(QgsProject.instance().mapLayer(outputs['NvtObjekt']['OUTPUT']).getFeatures())['Y']) ), # ... })
注意事项
- 确保
X和Y字段是数值类型(整数/浮点),如果是字符串类型,必须用float()转换 - 起点坐标的CRS必须和路径网络图层的CRS一致,若不一致需用
QgsCoordinateTransform转换坐标 - 因为你提到所有要素坐标一致,用
next()取第一个要素即可,无需遍历全部要素
内容的提问来源于stack exchange,提问作者Tom moT
相关产品推荐
相关产品推荐

