高德地图 3D 渲染-区域纹理图添加

news2025/7/16 21:00:44
  1. 引入-初始化地图(关键代码)
// 初始化页面引入高德 webapi -- index.html 文件
<script src = 'https://webapi.amap.com/maps?v=2.0&key=您申请的key值'></script>

// 添加地图容器
<div id='container' ></div>

// 地图初始化应该在地图容器 div 已经添加到 DOM 树之后
 let map = {};
// 初始化背景地图--封装方法
export const mapInit = (
  id = 'index-overView',
  opts = {},
  styleId = 'amap://styles/XXXXXXXXXXXXXXXXXXXXXXXXX'
) => {
  // fc35552908a5c4f34b7330621230b0bd
  // if(Object.keys(map).length === 0){
  // }
  map = new AMap.Map(
    id,
    Object.assign(
      {
        mapStyle: styleId,
        zoom: 8,
        center: [110.412427, 29.303573]
        // pitch: 50,
        // viewMode: '3D',
        // features: ['bg', 'road'],
      },
      opts
    )
  );
  return map;
};

// 初始化
this.map = mapInit('mapContainer2', {
     mask: mask,
     viewMode: '3D',
     pitch: this.pitchList[this.currentAreaList.length - 1],
     zoom: 9.3,
     center: [120.66888, 29.686606],
     features: ['bg', 'road'],
     dragEnable: true,
     zoomEnable: true,
     layers: [imageLayer]
});
  1. 设置3d-这时候只需要给版块添加个wall ,把版块抬起来就可以了(关键代码)
// 添加高度面(只有添加了这个,才会有立体的感觉,这里用2.0版本,Object3DLayer会报错,所以改用1.0版本)
var object3Dlayer = new AMap.Object3DLayer({ zIndex: 1 });
var height = -50000;
var color = '#00C2FF'; //rgba   384C4B — 242D2D  56,76,75  36,45,45    0.2,0.3,0.3   0.15,0.18,0.18
 var wall = new AMap.Object3D.Wall({
          path: bounds,
          height: height,
          color: color
});
wall.transparent = true;
object3Dlayer.add(wall);

this.map.add(object3Dlayer);

//修改当前光照-----重点 这里通过修改光照 能到达更好的立体效果
this.map.AmbientLight = new AMap.Lights.AmbientLight([1, 1, 1], 0.5);
this.map.DirectionLight = new AMap.Lights.DirectionLight(
          [0, 2, -14],
          [1, 1, 1],
          0.5
);
  1. 添加纹理图-将图片放在地图上
    注意:图片一定要按实际比例;图片背景必须透明;图片边界和地图四个点相交,如下图:
    在这里插入图片描述
 // 添加纹理地图
var imageLayer = new AMap.ImageLayer({
     url: require('/src/assets/images/entService-platform/texture.png'),
     // 3d模式下,不要轻易改动 bounds 的经纬度值哈,不然你会后悔的,很难调。2d 下通过获取西南方向,和东北方向的经纬度即可
     bounds: new AMap.Bounds(
     [119.194408, 29.128922],
     [122.143352, 30.943633]
        ),
    zIndex: 2
});

这里面的 bounds 是图片中的左下角坐标,和右上角坐标 ,需要自己计算,调试步骤:
1、通过https://lbs.amap.com/demo/javascript-api-v2/example/district-search/draw-district-boundaries 使用DistrictSearch 绘制城市版块,画出该省市的边界线
2、找到边界线,东西南北的四个顶点坐标, 如上图 标的数字
3、图片左下角坐标 , 是 点1 的经度 和 点2 的纬度
4、图片右上角坐标 , 是 点4 的经度 和 点3 的纬度

