地图与导航(QML)

地图和导航提供QtQuick 用户界面类型,用于在地图上显示地理信息,并允许用户与地图覆盖对象和显示本身进行交互。它还包含用于地理编码(从街道地址查找地理坐标)和导航(包括驾驶和步行导航)的实用程序。

要进行导航,我们需要从起点到目的地的routes。这些路线由路段组成,其中每个routeSegment 可视为一个导航子任务;例如,"行驶 100 米 "或 "左转"。每个路段的起点和终点都是一个航点,即行程的一部分。

该应用程序接口的一个典型用例是用户在寻找特定类型的地点,如餐馆;用户在地图应用程序中输入一个搜索字符串,就会看到设备 "附近 "餐馆的搜索结果列表。然后,就可以使用该应用程序根据环境中可能有助于或阻碍旅程的特征优化路线,导航到所选目的地。然后,导航继续进行,并通过当前位置监控用户的进度。

这些类型基于QML 定位 API 中的 API 概念和类型。有关地图和导航类型的更多实践介绍,请参阅地图和导航教程

地图

显示地图

使用Map QML 类型可显示地图。地图类型通过MapView QML 类型支持用户交互。地图对象使用 OpenGL (ES) 在屏幕上绘制地图,可在可用的情况下进行硬件加速渲染。

关键类型

Plugin基于位置的服务插件提供包括地图数据在内的数据,然后将这些数据显示在地图对象中。
MapQtQuick 在屏幕上显示地图的项目。
MapView交互助手,用于在地图上平移、滑动和缩放手势。

请注意,客户端必须在使用Map 类型之前创建一个Plugin 对象,以便访问要显示的地图数据。

在地图上放置对象(地图覆盖对象)

地图还可以包含地图覆盖对象,用于在地图表面显示信息。有一套基本的预定义地图覆盖对象,也可以使用MapQuickItem 类型实现自定义地图覆盖对象,该类型可以包含任何标准的QtQuick 项目。

关键类型

MapCircle一个地理圆(所有点与圆心的距离都是固定的),可选择带边框。
MapRectangle矩形,其左上角和右下角的点指定为coordinate 类型,可选择带边框。
MapPolygoncoordinates 的任意列表组成的多边形。
MapPolylinecoordinates 的任意列表组成的折线。
MapQuickItem将任意QtQuick 项转化为地图覆盖对象。MapQuickItem 是指定自定义地图覆盖对象的使能器。

使用地图覆盖对象进行模型-视图设计

要根据QtQuick 模型(例如ListModel 项)的内容自动生成地图覆盖对象,可使用MapItemView 类型。它接受任何地图覆盖对象作为其委托,并且只能在Map 中创建。

关键类型

MapItemView根据模型提供的数据用地图覆盖对象填充地图。

与地图覆盖对象交互

地图覆盖对象的属性会影响其在显示屏上的外观,这些属性可以随时更改,而且许多属性还可以在动画中使用。基于坐标的地图叠加对象(如MapPolygonMapPolyline )的动画效果尚不可用。

地理编码--地址到坐标,反之亦然

地理编码是将地理坐标转换为地址,反之亦然。这种转换通常涉及将源数据发送到服务器,然后由服务器进行转换并返回结果,不过一些基于位置的服务提供商plugins 可能能够提供某些地理编码功能,而无需将数据发送到远程服务器。翻译的可用性和准确性通常取决于被翻译的位置或地址,因为地球上不同地区的地图准确度各不相同。

QML 中的地理编码查询使用GeocodeModel 类型执行。对于地址到坐标的查询,其query 属性可设置为Address 对象或包含要搜索的地址文本形式的字符串。要执行反向查询,可将同一属性设置为coordinate 。查询结果将显示在模型的内容中。

关键类型

Plugin基于位置的服务插件提供包括地理编码翻译结果在内的数据,这些数据通过GeocodeModel 公开给客户端。
GeocodeModel查询插件的地理编码翻译,并通过模型中的索引访问结果。
Address用于查询和地理编码结果的结构化地址。

请注意,客户端必须在使用GeocodeModel 对象之前创建Plugin 对象。这样才能访问地理编码翻译服务,从而显示数据。

路由和导航

路由是指在地图上确定从一点到另一点的可导航路径。如果地图上有桥梁、水道等有助于或阻碍导航的地物,那么就可以构建出一系列的航段。如果这些routeSegments 很简单,那么我们就可以在各段之间的连接点(routeManeuvers)上添加导航信息。

关键类型

route整个导航路径。
routeSegment路线的各个组成部分。
routeManeuver连接路段的导航信息。
RouteModel向后台请求提供路线信息的方式。

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