news 2026/7/17 1:19:28

鸿蒙原生开发手记:徒步迹 - MapKit 地图组件集成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙原生开发手记:徒步迹 - MapKit 地图组件集成

鸿蒙原生开发手记:徒步迹 - MapKit 地图组件集成

集成鸿蒙地图服务,实现路线展示和位置定位


一、前言

地图是徒步 App 的核心功能。鸿蒙提供了 MapKit 地图组件,支持地图展示、标记、路线绘制、定位等功能。


二、准备工作

2.1 申请 API Key

在华为开发者联盟 -> App Services -> 地图服务 中申请 API Key。

2.2 配置权限

// module.json5 { "requestPermissions": [ { "name": "ohos.permission.LOCATION", "reason": "用于记录徒步轨迹和显示当前位置" }, { "name": "ohos.permission.APPROXIMATELY_LOCATION", "reason": "用于记录徒步轨迹和显示当前位置" }, { "name": "ohos.permission.INTERNET", "reason": "加载地图数据" } ] }

2.3 配置 API Key

// build-profile.json5 { "app": { "hms": { "apiKey": "your_api_key_here" } } }

三、基础地图组件

3.1 显示地图

import { MapComponent, MapOptions, MapView } from '@kit.MapKit'; @Entry @Component struct MapPage { private mapOptions: MapOptions = { center: { // 初始中心点 lat: 39.908, lng: 116.397, }, zoom: 15, // 缩放级别 tilt: 0, // 倾斜角度 }; build() { Column() { // 地图组件 MapComponent({ mapOptions: this.mapOptions, onMapReady: (map: MapView) => { console.log('地图加载完成'); }, }) .width('100%') .height('100%'); } } }

3.2 添加标记

onMapReady(map: MapView): void { // 添加标记 map.addMarker({ position: { lat: 39.908, lng: 116.397 }, title: '当前位置', snippet: '徒步起点', icon: 'marker_icon', // 自定义图标 draggable: false, }); // 批量添加标记 map.addMarkers([ { position: { lat: 39.910, lng: 116.400 }, title: '观景台', }, { position: { lat: 39.915, lng: 116.405 }, title: '山顶', }, ]); }

四、路线绘制

4.1 绘制轨迹线

function drawPolyline(map: MapView, points: Coordinate[]): void { // 将坐标点转换为地图坐标 const path = points.map(p => ({ lat: p.latitude, lng: p.longitude, })); // 绘制折线 map.addPolyline({ path: path, strokeWidth: 6, strokeColor: '#4CAF50', strokeAlpha: 0.8, lineCap: 'round', lineJoin: 'round', }); }

4.2 显示海拔范围

function showElevationRange(map: MapView, points: Coordinate[]): void { const altitudes = points.map(p => p.altitude); const minAlt = Math.min(...altitudes); const maxAlt = Math.max(...altitudes); map.addInfoWindow({ position: { lat: points[0].latitude, lng: points[0].longitude, }, title: `海拔范围: ${minAlt}m - ${maxAlt}m`, }); }

五、当前位置定位

import { geoLocationManager } from '@kit.LocationKit'; async function getCurrentLocation(): Promise<{ lat: number; lng: number; }> { try { // 请求定位 const location = await geoLocationManager.getCurrentLocation({ priority: 0x201, // 高精度定位 timeoutMs: 10000, // 超时 }); return { lat: location.latitude, lng: location.longitude, }; } catch (err) { console.error('定位失败:', err); throw err; } } // 在地图上显示当前位置 async function showMyLocation(map: MapView): Promise<void> { try { const pos = await getCurrentLocation(); // 移动地图中心到当前位置 map.moveCamera({ target: { lat: pos.lat, lng: pos.lng }, zoom: 16, duration: 500, }); // 添加当前位置标记 map.addMarker({ position: { lat: pos.lat, lng: pos.lng }, title: '我的位置', icon: 'current_location_icon', }); } catch (err) { console.error('显示位置失败:', err); } }

六、实战:徒步迹首页地图

@Component struct HomeMapView { private mapView!: MapView; build() { Column() { MapComponent({ mapOptions: { center: { lat: 39.908, lng: 116.397 }, zoom: 14, mapType: MapType.NORMAL, // 普通地图 }, onMapReady: (map: MapView) => { this.mapView = map; this.initMap(); }, }) .width('100%') .height(200) .borderRadius(16); } .padding(16); } initMap(): void { // 添加附近路线标记 this.addNearbyRoutes(); } addNearbyRoutes(): void { const routes = [ { lat: 39.910, lng: 116.400, name: '香山环线' }, { lat: 39.920, lng: 116.390, name: '植物园路线' }, ]; for (let route of routes) { this.mapView.addMarker({ position: { lat: route.lat, lng: route.lng }, title: route.name, }); } } }

七、总结

MapKit 组件让在鸿蒙 App 中集成地图变得简单。从基础地图显示、标记添加到路线绘制和定位,这些能力构成了徒步迹轨迹记录和路线展示的基础。

下一篇文章将继续优化地图体验,实现自定义标记和气泡弹窗。


下一篇预告:鸿蒙原生开发手记:徒步迹 - 自定义地图标记与气泡弹窗

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 1:18:59

Windows10系统U盘制作与安装全指南

1. Windows10系统U盘制作全攻略 上周帮朋友重装系统时&#xff0c;发现很多人还在花钱找人装系统。其实用U盘制作Windows10安装盘特别简单&#xff0c;自己动手10分钟就能搞定。这个技能不仅能省下50-100元的装机费&#xff0c;关键时刻还能救急。下面我就把多年装机总结的最稳…

作者头像 李华
网站建设 2026/7/17 1:18:22

Windows RuntimeBroker.exe进程解析与UWP权限管理

1. RuntimeBroker.exe进程深度解析RuntimeBroker.exe是Windows操作系统中一个关键的系统进程&#xff0c;主要负责管理Universal Windows Platform&#xff08;UWP&#xff09;应用程序的权限和沙盒环境。这个进程在Windows 8时代首次引入&#xff0c;当时被称为Metro应用&…

作者头像 李华
网站建设 2026/7/17 1:18:15

3分钟搞定Windows和Office激活难题:KMS_VL_ALL_AIO智能解决方案

3分钟搞定Windows和Office激活难题&#xff1a;KMS_VL_ALL_AIO智能解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office激活问题烦恼吗&#xff1f;KMS_VL_ALL_AIO智能…

作者头像 李华
网站建设 2026/7/17 1:14:40

FPGA数码管驱动:Nexys4-DDR开发板Verilog实战

1. Nexys4-DDR开发板数码管驱动实战解析Nexys4-DDR开发板作为Xilinx Artix-7系列FPGA的经典教学平台&#xff0c;其板载的4位7段数码管是验证数字逻辑设计的理想外设。本文将深入剖析数码管驱动的Verilog实现细节&#xff0c;从硬件原理到代码优化&#xff0c;手把手带你完成从…

作者头像 李华