echarts+HTML 繪制3d地圖,加載散點+散點點擊事件

首先,確保了解如何本地引入ECharts庫。

html 文件中引入本地 echarts.min.js 和?echarts-gl.min.js

可以通過官網下載或npm安裝,但這里直接下載JS文件更簡單。需要引入?echarts.js?echarts-gl.js,因為3D地圖需要GL模塊。

接下來是HTML結構。需要一個容器div,設置寬度和高度,比如100%寬度和800px高度。然后初始化ECharts實例。

地圖數據方面,ECharts支持GeoJSON格式。用戶需要準備地圖的JSON文件,比如銅仁市的522200.json。使用?fetch?加載JSON文件,然后注冊地圖,echarts.registerMap('tongren', geoJson)。

最后,提醒注意事項,比如地圖JSON文件的獲取方式,可以使用?DataV.GeoAtlas?工具生成,或者從ECharts官網下載。確保JSON文件路徑正確,避免404錯誤。

以下是一個完整的本地引入ECharts實現3D地圖的示例,包含詳細注釋和可運行代碼:

代碼中的圖片需要換成你自己本地的;

hebei.json 文件,可以創建一個 hebei.json,在瀏覽器打開?https://geo.datav.aliyun.com/areas_v3/bound/130000_full.json,將其中的內容復制到?hebei.json 文件中。

