Auf dieser Seite

QML-Karten

Übersicht

Der Typ „ Map “ ermöglicht die Anzeige einer Karte und das Platzieren von Objekten auf der Karte. Verschiedene Sehenswürdigkeiten können definiert und zur Anzeige auf der Karte hinzugefügt werden. Außerdem verfügt das „ Map “ über Funktionen zur Steuerung der Kartenanzeige. Mit dem „Map“-Element können Sie die Karte zentrieren, zoomen, mit zwei Fingern zoomen und das Element wischbar machen.

Die Orte, die der Karte hinzugefügt werden sollen, sind „MapItems“. Die Position des Elements wird durch ein „ geoCoordinate “ definiert, das Breitengrad, Längengrad und Höhe enthält. Das Element wird dann automatisch angezeigt, nachdem es dem „ Map “ hinzugefügt wurde.

Position auf der Karte

Alle Positions-APIs sind Teil des Moduls „ QtPositioning “. Die grundlegende Positionsinformation ist das „ geoCoordinate “. Ein „ geoCoordinate “ kapselt die Daten für Breitengrad, Längengrad und Höhe des Standorts. Die Höhe wird in Metern angegeben. Es gibt außerdem eine Methode zur Ermittlung der Entfernung zu einem anderen „ geoCoordinate “. Der Typ „ geoCoordinate “ kann ebenfalls in einem „ Location “-Element enthalten sein; dieses enthält zudem Informationen zur Größe eines Begrenzungsrahmens, um eine ausreichende Nähe zum Standort zu ermitteln, sowie eine Standortadresse.

Hier ist ein Beispiel für einen Client, der ein ` position source ` verwendet, um ein ` map ` auf die aktuelle Position zu zentrieren:

import QtPositioning
import QtLocation
...

Rectangle {

    Map {
        id: map
        // initialize map
        ...
    }

    PositionSource {
        onPositionChanged: {
            // center the map on the current position
            map.center = position.coordinate
        }
    }
}

Geokodierung

Geokodierung ist die Ableitung geografischer Koordinaten (Breiten- und Längengrad) aus anderen geografischen Referenzen zu den Standorten. Dies kann beispielsweise eine Straßenadresse sein. Auch eine umgekehrte Geokodierung ist möglich, bei der eine Straßenadresse zur Bestimmung einer geografischen Koordinate verwendet wird. Die Geokodierung erfolgt mithilfe des Typs „ GeocodeModel “.

Die folgenden Code-Beispiele sind ein kleiner Ausschnitt aus der Komponente „ map “ im Beispiel „Map Viewer (QML) “. Die Code-Schnipsel veranschaulichen die Deklaration der Komponente „ GeocodeModel “.

Im Codeausschnitt sehen wir, dass die ` GeocodeModel ` das Plugin sowie zwei Signal-Handler enthält. Einer dient zur Erkennung von Statusänderungen onStatusChanged und der andere zur Aktualisierung der Zentrierung des Map-Objekts onLocationsChanged.

GeocodeModel {
    id: geocodeModel
    plugin: view.map.plugin
    onStatusChanged: {
        if ((status == GeocodeModel.Ready) || (status == GeocodeModel.Error))
            view.geocodeFinished()
    }
    onLocationsChanged:
    {
        if (count === 1) {
            view.map.center.latitude = get(0).coordinate.latitude
            view.map.center.longitude = get(0).coordinate.longitude
        }
    }
}

MapItemView {
    parent: view.map
    model: geocodeModel
    delegate: pointDelegate
}

Die Geokodierungsfunktionen werden aus einem übergeordneten Codeabschnitt aufgerufen. In diesem Codeausschnitt sehen wir ein „ Address “-Objekt, das mit den gewünschten Parametern gefüllt ist.

Address {
    id :fromAddress
    street: "Sandakerveien 116"
    city: "Oslo"
    country: "Norway"
    state : ""
    postalCode: "0484"
}

Der „ Address “ wird später in einer Abfrage an die „ GeocodeModel “ verwendet, um die geografische „ coordinates “ zu verarbeiten und zu ermitteln.

// send the geocode request
geocodeModel.query = fromAddress
geocodeModel.update()

