华为HarmonyOS地图服务 4 - 通过“地图相机“控制地图的可见区域

news/2024/9/25 17:53:51/

场景介绍

华为地图的移动是通过模拟相机移动的方式实现的,您可以通过改变相机位置,来控制地图的可见区域,效果如图所示。

本章节将向您介绍相机的各个属性与含义,并移动相机。

相机移动前                                                                       

    

dffbd3d1ced5387ffd8dc3c80ff4b148.png

 

     

7c68ae198a25f0ae40ef3b5a5be8ab20.png

接口说明

您可以通过map命名空间下的moveCamera(update: CameraUpdate)方法、animateCamera(update: CameraUpdate, duration?: number)方法和animateCameraStatus(update: CameraUpdate, duration?: number)实现移动地图相机。方法入参CameraUpdate可通过以下方法创建。

接口名

描述

zoomTo(zoom: number): CameraUpdate

设置地图缩放级别。

zoomOut(): CameraUpdate

缩小地图缩放级别,在当前地图显示的级别基础上减1。

zoomIn(): CameraUpdate

放大地图缩放级别,在当前地图显示的级别基础上加1。

zoomBy(amount: number, focus?: mapCommon.MapPoint): CameraUpdate

根据给定增量并以给定的屏幕像素点为中心点缩放地图级别。

scrollBy(x: number, y: number): CameraUpdate

按像素移动地图中心点。

newLatLngBounds(bounds: mapCommon.LatLngBounds, padding?: number): CameraUpdate

设置地图经纬度范围;设置地图区域和边界之间的距离。

newLatLngBounds(bounds: mapCommon.LatLngBounds, width: number, height: number, padding: number): CameraUpdate

设置地图经纬度范围;设置经纬度矩形范围的屏幕高宽;设置地图区域和边界之间的距离。

newLatLng(latLng: mapCommon.LatLng, zoom?: number): CameraUpdate

设置地图的中心点和缩放层级。

newCameraPosition(cameraPosition: mapCommon.CameraPosition): CameraUpdate

更新地图状态。

开发步骤

相机移动

  1. 初始化地图并获取MapComponentController地图操作类对象。显示地图章节中有详细讲解。
  2. 导入模块。
    import { MapComponent, mapCommon, map } from '@kit.MapKit';
  3. 通过调用MapComponentController的moveCamera方法、animateCamera方法和animateCameraStatus方法,可实现移动地图相机。

    您可以选择以动画方式或非动画方式移动相机。

    1)动画方式移动相机时,您可以设置动画持续的时间。
    2)非动画方式移动相机是瞬时完成的。
// 创建CameraUpdate对象
let cameraPosition: mapCommon.CameraPosition = {
target: {
latitude: 32.0,
longitude: 118.0
},
zoom: 10,
tilt: 0,
bearing: 0
};
let cameraUpdate = map.newCameraPosition(cameraPosition);
// 以非动画方式移动地图相机
this.mapController.moveCamera(cameraUpdate);
// 以动画方式移动地图相机
this.mapController.animateCamera(cameraUpdate, 1000);
// 以动画方式移动地图相机,并返回动画结果
let animateResult = await this.mapController.animateCameraStatus(cameraUpdate, 1000);

      相机移动前后对比

 

  1. 7381b3e6dbce534edf5596af9c521bb9.png

    990bd82022ed7f15244aef18d4c7eae2.png

4. 您还可以通过以下方式创建CameraUpdate对象。