<%@page pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./js/echarts.min.js"></script><script src="./js/echarts-gl.min.js"></script><style lang="scss" scoped>body {margin: 0;overflow-x: hidden;box-sizing: border-box;}.bottom-view {width: 1000px;height: 800px;}</style>
</head><body>
<div class="bottom-view"><div id="mapChart" style="width: 100%; height: 100%;"></div>
</div><script>// 3d地圖// 初始化圖表// 定義全局變量存儲JSON數據const scatterData = [{relationid: "1",title: "安慶電廠",name: "安慶電廠",projectType: "火電",lng: 118.175393,lat: 39.635113,value: [118.175393, 39.635113],},{relationid: "2",title: "黃山電廠",name: "黃山電廠",projectType: "光伏發電",lng: 117.939152,lat: 40.976204,value: [117.939152, 40.976204],},{relationid: "3",title: "",name: "",projectType: "光伏發電",lng: 110.939152,lat: 110.976204,value: [110.939152, 110.976204],},];const mapChartImglist = ['./mis/jmis/resources/business/images/hbportal/thermalpower.png','./mis/jmis/resources/business/images/hbportal/pvpower.png','./mis/jmis/resources/business/images/hbportal/hydropower.png']// 定義全局變量存儲JSON數據let hebei;// 使用fetch加載JSON文件fetch('./json/hebei.json')  // 確保路徑正確.then(response => response.json()).then(data => {hebei = data;console.log('數據加載完成:', hebei);// 在這里調用需要JSON數據的方法useJsonData();}).catch(error => {console.error('加載JSON文件失敗:', error);});function useJsonData() {echarts.registerMap("hebei", hebei);const chartMapChartDom = document.getElementById('mapChart');const myMapChart = echarts.init(chartMapChartDom);let seriesList = [];let mapChartdata = scatterData.map((item, index) => {return {name: item.title,value: [item.lng, item.lat, 0],id: item.relationid,label: {show: true,position: "bottom",distance: -57,formatter(params) {return "   ";},textStyle: {// color: "transparent",color: "#ff0000",padding: [5, 5],backgroundColor: {image:item.projectType == "火電"? mapChartImglist[0]: item.projectType == "光伏發電"? mapChartImglist[1]: mapChartImglist[2],},},},emphasis: {label: {show: true,position: "bottom",distance: -57,formatter(params) {return "   ";},textStyle: {// color: "transparent",color: "#ff0000",padding: [5, 5],backgroundColor: {image:item.projectType == "火電"? mapChartImglist[0]: item.projectType == "光伏發電"? mapChartImglist[1]: mapChartImglist[2],},radius: "100%",},},},};});seriesList.push({name: "自定義圖標",type: "scatter3D",coordinateSystem: "geo3D",data: mapChartdata,symbol: "",symbolSize: [0, 50],zlevel: 6,itemStyle: {color: "red",borderColor: "transparent",borderWidth: 15,},});console.log("看看seriesList是什么", seriesList)// 配置項myMapChart.setOption({// backgroundColor: '#03213D',animation: false,tooltip: {trigger: "axis",},geo3D: {map: "hebei",show: true,regionHeight: 5, // 地圖厚度top: -60,itemStyle: {// 三維地理坐標系組件 中三維圖形的視覺屬性,包括顏色,透明度,描邊等。color: "rgba(49, 111, 128,.7)", // 地圖板塊的顏色// color: 'rgba(95,158,160,0.5)', // TODO地圖板塊的顏色opacity: 1, // 圖形的不透明度 [ default: 1 ]borderWidth: 1, // (地圖板塊間的分隔線)圖形描邊的寬度。加上描邊后可以更清晰的區分每個區域   [ default: 0 ]borderColor: "rgba(147, 235, 248,.6)", // 圖形描邊的顏色。[ default: #333 ]// borderColor: '#000' // TODO圖形描邊的顏色。[ default: #333 ]},label: {// 標簽的相關設置show: false, // (地圖上的城市名稱)是否顯示標簽 [ default: false ]// distance: 50,               // 標簽距離圖形的距離,在三維的散點圖中這個距離是屏幕空間的像素值,其它圖中這個距離是相對的三維距離// formatter:,               // 標簽內容格式器textStyle: {// 標簽的字體樣式color: "#fff", // 地圖初始化區域字體顏色fontSize: 14, // 字體大小opacity: 1, // 字體透明度backgroundColor: "rgba(0,23,11,0)", // 字體背景色},},emphasis: {// 鼠標 hover 高亮時圖形和標簽的樣式 (當鼠標放上去時  label和itemStyle 的樣式)label: {// TODO label高亮時的配置show: false,// textStyle: {//   color: '#fff', // 高亮時標簽顏色變為 白色//   fontSize: 15 // 高亮時標簽字體 變大// }},itemStyle: {// TODO itemStyle高亮時的配置color: "#115a5a", // 高亮時地圖板塊顏色改變// color: '#66ffff' // 高亮時地圖板塊顏色改變},},groundPlane: {// 地面可以讓整個組件有個“擺放”的地方,從而使整個場景看起來更真實,更有模型感。show: false, // 是否顯示地面。[ default: false ]color: "#aaa", // 地面顏色。[ default: '#aaa' ]},shading: "color", // 三維地理坐標系組件中三維圖形的著色效果,echarts-gl 中支持下面三種著色方式:// 'color' 只顯示顏色,不受光照等其它因素的影響。// 'lambert' 通過經典的 lambert 著色表現光照帶來的明暗。// 'realistic' 真實感渲染,配合 light.ambientCubemap 和 postEffect 使用可以讓展示的畫面效果和質感有質的提升。ECharts GL 中使用了基于物理的渲染(PBR) 來表現真實感材質。// realisticMaterial: {}    // 真實感材質相關的配置項,在 shading 為'realistic'時有效。// lambertMaterial: {}      // lambert 材質相關的配置項,在 shading 為'lambert'時有效。// colorMaterial: {}        // color 材質相關的配置項,在 shading 為'color'時有效。light: {// 光照相關的設置。在 shading 為 'color' 的時候無效。  光照的設置會影響到組件以及組件所在坐標系上的所有圖表。合理的光照設置能夠讓整個場景的明暗變得更豐富,更有層次。main: {// 場景主光源的設置,在 globe 組件中就是太陽光。color: "#fff", // 主光源的顏色。[ default: #fff ]intensity: 1.2, // 主光源的強度。[ default: 1 ]shadow: false, // 主光源是否投射陰影。默認關閉。    開啟陰影可以給場景帶來更真實和有層次的光照效果。但是同時也會增加程序的運行開銷。// shadowQuality: 'high',      // 陰影的質量。可選'low', 'medium', 'high', 'ultra' [ default: 'medium' ]alpha: 55, // 主光源繞 x 軸,即上下旋轉的角度。配合 beta 控制光源的方向。[ default: 40 ]beta: 10, // 主光源繞 y 軸,即左右旋轉的角度。[ default: 40 ]},ambient: {// 全局的環境光設置。color: "#fff", // 環境光的顏色。[ default: #fff ]intensity: 0.5, // 環境光的強度。[ default: 0.2 ]},},viewControl: {// 用于鼠標的旋轉,縮放等視角控制。projection: "perspective", // 投影方式,默認為透視投影'perspective',也支持設置為正交投影'orthographic'。autoRotate: false, // 是否開啟視角繞物體的自動旋轉查看。[ default: false ]autoRotateDirection: "cw", // 物體自傳的方向。默認是 'cw' 也就是從上往下看是順時針方向,也可以取 'ccw',既從上往下看為逆時針方向。autoRotateSpeed: 10, // 物體自傳的速度。單位為角度 / 秒,默認為10 ,也就是36秒轉一圈。autoRotateAfterStill: 3, // 在鼠標靜止操作后恢復自動旋轉的時間間隔。在開啟 autoRotate 后有效。[ default: 3 ]damping: 0, // 鼠標進行旋轉,縮放等操作時的遲滯因子,在大于等于 1 的時候鼠標在停止操作后,視角仍會因為一定的慣性繼續運動(旋轉和縮放)。[ default: 0.8 ]rotateSensitivity: 1, // 旋轉操作的靈敏度,值越大越靈敏。支持使用數組分別設置橫向和縱向的旋轉靈敏度。默認為1, 設置為0后無法旋轉。   rotateSensitivity: [1, 0]——只能橫向旋轉; rotateSensitivity: [0, 1]——只能縱向旋轉。zoomSensitivity: 1, // 縮放操作的靈敏度,值越大越靈敏。默認為1,設置為0后無法縮放。panSensitivity: 1, // 平移操作的靈敏度,值越大越靈敏。默認為1,設置為0后無法平移。支持使用數組分別設置橫向和縱向的平移靈敏度panMouseButton: "left", // 平移操作使用的鼠標按鍵,支持:'left' 鼠標左鍵(默認);'middle' 鼠標中鍵 ;'right' 鼠標右鍵(注意:如果設置為鼠標右鍵則會阻止默認的右鍵菜單。)rotateMouseButton: "left", // 旋轉操作使用的鼠標按鍵,支持:'left' 鼠標左鍵;'middle' 鼠標中鍵(默認);'right' 鼠標右鍵(注意:如果設置為鼠標右鍵則會阻止默認的右鍵菜單。)distance: 130, // [ default: 100 ] 默認視角距離主體的距離,對于 grid3D 和 geo3D 等其它組件來說是距離中心原點的距離,對于 globe 來說是距離地球表面的距離。在 projection 為'perspective'的時候有效。// distance: 200, // [ default: 100 ] 默認視角距離主體的距離,對于 grid3D 和 geo3D 等其它組件來說是距離中心原點的距離,對于 globe 來說是距離地球表面的距離。在 projection 為'perspective'的時候有效。minDistance: 40, // [ default: 40 ] 視角通過鼠標控制能拉近到主體的最小距離。在 projection 為'perspective'的時候有效。maxDistance: 400, // [ default: 400 ] 視角通過鼠標控制能拉遠到主體的最大距離。在 projection 為'perspective'的時候有效。alpha: 60, // 視角繞 x 軸,即上下旋轉的角度。配合 beta 可以控制視角的方向。[ default: 40 ]beta: 0, // 視角繞 y 軸,即左右旋轉的角度。[ default: 0 ]// minAlpha: -360, // 上下旋轉的最小 alpha 值。即視角能旋轉到達最上面的角度。[ default: 5 ]// maxAlpha: 360, // 上下旋轉的最大 alpha 值。即視角能旋轉到達最下面的角度。[ default: 90 ]// minBeta: -360, // 左右旋轉的最小 beta 值。即視角能旋轉到達最左的角度。[ default: -80 ]// maxBeta: 360, // 左右旋轉的最大 beta 值。即視角能旋轉到達最右的角度。[ default: 80 ]center: [0, 0, 0], // 視角中心點,旋轉也會圍繞這個中心點旋轉,默認為[0,0,0]animation: true, // 是否開啟動畫。[ default: true ]animationDurationUpdate: 1000, // 過渡動畫的時長。[ default: 1000 ]animationEasingUpdate: "cubicInOut", // 過渡動畫的緩動效果。[ default: cubicInOut ]},},series: seriesList,});myMapChart.on("click", (res) => {if (res.seriesType === "scatter3D") {console.log("點擊到了", res);// 在這里處理點擊事件}});}
</script>
</body></html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75370.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75370.shtml

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

