3D 地圖渲染-區域紋理圖添加

  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.18var 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.18var 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.pswp.cn/news/899937.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899937.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899937.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何避免內存泄漏,尤其是在React中

在React中避免內存泄漏主要涉及到兩個方面&#xff1a;組件的卸載清理和異步操作的正確管理。以下是幾個關鍵的策略和最佳實踐&#xff1a; 1. 清理組件中的事件監聽器和定時器 當組件卸載時&#xff0c;確保清除所有綁定的事件監聽器和定時器&#xff0c;否則它們會持續占用內…

如何學習C++以及C++的宏觀認知

學習方法 首先可以給出一個論斷&#xff1a;C的語法和各種組件的原理及使用可以說是所有編程語言里面比較難的 那么如何掌握所有東西&#xff0c;比如網絡編程&#xff0c;文件讀寫&#xff0c;STL。 不要對語法記各種筆記&#xff0c;比如vector容器有什么什么方法什么什么…

Minimind 訓練一個自己專屬語言模型

發現了一個寶藏項目&#xff0c; 宣傳是完全從0開始&#xff0c;僅用3塊錢成本 2小時&#xff01;即可訓練出僅為25.8M的超小語言模型MiniMind&#xff0c;最小版本體積是 GPT-3 的 17000&#xff0c;做到最普通的個人GPU也可快速訓練 https://github.com/jingyaogong/minimi…

Spring Boot 與 Spring Integration 整合教程

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 Spring Boot 與 Spring Integration 整合教程 簡介 Spring Integration 是 Spring 生態系統中用于實現企業集成模式&#xff08;Enterprise Integration Pa…

Nginx 核心配置詳解與性能優化最佳實踐

1.什么是 Nginx&#xff1f; Nginx 是一個高性能的 Web 服務器和反向代理服務器。它輕量、高效&#xff0c;被廣泛用于現代 Web 開發中。 2.為什么前端需要了解 Nginx&#xff1f; ★ 了解 本地開發&#xff1a;可以模擬生產環境 部署前端項目&#xff1a;作為靜態文件服務器…

LayaAir3.3.0-beta.3重磅更新!Spine4.2、2D物理、UI系統、TileMap等全面升級!

正式版推出前&#xff0c;說明3.3的功能還沒開發完。所以&#xff0c;又一大波更新來了~ 下面對重點更新進行說明。 Spine的重要更新 3.3.0-beta.3版本開始&#xff0c;新增了Spine 4.2 的運行時庫&#xff0c;Spine動畫上可以支持物理特性了。例如&#xff0c;下圖右側女孩在啟…

pip安裝timm依賴失敗

在pycharm終端給虛擬環境安裝timm庫失敗&#xff08; pip install timm&#xff09;&#xff0c;提示你要訪問 https://rustup.rs/ 來下載并安裝 Rust 和 Cargo 直接不用管&#xff0c;換一條命令 pip install timm0.6.13 成功安裝 簡單粗暴

BUUCTF-web刷題篇(7)

16.BackupFile 題目提示backupfile&#xff0c;是備份文件的意思&#xff1a; 查看源碼沒有什么有用信息&#xff0c;也沒有登錄界面&#xff0c;所以也不會用到蟻劍鏈接來找備份文件&#xff0c;所以大概率就是通過構造playload來查找備份文件。 注&#xff1a;備份文件常用…

Maven 構建生命周期

Maven 構建生命周期 引言 Maven 是一個強大的項目管理和構建自動化工具,廣泛應用于 Java 開發領域。Maven 的核心概念之一是構建生命周期,它定義了從項目創建到構建、測試、打包、部署等一系列操作的流程。本文將詳細介紹 Maven 的構建生命周期,幫助讀者更好地理解和使用 …

PyTorch 深度學習實戰(29):目標檢測與 YOLOv12 實戰

在上一篇文章中,我們探討了對比學習與自監督表示學習。本文將深入計算機視覺的核心任務之一——目標檢測,重點介紹最新的 YOLOv12 (You Only Look Once v12) 算法。我們將使用 PyTorch 實現 YOLOv12 模型,并在 COCO 數據集上進行訓練和評估。 一、YOLOv12 基礎 YOLOv12 是 …

