Sur cette page

Carte des lieux (QML)

L'exemple de carte des lieux montre comment rechercher et afficher une liste de lieux sur une carte à l'aide de MapItemView.

L'exemple affiche une carte de la position actuelle ou, si aucune position n'est disponible, il utilise Oslo/Norvège. Ensuite, une recherche de lieux correspondant au terme "food" est effectuée et chaque résultat est affiché sur la carte.

Exécution de l'exemple

Pour exécuter l'exemple à partir de Qt CreatorOuvrez le mode Welcome et sélectionnez l'exemple à partir de Examples. Pour plus d'informations, voir Qt Creator: Tutoriel : Construire et exécuter.

Pour écrire l'application QML qui affichera les lieux sur une carte, nous commençons par faire les déclarations d'importation suivantes.

import QtQuick
import QtPositioning
import QtLocation

Instanciation d'une instance de Plugin. Le Plugin est en fait le backend à partir duquel les lieux sont sourcés. Selon le plugin choisi, certains paramètres obligatoires peuvent être nécessaires. Dans le cas présent, nous avons choisi le plugin OSM qui n'a pas de paramètres obligatoires.

Plugin {
    id: myPlugin
    name: "osm"
    //specify plugin parameters if necessary
    //PluginParameter {...}
    //PluginParameter {...}
    //...
}

Ensuite, nous instançons un site PlaceSearchModel que nous pouvons utiliser pour spécifier les paramètres de recherche et effectuer une opération de recherche de lieux. À des fins d'illustration, update() est invoqué une fois la construction du modèle terminée. En règle générale, update() est invoqué en réponse à une action de l'utilisateur telle qu'un clic sur un bouton.

PlaceSearchModel {
    id: searchModel

    plugin: myPlugin

    searchTerm: "food"
    searchArea:  QtPositioning.circle(positionSource.lastSearchPosition, 1000 /* 1 km radius */)
    Component.onCompleted: update()
}

La carte est affichée en utilisant le type MapView et, à l'intérieur, nous déclarons le type MapItemView et fournissons le modèle de recherche et un délégué. Un délégué en ligne a été utilisé et nous avons supposé que chaque résultat de recherche est de type type PlaceSerachesult . Par conséquent, nous supposons que nous avons toujours accès à l'endroit role, d'autres types de résultats de recherche peuvent ne pas avoir d'endroit role.

MapView {
    id: view
    anchors.fill: parent
    map.plugin: myPlugin;
    map.center: positionSource.lastSearchPosition
    map.zoomLevel: 13

    MapItemView {
        model: searchModel
        parent: view.map
        delegate: MapQuickItem {
            coordinate: place.location.coordinate

            anchorPoint.x: image.width * 0.5
            anchorPoint.y: image.height

            sourceItem: Column {
                Image { id: image; source: "marker.png" }
                Text { text: title; font.bold: true }
            }
        }
    }
}

Enfin, un site PositionSource est utilisé pour réinitialiser la carte à l'emplacement actuel et trouver des lieux "alimentaires" dans la nouvelle zone. Les informations relatives à la position sont mises à jour toutes les 2 minutes et si la nouvelle position est éloignée de plus de 500 mètres de la dernière zone de recherche de nourriture, la recherche de lieux est redéclenchée.

PositionSource {
    id: positionSource
    property variant lastSearchPosition: QtPositioning.coordinate(59.93, 10.76) //Initialized/Fallback to Oslo
    active: true
    updateInterval: 120000 // 2 mins
    onPositionChanged:  {
        var distance = lastSearchPosition.distanceTo(position.coordinate)
        if (distance > 500) {
            // 500m from last performed food search
            lastSearchPosition = positionSource.position.coordinate
        }
    }
}

Exemple de projet @ code.qt.io

© 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.