HarmonyOS 地图服务:深度解析其丰富功能与精准导航实力

关于作者白晓明宁夏图尔科技有限公司董事长兼 CEO、坚果派联合创始人华为 HDE、润和软件 HiHope 社区专家、鸿蒙 KOL、仓颉 KOL 华为开发者学堂/51CTO 学堂/CSDN 学堂认证讲师开放原子开源基金会 2023 开源贡献之星 OpenHarmony 三方库贡献者公众号:开源开发者新视界(openwatcher)
在当今高度数字化时代,精准的地图服务已然成为我们日常生活与工作中不可或缺的重要组成部分。无论是日常出项规划路线,还是在工作中进行位置定位于导航,地图服务都发挥着关键作用。而 HarmonyOS 提供的地图服务(Map Kit)犹如一颗璀璨的明星,为开发者提供强大而便捷的地图能力,助力全球开发者实现个性化显示地图、位置搜索和路径规划等功能。地图服务(Map Kit)提供了全球 3.2 亿的 Poi(Point of interest,兴趣点),在地图中一个 Poi 代表一家商铺、一栋办公楼、一处景点等等。其强大的功能涵盖创建地图、地图交互、在地图上绘制、位置搜索、路径规划、静态图、地图 Picker、通过 Petal 地图应用实现导航等能力、地图计算工具等等,为用户提供了全方位的地图服务体验。具有广泛的应用场景,如物流配送、旅游出行、智能交通等等。
在接下来的内容中,将深入且全面地阐述地图服务所具备的创建地图这一重要功能。通过逐步剖析创建地图功能的具体实现方式,从技术层面解读其背后的原理和机制,深入探讨这一功能在不同场景下的实际应用价值,为开发者在实际应用中更好地利用这一功能提供有力的支持和指导。
前期准备
实际应用开发中,当你打算使用地图服务(Map Kit)时,首先需要在AppGallery Connect平台上创建相应的应用。在创建完成后,要准确地获取“项目设置 > 常规 > 应用”的 Client ID,这里需要特别注意的是,一定不能获取项目的 Client ID,两者有着明确的区分。获取正确的 Client ID 之后,接下来要在工程entry
模块的module.json5
文件中进行特定的操作。具体而言,就是要在这个文件中新增metadata
,将其配置为name
属性设置为client_id
,value
属性为获取到的 Client ID 值。

当完成 Client ID 的配置工作后,接下来还需要在 AppGallery Connect 平台该应用的“项目设置 > API 管理”板块中打开地图服务开关。

除了满足以上两个条件,还需要为应用添加公钥指纹,才能够确保地图服务(Map Kit)在应用中正常使用和发挥其强大的功能。
在 DevEco Studio 中使用自动签名,对应用进行签名。

在 AppGallery Connect 平台“项目设置 > 常规 > 应用”下的 SHA256 证书/公钥指纹中添加公钥指纹,勾选证书名称为
auto_debug_xxxx
的证书。


打造个性化地图:聚焦创建地图功能
HarmonyOS 为开发者和用户带来了强大的地图功能支持,其中包括地图组件MapComponent
以及地图组件的主要功能入口类MapComponentController
。
MapComponent
在整个体系中扮演着至关重要的角色,它能够在应用程序的页面中以直观、清晰的方式呈现地图。无论是在导航类应用中为用户指引方向,还是在生活服务类应用中展示周边的地理信息,MapComponent
都能发挥出其独特的优势,将丰富的地图内容呈现在用户眼前。
而MapComponentController
则作为地图操作的核心枢纽,承担着众多关键任务。它可以实现地图类型的灵活切换,比如在标准地图和空地图之间自由切换,以满足不同场景下的需求。同时,还能够精确地改变地图状态,通过调整中心点坐标和缩放级别,让用户可以聚焦于特定的区域,获取更详细的地理信息。此外,MapComponentController
还支持添加点标记(Marker
),可以在地图上标注出重要的地点,方便用户识别和定位。不仅如此,它还能绘制各种几何图形,如MapPolyline
(地图折线)、MapPolygon
(地图多边形)、MapCircle
(地图圆形)等,为用户提供更加丰富的可视化效果。最后,MapComponentController
还能监听各类事件,及时响应用户的操作和地图状态的变化,为用户带来更加流畅和智能的交互体验。
接下来,我将和大家一起踏上探索之旅,逐步深入地掌握创建地图功能中一系列重要的操作。首先是如何在应用中成功地显示地图,让丰富的地理信息以清晰直观的形式呈现在我们的眼前。接着,我们将学习如何切换地图类型,无论是标注地图的详细呈现,还是简洁的空地图模式,都能根据实际需求灵活切换。然后,我们还会掌握显示自己位置的方法,以便在任何时候都能准确知晓自己所处的方位。最后,我们将深入了解如何显示自定义地图,根据特定的场景和需求,打造独一无二的地图展示效果,满足个性化的使用需求。
导入Map Kit
相关模块
通过MapOptions
初始化地图
新建地图需要传入MapOptions
参数,MapOptions
提供MapComponent
组件初始化的属性,用于设置诸如地图中心点坐标、层级等。
mapOptions
:地图初始化参数
mapCallback
:回调函数,返回map.MapComponentController
切换地图类型
Map Kit
支持以下三种地图类型:
STANDARD
:标准地图,展示道路、建筑物以及河流等重要的自然特征。NONE
:空地图,没有加载任何数据的地图。TERRAIN
:地形图。

设置地图中心点及层级

展示定位按钮

展示比例尺

指定地图的日间夜间模式
通过MapComponentController
对象方法控制地图
切换地图类型
除在地图初始化时指定地图类型外,还可以通过MapComponentController
对象的setMapType
方法在地图创建后动态设置地图类型。
开启 3D 建筑图层
调用MapComponentController
对象的 setBuildingEnabled 方法开启 3D 建筑图层,可通过两个手指向上滑动倾斜地图查看 3D 建筑图层效果。

在指定的持续时间内以动画的形式更新相机状态

在指定的持续时间内以动画的形式更新相机状态,并返回动画结果

设置地图的日间夜间模式
除在地图初始化时指定地图的日间夜间模式,还可以通过MapComponentController
对象的setDayNightMode
方法在地图创建后动态设置地图的日间夜间模式。

地图前后切换
地图不显示异常排查和处理
检查网络状态,设备是否已经正确联网。
检查 AppGallery Connnect 平台应用是否已经添加公钥指纹,如果重新进行自动签名,需要重新添加公钥指纹,公钥指纹变更后 10 分钟后生效。
检查
module.json5
配置文件中是否配置 Client ID。检查 AppGallery Connect 平台是否开通地图权限,权限开通存在延迟。
版权声明: 本文为 InfoQ 作者【白晓明】的原创文章。
原文链接:【http://xie.infoq.cn/article/c6fd4299cf12f9a7aa8d687aa】。文章转载请联系作者。
评论