Eine sehr wichtige Funktion des Typs ` Map ` ist die Navigation von einem Ort zu einem Ziel mit möglichen Wegpunkten entlang der Route. Die Route wird in eine Reihe von Segmenten unterteilt. Am Ende jedes Segments befindet sich ein Knotenpunkt, der als Manöver bezeichnet wird. Die Segmente enthalten Informationen über die Zeit und die Entfernung bis zum Ende des Segments. Die Manöver enthalten Informationen darüber, was als Nächstes zu tun ist und wie man auf das nächste Segment gelangt, sofern es eines gibt. Ein Manöver enthält also Navigationsinformationen, zum Beispiel „jetzt rechts abbiegen“.

Um eine geeignete Route zu finden, müssen wir die Methode „ RouteQuery “ verwenden, um die Auswahlkriterien zu definieren und gegebenenfalls erforderliche Zwischenziele hinzuzufügen. Die Methode „ RouteModel “ sollte eine Liste von „ routeSegments“ zurückgeben, die die Route zum Ziel definieren, einschließlich Navigationshinweisen an den Übergängen zwischen den Segmenten, die als „ routeManeuvers“ bezeichnet werden.

Es gibt zahlreiche Optionen, die Sie der Abfrage hinzufügen können, um die Kriterien einzugrenzen. Zu den Eigenschaften von „ RouteQuery “ gehören unter anderem

numberAlternativeRoutesdie Anzahl der alternativen Routen
travelModesVerkehrsmittel
routeOptimizationsErforderliche Routenoptimierungen
segmentDetailDetaillierungsgrad der Streckenabschnitte
maneuverDetailDetaillierungsgrad bei Manövern zwischen den Segmenten
waypointsEine Liste von Wegpunkten
excludedAreasEine Liste der ausgeschlossenen Bereiche, die die Route nicht durchqueren darf
featureTypesRelevante Kartenmerkmale, zum Beispiel Autobahn, Fähre

Im folgenden Beispiel wird ein Standard- RouteQuery innerhalb von „ RouteModel “ deklariert.

RouteModel {
    id: routeModel
    plugin : view.map.plugin
    query:  RouteQuery {
        id: routeQuery
    }
    onStatusChanged: {
        if (status == RouteModel.Ready) {
            switch (count) {
            case 0:
                // technically not an error
                view.routeError()
                break
            case 1:
                view.showRouteList()
                break
            }
        } else if (status == RouteModel.Error) {
            view.routeError()
        }
    }
}

Der Benutzer gibt einige Informationen ein, wie beispielsweise den Startpunkt der Route, einige Wegpunkte und das Ziel. Alle diese Orte sind Wegpunkte, sodass die Orte vom Start bis zum Ziel als eine Abfolge von Wegpunkten eingegeben werden. Anschließend können weitere Abfrageeigenschaften festgelegt werden, die möglicherweise spezifisch für diese Fahrt sind.

// clear away any old data in the query
routeQuery.clearWaypoints();
// add the start and end coords as waypoints on the route
routeQuery.addWaypoint(startCoordinate)
routeQuery.addWaypoint(endCoordinate)
routeQuery.travelModes = RouteQuery.CarTravel
routeQuery.routeOptimizations = RouteQuery.FastestRoute
routeModel.update();

Das „ routeInfoModel “-ListModel wird verwendet, um die Ergebnisse der Abfrage abzurufen und eine geeignete Liste für die Anzeige zu erstellen.

ListView {
    interactive: true
    model: ListModel { id: routeInfoModel }
    header: RouteListHeader {}
    delegate:  RouteListDelegate{
        routeIndex.text: index + 1
        routeInstruction.text: instruction
        routeDistance.text: distance
    }
}

Das ListModel „ routeInfoModel “ kann mithilfe eines Codes mit Werten gefüllt werden, der die Segmente durchläuft und dabei die Segmentlänge, den Anweisungstext sowie die Entfernung zur nächsten Anweisung extrahiert. Die extrahierten Daten werden bei der Abfrage für die Anzeige formatiert.

