地名マップ (QML)

Places Mapの例では、MapItemView を使って地図上の場所を検索し、そのリストを表示する方法を示します。

この例では、現在地の地図を表示し、現在地がない場合はオスロ/ノルウェーを使用しています。その後、"food "という用語にマッチする場所の検索が実行され、それぞれの結果が地図上に表示されます。

例を実行する

Qt Creator からサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳しくは、Building and Running an Example をご覧ください。

地図上に場所を表示するQMLアプリケーションを書くために、まず以下のインポート宣言を行います。

import QtQuick
import QtPositioning
import QtLocation

PluginPlugin は事実上、場所の情報源となるバックエンドです。選択したプラグインによっては、いくつかの必須パラメーターが必要になる。この場合は、必須のパラメータを持たないOSMプラグインを選択する。

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

次に、PlaceSearchModel をインスタンス化する。このインスタンスを使って、検索パラメータを指定し、場所の検索を実行することができる。説明のために、update ()はモデルの構築が完了すると呼び出される。通常、update ()は、ボタンクリックなどのユーザーアクションに応じて呼び出されます。

PlaceSearchModel {
    id: searchModel

    plugin: myPlugin

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

マップはMapView 型を使って表示され、その内部でMapItemView を宣言し、検索モデルとデリゲートを提供する。インラインのデリゲートが使用されており、すべての検索結果はtype PlaceSerachesult のものであると仮定している。その結果、私たちは常にrole という場所にアクセスできると仮定しています。他の検索結果タイプは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 }
            }
        }
    }
}

最後に、PositionSource を使って、地図を現在の場所にリセットし、新しいエリアで「食べ物」の場所を見つける。位置情報は2分ごとに更新され、新しい位置が最後の食品検索エリアから500メートル以上離れている場合、場所検索は再トリガーされる。

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
        }
    }
}

プロジェクト例 @ code.qt.io

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。