这样就得到了bounds 的值
这里四个点通过找到4个点 在拾取器上搜索关键字直接获取到经纬度
点位拾取器
注意:这四个点的坐标,要么计算出来,要么就给地图添加点击事件.通过点击事件获取这四个点的坐标

  1. 完整代码
 initMap() {
      let district = new AMap.DistrictSearch({
        extensions: 'all',
        subdistrict: 1,
        level: this.currentLevel
      });
      district.search(this.activeName, async (status, result) => {
        var districtList = result.districtList[0].districtList;

        var bounds = result.districtList[0]['boundaries'];
        var mask = [];
        this.polygons = [];
        for (var i = 0; i < bounds.length; i++) {
          mask.push([bounds[i]]);
        }
        // 添加纹理地图
        var imageLayer = new AMap.ImageLayer({
          url: require('/src/assets/images/entService-platform/texture.png'),
          // 3d模式下,不要轻易改动 bounds 的经纬度值哈,不然你会后悔的,很难调。2d 下通过获取西南方向,和东北方向的经纬度即可
          bounds: new AMap.Bounds(
            [119.194408, 29.128922],
            [122.143352, 30.943633]mapInit
          ),
          zIndex: 2
        });

        this.map = mapInit('mapContainer2', {
          mask: mask,
          viewMode: '3D',
          pitch: this.pitchList[this.currentAreaList.length - 1],
          zoom: 9.3,
          center: [120.66888, 29.686606],
          features: ['bg', 'road'],
          dragEnable: true,
          zoomEnable: true,
          layers: [imageLayer]
        });

        // 添加高度面(只有添加了这个,才会有立体的感觉,这里用2.0版本,Object3DLayer会报错,所以改用1.0版本)
        var object3Dlayer = new AMap.Object3DLayer({ zIndex: 1 });
        var height = -50000;
        var color = '#00C2FF'; //rgba   384C4B — 242D2D  56,76,75  36,45,45    0.2,0.3,0.3   0.15,0.18,0.18
        var wall = new AMap.Object3D.Wall({
          path: bounds,
          height: height,
          color: color
        });
        wall.transparent = true;
        object3Dlayer.add(wall);

        this.map.add(object3Dlayer);

        //修改当前光照
        this.map.AmbientLight = new AMap.Lights.AmbientLight([1, 1, 1], 0.5);
        this.map.DirectionLight = new AMap.Lights.DirectionLight(
          [0, 2, -14],
          [1, 1, 1],
          0.5
        );

        this.map.clearMap();
        let that = this;
        this.map.on('click', e => {
          that.$emit('closeDatePicker');
          // window.infoWindow.close();
        });

        this.getPolyline(bounds);

        getBounds({ searchName: '绍兴市' }).then(res => {
          this.countiesCenter = res.districtList.map(v => {
            return {
              name: v.name,
              center: [v.center.lng, v.center.lat]
            };
          });
          this.changeMapLevel();
        });
      });
    },
    //添加外围描边--- 外围需要更明显的边界的话 需要单独给外围 描边
    getPolyline(bounds) {
      for (var i = 0; i < bounds.length; i++) {
        new AMap.Polyline({
          path: bounds[i],
          isOutline: true,
          outlineColor: '#CAECF9',
          borderWeight: 3,
          strokeColor: '#69FFFD',
          strokeWeight: 2,
          strokeOpacity: 1,
          map: this.map
        });
      }
    },

补充:高德地图掩模(背景设置透明的前提下)

  • mask 方式
  • 设置卫星图层 new AMap.TileLayer.Satellite({ opacity: 0 })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2331358.html

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

相关文章

搭建hadoop集群模式并运行

3.1 Hadoop的运行模式 先去官方看一看Apache Hadoop 3.3.6 – Hadoop: Setting up a Single Node Cluster. 本地模式&#xff1a;数据直接存放在Linux的磁盘上&#xff0c;测试时偶尔用一下 伪分布式&#xff1a;数据存放在HDFS&#xff0c;公司资金不足的时候用 完全分布式&a…

Qt实现鼠标右键弹出弹窗退出

