高德地图通过画面中的一个覆盖物设置图中心点和zoom

news/2024/7/20 22:34:32 标签: swift, 开发语言, ios

需要将这个覆盖物置于地图中间且不超过地图边界的放至最大

计算覆盖物中心点,定为地图中心点

计算覆盖物的最大经纬度,和最小经纬度,测算出实际最长距离,根据距离与zoom对应关系设置zoom

function getAreaCenter(params, info) {
  let code = info.code
  if (!params.target) {
    return;
  }
  let PolygonPath = params.target.getPath();
  let PolygonArr = [];
  PolygonPath.forEach((item) => {
    let path = [item.KL, item.kT];
    PolygonArr.push(path);
  });
  let total = PolygonArr.length;
  if (total <= 0) {
    return;
  }
  let X = 0;
  let Y = 0;
  let Z = 0;
  PolygonArr.forEach((lnglat) => {
    let lng = (lnglat[0] * Math.PI) / 180;
    let lat = (lnglat[1] * Math.PI) / 180;
    let x, y, z;
    x = Math.cos(lat) * Math.cos(lng);
    y = Math.cos(lat) * Math.sin(lng);
    z = Math.sin(lat);
    X += x;
    Y += y;
    Z += z;
  });
  X = X / total;
  Y = Y / total;
  Z = Z / total;

  let Lng = Math.atan2(Y, X);
  let Hyp = Math.sqrt(X * X + Y * Y);
  let Lat = Math.atan2(Z, Hyp);
  
  let center = [(Lng * 180) / Math.PI, (Lat * 180) / Math.PI];
 let maxL = Math.max(...PolygonArr.map(item=> item[0]))
 let minL = Math.min(...PolygonArr.map(item=> item[0]))
 let maxK = Math.max(...PolygonArr.map(item=> item[1]))
 let minK = Math.min(...PolygonArr.map(item=> item[1]))
 let p1 = [maxL,maxK]
 let p2 = [minL,minK]
 let dis = AMap.GeometryUtil.distance(p1, p2);
let zoom = 12
  let zooms = [[10000,11,],
	[5000,12,],
	[2000,15,],
	[1000,16,],
  [600,16.5,],
	[500,17,],
	[200,18,],
	[100,19,],
	[50,20,],
	[15,21,],
	[10,22,]]
	for(let i = 0;i<zooms.length;i++){
    let item = zooms[i]
    if(dis>item[0]){
      zoom = item[1]
  break
 }
  }
  map.setZoomAndCenter(zoom, center);
}


http://www.niftyadmin.cn/n/5012381.html

相关文章

使用Vagrant创建和管理本地Kubernetes(K8s)集群的步骤是什么

文章目录 步骤1&#xff1a;准备环境步骤2&#xff1a;创建Vagrantfile步骤3&#xff1a;启动虚拟机步骤4&#xff1a;安装Kubernetes步骤5&#xff1a;配置Kubernetes网络插件步骤6&#xff1a;将Worker节点加入集群步骤7&#xff1a;验证集群步骤8&#xff1a;部署应用步骤9&…

VSCode学习笔记一:添加代码模板

一目了然 1 简述2 设置模板3 Global Snippets file示例 1 简述 问&#xff1a;为什么要设置代码模板&#xff1f; 答&#xff1a;编程语言是有个性的&#xff0c;不同语言的演讲风格是不一样的。 旁白&#xff1a;我不懂&#xff1f;&#xff01; 问&#xff1a;为什么要设置…

小米汽车,能否在新能源汽车江湖站稳脚跟?

最近&#xff0c;圈内都在传小米汽车亦庄工厂已试生产近一个月&#xff0c;每周可产50辆样车&#xff0c;正在为首款新能源汽车量产做最后的准备。 此前的业绩交流会上&#xff0c;小米集团总裁卢伟冰透露&#xff0c;小米汽车结束了夏测且进展非常顺利&#xff0c;2024年上半…

ThreadPoolExecutor 类

ThreadPoolExecutor 是 Java 中用于创建和管理线程池的一个强大类,位于 java.util.concurrent 包中。它提供了灵活的配置选项,允许您自定义线程池的行为和特性。 以下是关于 ThreadPoolExecutor 类的一些重要信息和示例: 创建 ThreadPoolExecutor 实例: 要创建一个 Thread…

easyui-sidemenu 菜单 后台加载

前言 一个项目的功能较齐全&#xff0c;而齐全就预示着功能菜单比较长&#xff0c;但是现实中在不同的甲方使用中往往只需要摘取其中几项功能&#xff0c;所以就想到用配置菜单以满足其需求&#xff0c;且无需变更原始代码&#xff0c;查找一些资料总是似是而非或是誊抄别的什…

ORACLE的分区(一)

目录 一、分区概念 二、表分区的优点 三、分区策略 一、分区概念 随着时间的发展&#xff0c;一个表的数据会越来越多&#xff0c;当数据量增大的时候我们一般采取建立索引优化索引的方式提高查询速度&#xff0c;但是数据量再次增大即使是索引也无法提高速度&#xff0c;这时…

EasyExcel填充数据EasyExcel填充数据流下载 easyexcel填充excel下载 easyexcel填充

EasyExcel填充数据EasyExcel填充数据流下载 easyexcel填充excel下载 easyexcel填充 1、填充数据然后将文件输出给浏览器 1、填充数据然后将文件输出给浏览器 官网地址 官网的demo填充生成的是file文件, 实际需求用的最多的是 填充完数据将Excel输出给浏览器 填充模版Excel文…

【jmeter】连接mysql无法使用executeQuery()

Can not issue data manipulation statements with executeQuery(). 翻译为&#xff1a; 在这里插入图片描述 看一下JDBC Request里的Query Type 改为Prepared Updata Statement&#xff0c;改完再试一下