使用Leaflet對的SpringBoot天地圖路徑規劃可視化實踐-以黃花機場到橘子洲景區為例

目錄 前言 一、路徑規劃需求 1、需求背景 2、技術選型 3、功能簡述 二、Leaflet前端可視化 1、內容布局 2、路線展示 3、轉折路線展示 三、總結 前言 在當今數字化與智能化快速發展的時代&#xff0c;路徑規劃技術已經成為現代交通管理、旅游服務以及城市規劃等領域的…

深入理解 CSS 選擇器:從基礎到高級的樣式控制

引言 在網頁設計與開發中&#xff0c;CSS&#xff08;層疊樣式表&#xff09;扮演著至關重要的角色&#xff0c;它賦予了 HTML 頁面豐富的視覺效果和交互性。而 CSS 選擇器則是 CSS 的核心機制之一&#xff0c;通過選擇器&#xff0c;我們能夠精準地指定要應用樣式的 HTML 元素…

GitHub與Gitee各是什么?它們的區別與聯系是什么?

李升偉 整理 GitHub 介紹 GitHub 是一個基于 Git 的代碼托管平臺&#xff0c;主要用于版本控制和協作開發。它支持多人協作&#xff0c;提供代碼托管、問題跟蹤、代碼審查、項目管理等功能。GitHub 是全球最大的開源社區&#xff0c;許多知名開源項目都在此托管。 主要功能&…

ESLint語法報錯

ESLint語法報錯 運行報錯 You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignore the next line. Use /* eslint-disable */ to ignore all warnings in a file.解決方案 關閉eslint的語法檢測&#xff0c;在eslintrc.js文件中…

單例模式與線程安全

目錄 線程安全和重?問題 死鎖和活鎖 死鎖 死鎖四個必要條件 活鎖 STL,智能指針和線程安全 線程安全的單例模式 餓漢模式 懶漢模式 懶漢模式實現單例模式(線程安全版本) 餓漢模式實現單例模式 我們來學習單例模式與線程安全 線程安全和重?問題 線程安全&#xff…

Python+AI提示詞用貝葉斯樣條回歸擬合BSF方法分析櫻花花期數據模型構建跡圖、森林圖可視化

原文鏈接&#xff1a;https://tecdat.cn/?p41308 在數據科學的領域中&#xff0c;我們常常會遇到需要處理復雜關系的數據。在眾多的數據分析方法中&#xff0c;樣條擬合是一種非常有效的處理數據非線性關系的手段。本專題合集圍繞如何使用PyMC軟件&#xff0c;對櫻花花期數據進…

WPF學習路線

WPF學習路線 學習準備學習技術棧學習路線 1-5&#xff08;1-2周&#xff09;6-8&#xff08;3-5周&#xff09; 學習準備 個人認為前端技術一般幾個關鍵字&#xff1a;元素資源 控制元素資源組合或者動態交互 數據交互呈現分析關鍵字得到的就是幾個方向 布局 樣式 組裝資源控件…

31天Python入門——第20天:魔法方法詳解

你好&#xff0c;我是安然無虞。 文章目錄 魔法方法1. __new__和__del__2. __repr__和__len__3. __enter__和__exit__4. 可迭代對象和迭代器5. 中括號[]數據操作6. __getattr__、__setattr__ 和 __delattr__7. 可調用的8. 運算符 魔法方法 魔法方法: Python中的魔法方法是一類…

棧 —— 數據結構基礎刷題路程

一、P1739 表達式括號匹配 - 洛谷 算法代碼&#xff1a; #include<bits/stdc.h> using namespace std; const int N300008; struct mystack {int a[N];int t-1;//壓棧void push(int data){a[t]data; } //取棧頂元素int top(){return a[t]; } //彈出棧頂元素void pop(){i…

瑞昱RTD2556QR顯示器驅動芯片

一、概述 RTD2556QR芯片是由Realtek公司精心研發的一款高性能顯示驅動芯片&#xff0c;專為滿足現代顯示設備對高分辨率、多功能接口及穩定性能的需求而設計。該芯片憑借其卓越的技術特性和廣泛的應用領域&#xff0c;在顯示驅動市場中占據重要地位。它集成了多種先進的功能模…