routeInfoModel.clear()
if (routeModel.count > 0) {
    for (var i = 0; i < routeModel.get(0).segments.length; i++) {
        routeInfoModel.append({
            "instruction": routeModel.get(0).segments[i].maneuver.instructionText,
             "distance": Helper.formatDistance(routeModel.get(0).segments[i].maneuver.distanceToNextInstruction)
        });
    }
}

Weitere Informationen zu diesem Beispiel finden Sie im Beispiel „Map Viewer (QML) “.

Zoom, Pinch und Flick

Das Element „ Map “ unterstützt zudem Benutzerinteraktionen mit der Karte mittels Berührungs- und Mausgesten. Dazu gehören Funktionen wie Wischen zum Verschieben und Auf- und Zuziehen zum Zoomen.

Das Aktivieren und Konfigurieren von Pinch und Flickable ist innerhalb des Typs „ MapView “ ganz einfach.

MapView {
    id: view
TapHandler {
    id: tapHandler
    property variant lastCoordinate
    acceptedButtons: Qt.LeftButton | Qt.RightButton

    onPressedChanged: (eventPoint, button) => {
        if (pressed) {
            lastCoordinate = view.map.toCoordinate(tapHandler.point.position)
        }
    }

    onSingleTapped: (eventPoint, button) => {
            if (button === Qt.RightButton) {
                showMainMenu(lastCoordinate)
            }
    }

    onDoubleTapped: (eventPoint, button) => {
        var preZoomPoint = view.map.toCoordinate(eventPoint.position);
        if (button === Qt.LeftButton) {
            view.map.zoomLevel = Math.floor(view.map.zoomLevel + 1)
        } else if (button === Qt.RightButton) {
            view.map.zoomLevel = Math.floor(view.map.zoomLevel - 1)
        }
        var postZoomPoint = view.map.toCoordinate(eventPoint.position);
        var dx = postZoomPoint.latitude - preZoomPoint.latitude;
        var dy = postZoomPoint.longitude - preZoomPoint.longitude;

        view.map.center = QtPositioning.coordinate(view.map.center.latitude - dx,
                                                   view.map.center.longitude - dy);
    }
}
}

Das Zoomen kann auch über andere Objekte wie Schieberegler gesteuert werden, die an den „Map zoomLevel “ gebunden sind.

QML-Typen

Karten

GeoJsonData

Ein Modell zum Darstellen, Laden und Speichern von GeoJSON-Dokumenten

Map

Der Typ zeigt eine Karte an

MapCircle

Typ, der einen geographischen Kreis auf einer Karte anzeigt

MapCopyrightNotice

Das Element zeigt den aktuell gültigen Copyright-Hinweis für ein Kartenelement an

MapItemGroup

Der Typ ist ein Container für Kartenelemente

MapItemView

Wird verwendet, um eine Karte aus einem Modell zu füllen

MapPolygon

Der Typ zeigt ein Polygon auf einer Karte an

MapPolyline

Der Typ zeigt eine Polylinie auf einer Karte an

MapQuickItem

Der Typ zeigt ein beliebiges „ Qt Quick “-Objekt auf einer Karte an

MapRectangle

„Type“ zeigt ein Rechteck auf einer Karte an

MapRoute

Der Typ zeigt eine Route auf einer Karte an

cameraCapabilities

Der Typ enthält Informationen zu den Kamerafunktionen für einen bestimmten Kartentyp

mapType

Der Typ enthält Informationen über einen Kartentyp

Geokodierung

GeocodeModel

Der Typ bietet Unterstützung für Suchvorgänge im Zusammenhang mit geografischen Informationen

Routenplanung

RouteModel

Der Typ ermöglicht den Zugriff auf Routen

RouteQuery

Der Typ wird verwendet, um Abfrageparameter an ein RouteModel zu übergeben

route

Der Typ repräsentiert eine geografische Route

routeManeuver

Der Typ repräsentiert die Informationen, die für den Punkt relevant sind, an dem sich zwei „routeSegments“ treffen

routeSegment

Der Typ repräsentiert ein Segment einer Route

Beispiel

Die obigen Codeausschnitte stammen aus dem Beispiel „Map Viewer (QML) “.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.