相關文章

深度剖析 MySQL 與 Redis 緩存一致性:理論、方案與實戰

在當今的互聯網應用開發中&#xff0c;MySQL 作為可靠的關系型數據庫&#xff0c;與 Redis 這一高性能的緩存系統常常協同工作。然而&#xff0c;如何確保它們之間的數據一致性&#xff0c;成為了開發者們面臨的重要挑戰。本文將深入探討 MySQL 與 Redis 緩存一致性的相關問題&…

DAO 類的職責與設計原則

1. DAO 的核心職責 DAO&#xff08;Data Access Object&#xff0c;數據訪問對象&#xff09;的主要職責是封裝對數據的訪問邏輯&#xff0c;但它與純粹的數據實體類&#xff08;如 DTO、POJO&#xff09;不同&#xff0c;也與 Service 業務邏輯層不同。 DAO 應該做什么&…

【Kubernetes】如何使用 kubeadm 搭建 Kubernetes 集群?還有哪些部署工具?

使用 kubeadm 搭建 Kubernetes 集群是一個比較常見的方式。kubeadm 是 Kubernetes 提供的一個命令行工具&#xff0c;它可以簡化 Kubernetes 集群的初始化和管理。下面是使用 kubeadm 搭建 Kubernetes 集群的基本步驟&#xff1a; 1. 準備工作 確保你的環境中有兩臺或更多的機…

