在QT,QML,C++中清除路线和获取航路点

7eumitmz  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(274)

我有两个问题,这两个问题在某种程度上是相关的。
1.我已经在一张开放的街道Map上创建了一条路线,我想提取一个点列表,这些点对应于生成的路线的沿途点(不仅仅是起点和终点)。如何实现这一点?例如,我想从下图中提取生成的红色路线的沿途点(当然,我不想提取路线中的所有点,而是从10米中的10个点提取)。

1.如何删除生成的红色路线,并保留原来的Map(没有红色路线)我已经尝试了许多功能的Map项目,但没有一个工作。例如,我已经尝试了下面的代码,但红色路线仍然存在。

function clearMapDataForSession()
 {
    mapview.clearData();
    routeModel.update()
 }
u5rb5r59

u5rb5r591#

你可以通过使用path或segments属性从Route中得到coordinates的列表。path属性直接给你一个Route上的coordinates的列表,另一方面,segments属性给你一个RouteSegments的列表,而RouteSegments的列表又包含了path属性给出的coordinates的列表。
通过segments打印Route坐标列表:

var segments = routeModel.get(0).segments
for (var i = 0; i < segments.length; i++) {
    var path = segments[i].path
    for (var j = 0; j < path.length; j++)
        console.log(path[j])
}

通过path打印Route坐标列表:

var path = routeModel.get(0).path
for (var i = 0; i < path.length; i++) {
    console.log(path[i])
}

如果比较两个选项给出的坐标列表,它们是相同的。RouteSegments的好处是你可以将线段的distance作为一个属性。因此,如果你想在Route上生成一个相同距离的坐标/点列表,这将有助于你编写某种算法。
为了擦除生成的Route,您需要在RouteModel上调用reset()。如果您还想清除RouteQuery的航点,则还应调用clearWaypoints()

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import QtLocation 5.15
import QtPositioning 5.15

ApplicationWindow {
    id: window
    width: 800
    height: 600
    visible: true
    title: qsTr("Map")

    header: ToolBar {
        RowLayout {
            anchors.fill: parent
            ToolButton {
                text: qsTr("Reset")
                onClicked: {
                    routeQuery.clearWaypoints()
                    routeModel.reset()
                }
            }
        }
    }

    Plugin {
        id: mapPlugin
        name: "osm"
    }

    RouteQuery {
        id: routeQuery
    }

    RouteModel {
        id: routeModel
        plugin: mapPlugin
        query: routeQuery
        autoUpdate: false
    }

    Map {
        id: map
        anchors.fill: parent
        plugin: mapPlugin
        center: QtPositioning.coordinate(59.91, 10.75) // Oslo
        zoomLevel: 14

        MapItemView {
            model: routeModel
            delegate: MapRoute {
                route: routeData
                line.color: "blue"
                line.width: 5
                smooth: true
                opacity: 0.8
            }
        }

        MapItemView {
            model: routeModel.status == RouteModel.Ready ? routeModel.get(0).path : null
            delegate: MapQuickItem {
                anchorPoint.x: pathMarker.width / 2
                anchorPoint.y: pathMarker.height / 2
                coordinate: modelData

                sourceItem: Rectangle {
                    id: pathMarker
                    width: 8
                    height: 8
                    radius: 8
                    border.width: 1
                    border.color: "black"
                    color: "yellow"
                }
            }
        }

        MapItemView {
            model: routeQuery.waypoints
            delegate: MapQuickItem {
                anchorPoint.x: waypointMarker.width / 2
                anchorPoint.y: waypointMarker.height / 2
                coordinate: modelData

                sourceItem: Rectangle {
                    id: waypointMarker
                    width: 10
                    height: 10
                    radius: 10
                    border.width: 1
                    border.color: "black"
                    color: "red"
                }
            }
        }

        MouseArea {
            anchors.fill: parent
            onClicked: {
                routeQuery.addWaypoint(map.toCoordinate(Qt.point(mouse.x,mouse.y)))
                routeModel.update()
            }
        }
    }
}

相关问题