高德API JS 高德地图获取多个坐标点的中心点

news/2024/10/17 18:29:13/

高德API JS 高德地图获取多个坐标点的中心点

一、需求

我需要在地图上展示多个地点,并且展示的同时,地图缩放到合适的大小,要求刚好能显示全部点位,并且边缘留有一部分间隔。
做成如图所示这样。
在这里插入图片描述

在这里插入图片描述

二、需要用到的 AMap 类库

经过一下午的研究,弄出来了。

需要以下这些 AMap 的类库:

  • AMap.Bounds() 区域
  • AMap.LngLat() 点坐标(基础点位)
  • AMap.setBounds() 设置地图区域,这会自动移动地图画面到这个区域中

高德地图 API Bounds 的官方文档:
https://lbs.amap.com/api/javascript-api-v2/documentation#bounds

在这里插入图片描述

三、实现

比如有这样一个点位数组,需要按上面的要求显示到地图中

[{"name":"大明湖","position":[117.023666,36.67672],"note":"","type":"","img":""},{"name":"济南五龙潭","position":[117.014772,36.665984],"note":"","type":"","img":""},{"name":"济南高新万达","position":[117.128471,36.686068],"note":"","type":"","img":""},{"name":"济南宜家","position":[116.928408,36.663449],"note":"","type":"","img":""},{"name":"济南华山风景区","position":[117.070015,36.728507],"note":"","type":"","img":""}
]

1. 获取这些点中的最值

描述一个区域需要这个区域的对角线上的两个点的坐标值。
我们需要找出这些点的最值。

我写了个方法

/*** 获取区域对角线的两点坐标,即这个区域内的最小坐标值和最大坐标值** @param pointerArray [[a,b],[c,d]]* @return Array {min:number[a,b], max:number[c,d]}*/
getMaxBoundsPointer(pointerArray){let lngArray = pointerArray.map(item => item[0])let latArray = pointerArray.map(item => item[1])return {min: [Math.min(...lngArray),  Math.min(...latArray)],max: [Math.max(...lngArray),  Math.max(...latArray)],}
},

它接收的是这些点位的数组,格式是 [[a,b],[c,d]],如下即可。

let maxLocations =  this.getMaxBoundsPointer(pointer.pointerArray.map(item => item.position))

获取到的结果如下:

在这里插入图片描述

2. 计算合适的地图边界距离

当显示这些点的时候,如果你使用上面的区域,就会发现有些点跑到了地图的最边缘。而这不是我们想要的,所以需要给它加一个边界值。
而合适的边界距离并不是一个定值,因为这些点的距离是不定的,以上只是一个点位组合的展示,而我还需要展示其它点位组合,这些组合的间隔可能会更大。

所以我们需要用计算出来的 maxLocations 来计算这个区域的长宽值,然后再取它的 1/4 作为边界,显示的就会比较合理。

// 取区间的 1/4 作为地图的边界
let lngGap = (maxLocations.max[0] - maxLocations.min[0]) / 4
let latGap = (maxLocations.max[1] - maxLocations.min[1]) / 4

3. 计算新的区域值

新的区域值需要在原来极点坐标的基础之上加上前一步计算出来的边界值。

// 新的区域极点坐标
let min = new AMap.LngLat(maxLocations.min[0] - lngGap, maxLocations.min[1] - latGap)
let max = new AMap.LngLat(maxLocations.max[0] + lngGap, maxLocations.max[1] + latGap)

4. 设置地图的 Bounds

设置地图的 Bounds。

  1. 当点位数组数量多于一个点时,就按上面的方法获取区域值,并设置它 AMap.setBounds()
  2. 当点位数组数量是一个点时,就把这个点作为地图的中心点,通过 AMap.setCenter() 来设置中心点
  3. 当点位数量为 0 时,不处理
// 1. 多个点时,设置 bounds
if (pointer.pointerArray.length > 1){let bounds = new AMap.Bounds(min, max)this.map.setBounds(bounds)
}
// 2. 一个点时,将其作为中心点
else if (pointer.pointerArray.length === 1){console.log(pointer.pointerArray)let centerLngLat = new AMap.LngLat(...pointer.pointerArray[0].position)this.map.setCenter(centerLngLat)  // 设置地图中心点坐标
}
// 3.
else {}

完活儿

https://kylebing.cn/tools/map


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

相关文章

鲁大师电动车智能化测评报告第九期

鲁大师第九期智能化电动车测评排行榜数据来源于鲁大师智慧实验室,测评的车型均为市面上主流品牌的主流车型,截止目前,鲁大师智能化电动车测评的车型高达40余种,且还在不断增加和丰富中。 一 测评依据 鲁大师电动车智能化测评体系包…

LNMP搭建过程详解,验证搭建论坛

LNMP搭建过程详解,验证搭建论坛 一、安装Nginx服务1、安装依赖包2、创建运行用户3、编译安装4、优化路径5、添加Nginx 系统服务 二、安装MySQL服务1、安装Mysql环境依赖包2、创建运行用户3、编译安装4、修改mysql配置文件5、更改mysql安装目录和配置文件的属主属组6…

服务运营 |摘要: Healthcare Management Science 近期论文汇总

推文作者:李舒湉 罗毓灵 编者按 Healthcare Management Science 近期论文汇总 Healthcare Management Science 论文精选(三月下) 1Monitoring policy in the context of preventive treatment of cardiovascular disease https://link.sprin…

液晶面板价格暴跌,电视便宜到笑,千元手机价格可买大屏电视

很久没关注电视了,最近一看电视的报价,发现电视价格已经低得让人发指,70英寸的液晶电视价格已低至1799元,比一部性能稍好一些的手机还要便宜,可见电视多么便宜。 售价1799元的70英寸液晶电视是大品牌的智能电视&#x…

全球液晶电视用导光板收入预计2028年达到12.037亿美元

液晶电视导光板是利用光学级的压克力/PC板材,然后用具有极高反射率且不吸光的高科技材料,在光学级的压克力板材底面用UV网版印刷技术印上导光点。 图液晶电视导光板 内容摘要 本报告针对未来几年液晶电视用导光板的发展前景预测,本文预测到…

【Linux网络】搭建LNMP架构

搭建LNMP架构 一、编译安装MySQL服务二、安装Nginx服务三、安装配置PHP解析环境四、部署Discuz社区论坛Web应用五、部署博客论坛应用六fpm进程优化 一、编译安装MySQL服务 1.安装MySQL环境依赖包 yum -y install gcc gcc-c ncurses ncurses-devel bison cmake2、创建运行用户 u…

液晶面板价格开始大跌,中国两大面板企业的好日子结束了

市调机构WitsView指出今年三季度以来,液晶面板的价格开始出现下跌,其中价格跌幅最大的32英寸液晶面板价格下跌幅度超过两成,并且预计液晶面板价格下跌至少延续到明年初,这对于中国两大面板企业京东方和TCL华星来说自然不好消息。 …

PX4之commander详解

如前所述commander的作用主要处理各种事件,调度控制系统的运行,事件包括遥控输入、用户指令、状态变更等。调度的作用主要设置控制系统运行的变量和模式,以使控制系统按照用户期望的模式运行,实现不同的控制功能。控制系统主要由n…