Pycharm(十二)列表練習題

一、門和鑰匙 小X在一片大陸上探險&#xff0c;有一天他發現了一個洞穴&#xff0c;洞穴里面有n道門&#xff0c; 打開每道門都需要對應的鑰匙&#xff0c;編號為i的鑰匙能用于打開第i道門&#xff0c; 而且只有在打開了第i(i>1)道門之后&#xff0c;才能打開第i1道門&#…

在未歸一化的線性回歸模型中,特征的尺度差異可能導致模型對特征重要性的誤判

通過數學公式來更清晰地說明歸一化對模型的影響&#xff0c;以及它如何改變特征的重要性評估。 1. 未歸一化的情況 假設我們有一個線性回歸模型&#xff1a; y β 0 β 1 x 1 β 2 x 2 ? y \beta_0 \beta_1 x_1 \beta_2 x_2 \epsilon yβ0?β1?x1?β2?x2?? 其…

JS—頁面渲染:1分鐘掌握頁面渲染過程

個人博客&#xff1a;haichenyi.com。感謝關注 一. 目錄 一–目錄二–頁面渲染過程三–DOM樹和渲染樹 二. 頁面渲染過程 瀏覽器的渲染過程可以分解為以下幾個關鍵步驟 2.1 解析HTML&#xff0c;形成DOM樹 瀏覽器從上往下解析HTML文檔&#xff0c;將標簽轉成DOM節點&#…

niuhe插件, 在 go 中渲染網頁內容

思路 niuhe 插件生成的 go 代碼是基于 github.com/ma-guo/niuhe 庫進行組織管理的, niuhe 庫 是對 go gin 庫的一個封裝&#xff0c;因此要顯示網頁, 可通過給 gin.Engine 指定 HTMLRender 來實現。 實現 HTMLRender 我們使用 gitee.com/cnmade/pongo2gin 實現 1. main.go …

openEuler24.03 LTS下安裝HBase集群

前提條件 安裝好Hadoop完全分布式集群&#xff0c;可參考&#xff1a;openEuler24.03 LTS下安裝Hadoop3完全分布式 安裝好ZooKeeper集群&#xff0c;可參考&#xff1a;openEuler24.03 LTS下安裝ZooKeeper集群 HBase集群規劃 node2node3node4MasterBackup MasterRegionServ…

LVGL移植說明

https://www.cnblogs.com/FlurryHeart/p/18104596 參考&#xff0c;里面說明了裸機移植以及freeRTOS系統移植。 移植到linux https://blog.csdn.net/sunchao124/article/details/144952514

ubuntu虛擬機裁剪img文件系統

1. 定制文件系統前期準備 將rootfs.img文件準備好&#xff0c;并創建target文件夾2. 掛載文件系統 sudo mount rootfs.img target #掛載文件系統 sudo chroot target #進入chroot環境3. 內裁剪文件系統 增刪裁剪文件系統 exit #退出chroot環境 sudo umount target…

esp826601s固件燒錄方法(ch340+面包板)