// 方式1:相机放大级数加1,保持其他属性不变
let cameraUpdate = map.zoomIn();
// 方式2:相机放大级数减1,保持其他属性不变
let cameraUpdate1 = map.zoomOut();
// 方式3:指定相机缩放级数zoom值,其他属性不变
let zoom = 8.0;
let cameraUpdate2 = map.zoomTo(zoom);
// 方式4:
// a、指定相机缩放级别增量amount,您调用此方法可以在原来相机的缩放级别之上,进行适当的缩放
// b、指定缩放级别增量和一个中心点,您调用此API可以移动相机至中心点位置,并进行缩放
// 以屏幕左顶点为(0, 0)点,positionX正值代表可视区域向右移动,负值代表可视区域向左移动
// positionY正值代表可视区域向下移动,负值代表可视区域向上移动
let point: mapCommon.MapPoint = {
positionX: 31,
positionY: 118
};
let amount = 2.0;
let cameraUpdate3 = map.zoomBy(amount, point);
// 方式5:设置相机的经纬度和地图层级
// a、仅指定相机的经纬度,实现中心点的移动
// b、指定相机的经纬度和地图层级,您调用此API可以移动相机至中心点位置,并进行缩放
let latLng: mapCommon.LatLng = {
latitude: 31.5,
longitude: 118.9
};
let zoom = 10;
let cameraUpdate4 = map.newLatLng(latLng, zoom);
// 方式6:设置相机的可见区域
let latLngBounds: mapCommon.LatLngBounds = {
northeast: {
latitude: 32.5,
longitude: 119.9
},
southwest: {
latitude: 31.5,
longitude: 118.9
}
};
// 设置地图显示经纬度范围,设置地图区域和边界之间的距离为5像素
let cameraUpdate5 = map.newLatLngBounds(latLngBounds, 5);
// 方式7:设置相机的可见区域
// 设置地图显示经纬度范围,设置经纬度矩形范围的宽为9像素,设置经纬度矩形范围的高为16像素,设置地图区域和边界之间的距离为5像素
let cameraUpdate6 = map.newLatLngBounds(latLngBounds, 9, 16, 5);
// 方式8:滚动相机,将相机按照指定的像素点移动
let x = 100.0;
let y = 100.0;
let cameraUpdate7 = map.scrollBy(x, y);

 

设置相机最大/最小偏好缩放级别

// 设置最小偏好缩放级别,范围为[2,20]
this.mapController.setMinZoom(6);
// 设置最大偏好缩放级别,范围为[2,20]
this.mapController.setMaxZoom(14);

设置地图相机的边界

Map Kit支持设置地图相机的边界。通过setLatLngBounds(bounds: mapCommon.LatLngBounds)接口指定一个LatLngBounds来约束相机目标,使用户移动地图时,相机目标不会移出此边界。当设置参数为空时,地图相机的边界清除。

let bounds: mapCommon.LatLngBounds = {
northeast: {
latitude: 5,
longitude: 106
},
southwest: {
latitude: 2.5,
longitude: 101
}
};
this.mapController.setLatLngBounds(bounds);

 

 


http://www.ppmy.cn/news/1530392.html

相关文章

CentOS中使用Docker运行Nginx并挂载本地目录

CentOS 中安装 Docker 并挂载本地目录: 一、安装 Docker 更新系统软件包: sudo yum update -y安装必要的软件包以允许使用 yum 安装 Docker: sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加 Docker 仓库&#xff1a…

哪个编程工具让你的工作效率翻倍?

在探讨哪款编程工具能让工作效率翻倍时,我们不得不承认,这并非是一个非黑即白的答案,因为不同的开发者、不同的项目阶段以及不同的编程需求,都可能使得某种工具成为提升效率的关键。然而,如果要从智能的代码编辑器、强…

8606 二叉树的构建及遍历操作

### 伪代码 1. **CreateBiTree**: - 读取一个字符 ch。 - 如果 ch 是 #,则当前节点为空。 - 否则,创建一个新节点 T,将 ch 赋值给 T 的数据域。 - 递归创建 T 的左子树。 - 递归创建 T 的右子树。 2. **PreOrderTraverse**: …

pg入门11-pg中的publications是什么

在 PostgreSQL(PG)中,Publication(发布)是逻辑复制机制中的一个概念,用于定义哪些表的数据变更(INSERT、UPDATE、DELETE)可以发布到订阅者(Subscribers)。它主…

C++ QT程序打包,包含python环境

C QT程序打包,包含python环境 1、导出QT可执行包 首先在QTcreator中选择对应的项目,完成release版本的发布(确保调试成功) 找到生成release的文件夹所在处,将exe执行所需的附加文件一起复制到一个单独文件夹中&#…

Spring IDEA 2024 安装Lombok插件

1.简介 Lombook插件的Data标签可以自动生成类的get和set以及toString方法。 2.安装步骤 在idead设置的插件中搜索lombok插件&#xff0c;安装。 在Spring项目的pom.xml中添加依赖项 <dependency><groupId>org.projectlombok</groupId><artifactId…

Fyne ( go跨平台GUI )中文文档-小部件 (五)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

聚焦汽车智能化与电动化,亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展

抢占市场先机︱聚焦汽车智能化与电动化&#xff0c;亚洲领先的汽车工业技术博览会 2025年11月与您相约 AUTO TECH 华南展 随着汽车智能化与电动化的迅猛发展&#xff0c;汽车电子技术、车用功率半导体技术、智能座舱技术、轻量化技术/材料、软件定义汽车、EV/HV技术、测试测量技…