本页内容

QML 位置 API

概述

“地点”API 允许用户发现感兴趣的地点并查看其详细信息,例如地址和联系方式。某些地点可能还关联有其他内容,例如图片和评论。 “地点”API 还允许您管理地点和类别,以便保存或删除它们。地点信息中可能包含路径、道路或交通方式,从而实现导航优化和辅助功能。有关导航的更多信息,请参阅routes。

入门概念

插件

Plugin 是后端的抽象表示。一个Plugin 可能从 REST 服务器获取地点,而另一个则可能从本地数据库获取地点。以下代码通过提供名称“osm”来实例化一个Plugin 对象。Plugin 名称用于标识应选择哪个后端。 插件还可以提供一组parameters ,其本质上是一组键值对。可以指定的parameters 在不同的Plugin 后端之间有所不同。有关可能的parameters 以及每个Plugin 的细微差别,请参阅《插件参考》。

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

模型、视图和代理

QML Places API 基于模型、视图和委托的概念构建。

模型模型用于存储数据项并维护其结构。模型还负责从数据源中检索数据项。
视图视图是一个可视化容器,用于显示数据并管理可视化项的呈现方式(例如以列表或网格形式显示)。视图还可能负责数据导航,例如在轻扫手势期间滚动浏览可视化项。
委托委托定义了单个数据元素应如何作为可视化项在视图中呈现。模型公开了一组数据角色,委托利用这些角色来构建可视化项。委托还可以定义行为,例如在点击可视化项时调用的操作。

下文的“常见用例”部分通过具体示例展示了这些概念如何相互配合。

常见用例

搜索地点

搜索是通过PlaceSearchModel 实现的。plugin 属性指定用于执行搜索操作的后端。可以通过searchTerm 和searchArea 等属性提供搜索参数。随后,可以通过调用update()方法来启动搜索操作。 为简化起见,下面的代码片段在模型构建完成后立即调用update(),通常情况下,update()会在响应用户操作(如点击按钮)时被调用。在搜索操作进行期间,PlaceSearchModel::status 属性会过渡到Loading 状态,成功完成后则转为Ready 状态。

PlaceSearchModel {
    id: searchModel

    plugin: myPlugin

    searchTerm: "food"
    searchArea: QtPositioning.circle(startCoordinate, 5000 /* 5 km radius */);

    Component.onCompleted: update()

}

使用 ListView 显示搜索结果

可以使用ListView 来显示模型查找到的搜索结果。它定义了显示结果的视觉区域,在下例中,该区域填满了其父控件的全部空间。ListView 具有内置行为,使该区域能够响应轻扫事件并进行相应的滚动。

在下面的代码片段中,搜索模型已被赋值给ListView 的model 属性。当模型更新为新结果时,ListView 会自动更新以反映模型中的新数据项。

一个简单的委托已被绑定到ListView 的delegate 属性上。PlaceSearchModel 公开了一组roles ,其中标题和 地点角色在下文中被使用,它们的类型分别是string和Place 。本质上,对于每个应在视图中显示的数据项,视图都会调用该委托来创建该项的视觉表示。

ListView {
    anchors.fill: parent
    model: searchModel
    delegate: Component {
        Row {
            spacing: 5
            Marker { height: parent.height }
            Column {
                Text { text: title; font.bold: true }
                Text { text: place.location.address.text }
            }
        }
    }
}
披萨店编号列表

注意:为 简化起见, 我们假设每个搜索结果均为type PlaceSearchResult 类型,因此始终可访问place角色;其他类型的搜索结果可能不具备place角色。

请参阅“地点列表”示例以获取完整的源代码。

使用 MapItemView 显示搜索结果

除了ListView 之外,还可以将PlaceSearchModel 与MapItemView 结合使用,在地图上显示标记。首先,使用Map 来定义地图所占用的视觉区域,在此示例中,它填满了其父元素的整个区域。还指定了其他属性,例如提供地图的plugin ,以及地图的center 和zoomLevel 。

在Map 内部,声明了一个MapItemView ,其中model 属性已设置为搜索模型,并使用由MapQuickItem 组成的delegate 来显示标记图像。搜索模型找到的每个地点都会显示一个标记。该委托使用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 }
            }
        }
    }
}
带有标注地点标记的地图

注意:为 简化起见,我们假设每个搜索结果都属于type PlaceSearchResult ,因此始终可以访问“地点”角色;其他类型的搜索结果可能不具备“地点”角色。

请参阅“地点地图”示例以获取完整的源代码。

获取地点详情

为了节省带宽,后端有时只会返回部分详情已填充的地点。可通过Place::detailsFetched 属性检查此情况,该属性指示是否已获取所有可用详情。若未获取完,可调用Place::getDetails()方法来获取剩余详情。

if (!place.detailsFetched)
    place.getDetails();

保存和删除地点

某些后端可能支持保存和删除地点。这可通过分别调用Place::save()和Place::remove()方法来实现。 请注意,要保存一个 `Place`,必须指定一个 `Plugin ` 来指定保存的目标后端。在保存操作进行期间,`status ` 属性将转为 `Saving ` 状态;成功完成后,将转为 `Ready ` 状态。以下代码片段演示了如何使用 JavaScript 保存和删除地点。

//creating and saving a place
var place = Qt.createQmlObject('import QtLocation; Place { }', parent);
place.plugin = myPlugin;
place.name = "New York";
place.location.coordinate.latitude = 40.7
place.location.coordinate.longitude = -74.0
place.save();

//removing a place
place.remove();

了解更多

上述代码片段仅展示了 Places 功能的一小部分。请参考下方的Places 类型,以获取更丰富的内容(如images 、reviews 等),以及更深入的描述和说明。

另请参阅“地点(QML)”示例,了解有关如何使用该 API 的更全面演示。

地点类型

数据类型

Category

类型代表“地点”可关联的类别

ContactDetails

“类型”包含“地点”的联系详情

ExtendedAttributes

“类型”包含关于“地点”的附加数据

Place

类型代表一个值得关注的地点

contactDetail

“类型”包含联系信息,例如电话号码或网站地址

icon

“类型”代表一个地点的图标

placeAttribute

“类型”包含地点的通用属性信息

ratings

“类型”包含地点的评分信息

supplier

包含有关场所供应商、场所图片、评论或编辑内容的数据

user

类型标识了贡献特定地点内容条目的用户

模型

CategoryModel

类型提供了一个插件所支持的分类模型

EditorialModel

类型提供地点编辑内容的模型

ImageModel

“类型”提供地点图片的模型

PlaceSearchModel

提供对地点搜索结果的访问

PlaceSearchSuggestionModel

提供对搜索词建议的访问

ReviewModel

Type 提供地点评论的模型

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