Qt鼠标右键弹出弹窗退出 1、鼠标右键实现1.1 重写鼠标点击事件1.2 添加头文件1.3 添加定义2、添加菜单2.1添加菜单头文件2.2创建菜单对象2.3 显示菜单 3、添加动作3.1添加动作资源文件3.2 添加头文件3.3 创建退出动作对象3.4菜单添加动作对象 4、在当前鼠标位置显示菜单4.1当前…

Springboot整合Mybatis+Maven+Thymeleaf学生成绩管理系统

前言 该系统为学生成绩管理系统&#xff0c;可以当作学习参考&#xff0c;也可以成为Spirng Boot初学者的学习代码&#xff01; 系统描述 学生成绩管理系统提供了三种角色&#xff1a;学生&#xff0c;老师&#xff0c;网站管理员。主要实现的功能如下&#xff1a; 登录 &a…

C#里第一个WPF程序

WPF程序对界面进行优化,但是比WINFORMS的程序要复杂很多, 并且界面UI基本上不适合拖放,所以需要比较多的时间来布局界面, 产且需要开发人员编写更多的代码。 即使如此,在面对诱人的界面表现, 随着客户对界面的需求提高,还是需要采用这样的方式来实现。 界面的样式采…

PyTorch 生态迎来新成员:SGLang 高效推理引擎解析

SGLang 现已正式融入 PyTorch 生态系统&#xff01;此次集成确保了 SGLang 符合 PyTorch 的技术标准与最佳实践&#xff0c;为开发者提供了一个可靠且社区支持的框架&#xff0c;助力大规模语言模型&#xff08;LLM&#xff09;实现高效且灵活的推理。 如需深入了解 PyTorch…

时序数据库 TDengine Cloud 私有连接实战指南:4步实现数据安全传输与成本优化

小T导读&#xff1a;在物联网和工业互联网场景下&#xff0c;企业对高并发、低延迟的数据处理需求愈发迫切。本文将带你深入了解 TDengineCloud 如何通过全托管服务与私有连接&#xff0c;帮助企业实现更安全、更高效、更低成本的数据采集与传输&#xff0c;从架构解析到实际配…

微服务注册中心选择指南:Eureka vs Consul vs Zookeeper vs Nacos

文章目录 引言微服务注册中心概述什么是服务注册与发现选择注册中心的标准 常见的微服务注册中心1. Eureka1.1 理论基础1.2 特点1.3 示例代码 2. Consul2.1 理论基础2.2 特点2.3 示例代码 3. Zookeeper3.1 理论基础3.2 特点3.3 示例代码 4. Nacos4.1 理论基础4.2 特点4.3 示例代…

厦门未来之音:科技与自然共舞的奇幻篇章

故事背景 故事发生在中国福建厦门&#xff0c;描绘未来城市中科技与传统文化深度融合的奇景。通过六大创新场景展现人与自然、历史与未来的和谐共生&#xff0c;市民在智能设施中感受文化传承的力量。 故事内容 从鼓浪屿的声波音乐栈道到BRT天桥上的空中茶园&#xff0c;从修复…

VS Code-i18n Ally国际化插件

前言 本文借鉴&#xff1a;i18n Ally 插件帮你轻松搞定国际化需求-按模块划分i18n Ally 是一款 VS Code 插件&#xff0c;它能通过可视 - 掘金本来是没有准备将I18n Ally插件单独写一个博客的&#xff0c;但是了解过后&#xff0c;功能强大&#xff0c;使用方便&#xff0c;解决…

在亚马逊云科技上使用n8n快速构建个人AI NEWS助理

前言&#xff1a; N8n 是一个强大的工作流自动化工具&#xff0c;它允许您连接不同的应用程序、服务和系统&#xff0c;以创建自动化工作流程&#xff0c;并且采用了开源MIT协议&#xff0c;可以放心使用&#xff0c;他的官方网站也提供了很多的工作流&#xff0c;大家有兴趣的…