esp826601s固件燒錄方法&#xff08;ch340面包板&#xff09; 硬件 stm32f10c8t6&#xff0c;esp826601s,面包板&#xff0c;ch340(usb轉ttl),st_link&#xff08;供電&#xff09; 接線 燒錄時&#xff1a; stm32f10c8t6&#xff1a;gnd->負極&#xff0c; 3.3->正極…

Servlet 點擊計數器

Servlet 點擊計數器 引言 Servlet 是 Java 企業版&#xff08;Java EE&#xff09;技術中的一種服務器端組件&#xff0c;用于處理客戶端請求并生成動態內容。本文將詳細介紹如何使用 Servlet 實現一個簡單的點擊計數器&#xff0c;幫助讀者了解 Servlet 的基本用法和原理。 …

LangChain vs. LlamaIndex:深入對比與實戰應用

目錄 引言LangChain 與 LlamaIndex 概述 什么是 LangChain&#xff1f;什么是 LlamaIndex&#xff1f;兩者的核心目標與適用場景 架構與設計理念 LangChain 的架構設計LlamaIndex 的架構設計關鍵技術差異 核心功能對比 數據連接與處理查詢與檢索機制上下文管理能力插件與擴展性…

【Java中級】10章、內部類、局部內部類、匿名內部類、成員內部類、靜態內部類的基本語法和細節講解配套例題鞏固理解【5】

?? 【內部類】干貨滿滿&#xff0c;本章內容有點難理解&#xff0c;需要明白類的實例化&#xff0c;學完本篇文章你會對內部類有個清晰的認知 &#x1f495; 內容涉及內部類的介紹、局部內部類、匿名內部類(重點)、成員內部類、靜態內部類 &#x1f308; 跟著B站一位老師學習…

內容中臺:驅動多渠道營銷的關鍵策略

在數字營銷快速發展的今天&#xff0c;企業需要在多個渠道&#xff08;網站、社交媒體、移動應用等&#xff09;上同步管理內容。盡管網站仍是品牌展示的核心&#xff0c;但信息分散、多平臺重復創建內容的問題&#xff0c;讓營銷人員面臨巨大的管理挑戰。 內容中臺&#xff0…

SvelteKit 最新中文文檔教程(17)—— 僅服務端模塊和快照

前言 Svelte&#xff0c;一個語法簡潔、入門容易&#xff0c;面向未來的前端框架。 從 Svelte 誕生之初&#xff0c;就備受開發者的喜愛&#xff0c;根據統計&#xff0c;從 2019 年到 2024 年&#xff0c;連續 6 年一直是開發者最感興趣的前端框架 No.1&#xff1a; Svelte …

CMake 中的置變量

在 CMake 中&#xff0c;變量是存儲和傳遞信息的重要方式。以下是一些常用的 CMake 變量&#xff0c;以表格形式列出&#xff0c;包括它們的名稱、含義和常見用途&#xff1a; 變量名稱含義常見用途CMAKE_CURRENT_SOURCE_DIR當前處理的 CMakeLists.txt 文件所在的源代碼目錄的…

深入解析C++類:面向對象編程的核心基石

一、類的本質與核心概念 1.1 類的基本定義 類是將**數據&#xff08;屬性&#xff09;與操作&#xff08;方法&#xff09;**封裝在一起的用戶自定義類型&#xff0c;是面向對象編程的核心單元。 // 基礎類示例 class BankAccount { private: // 訪問控制string owner; …

介紹 Docker 的基本概念和優勢,以及在應用程序開發中的實際應用及數組講解

Docker 是一種輕量級的容器化技術&#xff0c;能夠讓開發者將應用程序和其所有依賴項打包成一個獨立的容器&#xff0c;實現快速部署和運行。以下是 Docker 的基本概念和優勢&#xff1a; 基本概念&#xff1a; 鏡像&#xff08;Image&#xff09;&#xff1a;鏡像是一個只讀的…

在msys2里面的mingw64下面編譯quickjs

其實非常的簡單&#xff0c;就是正常的make 和make install就行了&#xff0c;這里只是簡單的做個編譯過程記錄。 打開開始--程序--里面的msys64里面的mingw64控制臺窗口&#xff0c;切換到quickjs下載解壓縮后的目錄&#xff0c;執行make和make install ndyHP66G5 MINGW64 ~…