位置地图(QML)
位置地图示例演示了如何使用 MapItemView 在地图上搜索和显示位置列表。
示例显示当前位置或如果没有位置可用,则使用奥斯陆/挪威的地图。之后执行与术语“食物”匹配的位置搜索,并将每个结果显示在地图上。
运行示例
要从 Qt Creator 运行此示例,请打开 欢迎 模式并从 示例 中选择示例。有关更多信息,请访问构建和运行示例。
本地搜索
要编写显示地图上位置的 QML 应用程序,我们首先进行以下导入声明。
import QtQuick import QtPositioning import QtLocation
实例化一个 Plugin 实例。该 Plugin 事实上是从其中获取位置的后端。根据选择的插件可能需要一些必需的参数。在本例中选择了 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,并供应搜索模型和代理。这里使用了内联代理,并且假设每个搜索结果都是 类型 PlaceSerachesult
。因此,假设我们始终可以访问 place 角色,其他搜索结果类型可能没有 place 角色。
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 } } }
© 2024 The Qt Company Ltd. 本文档贡献的版权归其各自的所有者。本提供的文档是在 GNU 自由文档许可证版本 1.3 下的,该许可证由自由软件基金会发布。Qt 和相应的徽标是 The Qt Company Ltd. 在芬兰和/或世界其他国家的 商标。所有其他商标均为其各自所有者的财产。