STM32单片机入门学习——第27节: [9-3] USART串口发送串口发送+接收

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.08 STM32开发板学习——第27节: [9-3] USART串口发送&串口发送接收 前言开发板说…

数字电子技术基础(四十)——使用Digital软件和Multisim软件模拟显示译码器

目录 1 使用Digital软件模拟显示译码器 1.1 原理介绍 1.2 器件选择 1.3 电路运行 1.4 结果分析 2 使用Multisim软件模拟显示译码器 2.1 器件选择 2.2 电路运行 1 使用Digital软件模拟显示译码器 1.1 原理介绍 7448常用于驱动7段显示译码器。如下所示为7448驱动BS201A…

第十四届蓝桥杯大赛软件赛国赛C/C++研究生组

研究生C国赛软件大赛 题一&#xff1a;混乘数字题二&#xff1a;钉板上的正方形题三&#xff1a;整数变换题四&#xff1a;躲炮弹题五&#xff1a;最大区间 题一&#xff1a;混乘数字 有一点像哈希表&#xff1a; 首先定义两个数组&#xff0c;拆分ab和n 然后令n a*b 查看两个…

多模态大语言模型arxiv论文略读(四)

A Survey on Multimodal Large Language Models ➡️ 论文标题&#xff1a;A Survey on Multimodal Large Language Models ➡️ 论文作者&#xff1a;Shukang Yin, Chaoyou Fu, Sirui Zhao, Ke Li, Xing Sun, Tong Xu, Enhong Chen ➡️ 研究机构: 中国科学技术大学、腾讯优图…

python三大库之---pandas(二)

python三大库之—pandas&#xff08;二&#xff09; 文章目录 python三大库之---pandas&#xff08;二&#xff09;六&#xff0c;函数6.1、常用的统计学函数6.2重置索引6.3 遍历6.3.1DataFrame 遍历6.3.2 itertuples()6.3.3 使用属性遍历 6.4 排序6.4.1 sort_index6.4.2 sort_…

php7.4.3连接MSsql server方法

需要下载安装Microsoft Drivers for PHP for SQL Server驱动&#xff0c; https://download.csdn.net/download/tjsoft/90568178 实操Win2008IISphp7.4.3连接SqlServer2008数据库所有安装包资源-CSDN文库 适用于 SQL Server 的 PHP 的 Microsoft 驱动程序支持与 SQL Server …

macOS设置定时播放眼保健操

文章目录 1. ✅方法一&#xff1a;直接基于日历2. 方法二&#xff1a;基于脚本2.1 音乐文件获取(ncm转mp3)2.2 创建播放音乐任务2.3 脚本实现定时播放 1. ✅方法一&#xff1a;直接基于日历 左侧新建一个日历&#xff0c;不然会和其他日历混淆&#xff0c;看起来会有点乱 然后…

记录学习的第二十三天

老样子&#xff0c;每日一题开胃。 我一开始还想着暴力解一下试试呢&#xff0c;结果不太行&#x1f602; 接着两道动态规划。 这道题我本来是想用最长递增子序列来做的&#xff0c;不过实在是太麻烦了&#xff0c;实在做不下去了。 然后看了题解&#xff0c;发现可以倒着数。 …

SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题

SpringBoot整合sa-token&#xff0c;Redis&#xff1a;解决重启项目丢失登录态问题 &#x1f525;1. 痛点直击&#xff1a;为什么登录状态会消失&#xff1f;2.实现方案2.1.导入依赖2.2.新增yml配置文件 3.效果图4.结语 &#x1f600;大家好&#xff01;我是向阳&#x1f31e;&…

哈希表(开散列)的实现

目录 引入 开散列的底层实现 哈希表的定义 哈希表的扩容 哈希表的插入 哈希表查找 哈希表的删除 引入 接上一篇&#xff0c;我们使用了闭散列的方法解决了哈希冲突&#xff0c;此篇文章将会使用开散列的方式解决哈希冲突&#xff0c;后面对unordered_set和unordered_map的…