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

场景介绍

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

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

相机移动前                                                                       

    

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.mzph.cn/diannao/54740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源PHP导航网源码/精美简约网址导航收录网站/QQ技术导航程序

源码简介: 一款给力的开源PHP导航网源码,它不仅外观精美简约,还是个网址导航收录网站/QQ技术导航程序哦! 在信息爆炸的时代,找网页就像大海捞针一样难。但是有了像PHP 导航网这样的神器,一切都变得简单了…

One API本地开发环境搭建

One API本地开发环境搭建 简介 摘要 : 本文介绍如何在本地搭建 One API 开发环境,包括安装 Go 语言和 GoLand IDE,以及如何新建项目和配置数据库信息。通过简明的步骤说明,帮助开发者快速完成基本的开发环境配置,方…

STM32与51单片机的区别:是否应该直接学习STM32?

STM32与51单片机的区别:是否应该直接学习STM32? 在单片机的世界里,STM32和51单片机都是非常重要的角色。对于初学者来说,是否可以直接跳过51单片机,直接学习STM32,这个问题一直存在争议。让我们深入探讨这…

Vue:默认插槽

目录 一.性质 1.内容分发 2.无名称标识 3.作用域 4.使用方式 二.使用 1.父组件 2.子组件 三.代码 1.父组件代码 2.子组件代码 四.效果 一.性质 1.内容分发 默认插槽允许组件的使用者定义一些内容,这些内容会被插入到组件模板中的特定位置。这有助于实…

TomCat乱码问题

TomCat控制台乱码问题 乱码问题解决: 响应乱码问题 向客户端响应数据: package Servlet;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servl…

【HTTP】方法(method)以及 GET 和 POST 的区别

文章目录 方法(method)登录上传GET 和 POST 有什么区别(面试)区别不准确的说法 方法(method) 首行中的第一部分。首行是由方法、URL 和版本号组成 方法描述了这次请求想干什么,最主要的是&…

Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行

1. Unity3D介绍 Unity3D是虚拟现实行业中,使用率较高的一款软件。 它有着强大的功能,是让玩家轻松创建三维视频游戏、建筑可视化、实时三维动画等互动内容的多平台、综合型 虚拟现实开发工具。是一个全面整合的专业引擎。 2. Unity安装 官网 : Unity…

苹果macOS 15.0 Sequoia正式版发布:iPhone应用镜像玩、手机消息电脑知

9月17日苹果向 Mac 电脑用户推送了 macOS 15 更新(内部版本号:24A335),除了引入数个 iOS 18 的新功能外,macOS 15 Sequoia 还带来了全新的 Continuity 功能 ——iPhone 镜像。 iPhone 镜像功能可以让用户直接在 Mac 上…

Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot

一、Ubuntu 安装和使用 Fcitx 中文输入法 在 Ubuntu 上安装和使用 Fcitx 输入法框架是一个常见的选择,特别是对于需要中文输入的用户。以下是详细的步骤来安装和配置 Fcitx 输入法: 1. 安装 Fcitx 和相关输入法 首先,更新你的包列表并安装…

单词搜索问题(涉及递归等)

目录 一题目: 二思路解释: 三解答代码: 一题目: newcode题目链接: 单词搜索_牛客题霸_牛客网 二思路解释: 思路:个人理解是找到word中的第一个元素,然后去递归的上下左右查找&am…

跳跃列表(Skip List)详解

什么是跳跃列表? 跳跃列表是一种概率性的数据结构,旨在提高链表的搜索、插入和删除效率。它通过在普通链表的基础上增加多个层次,以实现更快的访问速度。跳跃列表的设计灵感来源于跳跃图(Skip Graph)和多层索引的概念…

手把手搞定VMware 的CentOS硬盘扩容

1.背景 用VMware虚拟机创建Centos系统时,选了40GB硬盘,用着用着发现硬盘不够用了。于是,我为了给硬盘扩容,实操了下centos的硬盘扩容。本文是记录下整个操作过程,方便后面查询和使用。 2.操作 2.1 VMware操作 2.2 Ce…

基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…

mysql优化之sql语句优化、以及mysql一些高频面试题

文章目录 一、索引1、什么是索引2、添加索引的原则3、索引的优缺点4、索引分类5、mysql存储过程(方法) 二、MySQL的逻辑架构1、逻辑架构2、MyISAM 和 InnoDB的区别 三、mysql的索引数据结构1、B Tree2、B Tree 四、缓冲池 Buffer Pool1、预读机制2、预读…

Qt中多语言的操作(以QtCreator为例)

1、首先,我们在代码中与文本相关的且需要支持多语言的地方,用tr来包含多语言key(多语言key是我们自己定义的),如下 //举例 QPushButton* btnnew QPushButton(this); btn->move(20,20); btn->resize(100,50); //…

Selenium with Python学习笔记整理(网课+网站持续更新)

本篇是根据学习网站和网课结合自己做的学习笔记,后续会一边学习一边补齐和整理笔记 学习网站: selenium 实战二_PO代码重构 Selenium自动化测试python篇 看云 https://selenium-python.readthedocs.io/getting-started.html#simple-usage WEB UI自…

erlang学习:Linux命令学习4

顺序控制语句学习 if,else对文件操作 判断一个文件夹是否存在,如果存在则进行删除,如果不存在则创建该文件夹,并复制一份该脚本后,删除该脚本 if [ -d "/erlangtest/testdir"]; then echo "删除文件夹…

【路径规划】绘制算术和几何布朗运动- 绘制布朗桥、2D 和 3D 布朗运动- 绘制一些随机路径

摘要 本文演示了如何生成和绘制布朗运动、几何布朗运动和布朗桥的随机路径。这些随机路径广泛应用于金融、物理和工程领域,用于模拟随机过程。实验结果包括了多条随机路径的示例,展示了不同类型的布朗运动的特征。 理论 1. 布朗运动 (Brownian Motion…

构建高效房屋租赁系统:Spring Boot应用

1 绪论 1.1 研究背景 中国的科技的不断进步,计算机发展也慢慢的越来越成熟,人们对计算机也是越来越更加的依赖,科研、教育慢慢用于计算机进行管理。从第一台计算机的产生,到现在计算机已经发展到我们无法想象。给我们的生活改变很…

如何在NXP源码基础上适配ELF 1开发板的UART功能

UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出了4路UART接口供开发者使用,具体包括U…