代码功能分析总结
文件名称:MapPage.ets
该文件实现了一个基于HarmonyOS的地图页面功能,主要实现了地图的初始化、路径绘制、实时定位以及背景任务管理等功能。以下是具体功能模块的分析:
1. 地图初始化
- 核心组件:
MapComponent
- 初始化参数:
- 设置地图中心点坐标和缩放层级。
- 禁用缩放控件(
zoomControlsEnabled: false
)。
- 回调函数:
- 地图加载完成后,启用“我的位置”图层和按钮。
- 自定义“我的位置”图标样式。
- 添加一个初始标记(
Marker
)用于标识起点。 - 创建并绘制初始的多段线(
Polyline
),用于显示路径。
2. 路径绘制
- 方法:
drawPolyline
- 功能:
- 根据
locationList
中的经纬度坐标更新“我的位置”。 - 动态更新多段线的路径点,确保路径能够实时反映用户的移动轨迹。
- 根据
3. 实时定位
- 方法:
startLocateContinuousTask
- 功能:
- 启动后台任务以持续获取用户位置。
- 配置定位请求参数(如优先级、时间间隔等)。
- 监听
locationChange
事件,实时获取用户的地理位置。 - 在定位成功后调用
initMap
方法初始化地图。
4. 定位回调处理
- 方法:
locationChange
- 功能:
- 将获取到的WGS84坐标转换为GCJ02坐标。
- 将新的坐标点添加到
locationList
中。 - 实时计算两点之间的距离,并累加到总运动距离
distance
中。
5. 页面生命周期管理
- 方法:
aboutToAppear
- 调用
startLocateContinuousTask
方法启动定位服务。
- 调用
- 方法:
aboutToDisappear
- 停止卫星状态监听和位置变化监听。
- 停止后台任务运行。
6. UI布局
- 使用
Stack
布局容器。 - 在布局中嵌入
MapComponent
组件,占据整个页面宽度和高度。
7. 依赖的外部模块
- 地图模块:
@kit.MapKit
- 基础服务模块:
@kit.BasicServicesKit
- 定位模块:
@kit.LocationKit
- 后台任务模块:
@kit.BackgroundTasksKit
- 能力模块:
@kit.AbilityKit
完整代码 MapPage.ets 图标路径自行替换
import {
MapComponent, mapCommon, map } from '@kit.MapKit';
import {
AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
import {
geoLocationManager } from '@kit.LocationKit';
import {
backgroundTaskManager } from '@kit.BackgroundTasksKit';
import {
WantAgent, wantAgent } from '@kit.AbilityKit';
const TAG = "SportMap";
@Entry
@Component
struct MapPage {
// 路径坐标
@State locationList: mapCommon.LatLng[] = []
// 运动距离
@State distance: number = 0
private mapOptions?: mapCommon.MapOptions;
private callback?: AsyncCallback<map.MapComponentController>;
private mapController?: map.MapComponentController;
private mapEventManager?: map.MapEventManager;
private mapPolyline?: map.MapPolyline;
@State locationsIndex:number = 0
async aboutToAppear() {
this.startLocateContinuousTask(