OpenLayers 獲取地圖狀態

注:當前使用的是 ol 5.3.0 版本,天地圖使用的key請到天地圖官網申請,并替換為自己的key

地圖狀態信息包括中心點、當前縮放級別、比例尺以及當前鼠標移動位置信息等,在WebGIS開發中,地圖狀態可以方便快捷的向用戶展示基本地圖信息,有利于增強與用戶的交互。本節主要介紹地圖狀態

1. 獲取地圖縮放級別

通過監聽地圖渲染完成事件postrender獲取地圖縮放級別。

const zoomEle = document.querySelector(".zoomValue")
map.on('postrender', evt => {const view = map.getView()zoomEle.textContent = parseInt(view.getZoom())
})

2. 獲取地圖坐標

通過監聽地圖鼠標移動事件pointermove獲取經緯度坐標,保留六位小數精度。

const lngEle = document.querySelector(".lngValue")
const latEle = document.querySelector(".latValue")
map.on('pointermove', evt => {const coords = evt.coordinatelngEle.textContent = coords[0].toFixed(6)latEle.textContent = coords[1].toFixed(6)
})

3. 獲取地圖比例尺

在地圖中記載比例尺控件獲取當前地圖比例尺。

const scaleControl = new ol.control.ScaleLine({units: 'metric', // 'degrees-度', 'imperial-英制單位', 'nautical-海里', 'metric-米', 'us',默認值'metric'className: 'custome-scale-line',// 自定義css類樣式名// minWidth: 200,// 最小寬度target: document.querySelector(".custome-scale-line"),// 放置比例尺控件的目標容器
})
map.addControl(scaleControl)

4. 完整代碼

其中libs文件夾下的包需要更換為自己下載的本地包或者引用在線資源。

<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>熱力圖</title><meta charset="utf-8" /><script src="../../libs/js/ol-5.3.3.js"></script><script src="../../libs/js/jquery-2.1.1.min.js"></script><link rel="stylesheet" href="../../libs/css//ol.css"><style>* {padding: 0;margin: 0;font-size: 14px;font-family: '微軟雅黑';}html,body {width: 100%;height: 100%;}#map {position: absolute;top: 50px;bottom: 0;width: 100%;}#top-content {position: absolute;width: 100%;height: 50px;line-height: 50px;/* background: linear-gradient(135deg, #ff00cc, #ffcc00, #00ffcc, #ff0066); */background: linear-gradient(225.55deg, #5f006f 0%, #5b0085 100%);color: #fff;}h2 {text-align: center;font-size: 20px;}h2 span {margin: 0 20px;font-size: 20px;}.state {position: absolute;bottom: 10px;line-height: 30px;background: linear-gradient(135deg, #ff00cc, #ffcc00, #00ffcc, #ff0066);color: #fff;display: flex;justify-content: space-between;justify-items: center;height: 30px;left: 10%;right: 10%;border-radius: 5px;}.state-item {width: 100%;text-align: center;font-size: 16px;font-weight: bold;}#custome-scale-line {position: absolute;margin: 0 auto;bottom: 13px;right: 120px;width: 200px;text-align: center;color: #fff;border-radius: 5px;}.custome-scale-line-inner {margin: 1px;color: #eee;font-size: 14px;text-align: center;will-change: contents, width;}</style>
</head><body><div id="map" title="地圖顯示"></div><div id="top-content"><h2><span>地</span><span>圖</span><span>狀</span><span>態</span></h2></div><div class="state"><div class="state-item zoom-state"><label for="">縮放級別:</label><span class="zoomValue"></span></div><div class="state-item lnglat-state"><label for="">經度:</label><span class="lngValue"></span><label for="">緯度:</label><span class="latValue"></span></div><div class="state-item scale-state"><label for="">比例尺:</label><span class="scaleValue"></span></div></div><div class="custome-scale-line" id="custome-scale-line"></div>
</body></html><script>//地圖投影坐標系const projection = ol.proj.get('EPSG:3857');//==============================================================================////============================天地圖服務參數簡單介紹==============================////================================vec:矢量圖層==================================////================================img:影像圖層==================================////================================cva:注記圖層==================================////======================其中:_c表示經緯度投影,_w表示球面墨卡托投影================////==============================================================================//const TDTImgLayer = new ol.layer.Tile({title: "天地圖影像圖層",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=2a890fe711a79cafebca446a5447cfb2",attibutions: "天地圖注記描述",crossOrigin: "anoymous",wrapX: false})})const TDTImgCvaLayer = new ol.layer.Tile({title: "天地圖影像注記圖層",source: new ol.source.XYZ({url: "http://t0.tianditu.com/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=2a890fe711a79cafebca446a5447cfb2",attibutions: "天地圖注記描述",crossOrigin: "anoymous",wrapX: false})})const map = new ol.Map({target: "map",loadTilesWhileInteracting: true,view: new ol.View({center: [104.0635986160487, 30.660919181071225],zoom: 5,worldsWrap: true,minZoom: 1,maxZoom: 20,projection: "EPSG:4326"}),layers: [TDTImgLayer, TDTImgCvaLayer],// 鼠標控件:鼠標在地圖上移動時顯示坐標信息。controls: ol.control.defaults().extend([// 加載鼠標控件// new ol.control.MousePosition()])})map.on('click', evt => {console.log(evt.coordinate)})const scaleControl = new ol.control.ScaleLine({units: 'metric', // 'degrees-度', 'imperial-英制單位', 'nautical-海里', 'metric-米', 'us',默認值'metric'className: 'custome-scale-line',// 自定義css類樣式名// minWidth: 200,// 最小寬度target: document.querySelector(".custome-scale-line"),// 放置比例尺控件的目標容器})map.addControl(scaleControl)const lngEle = document.querySelector(".lngValue")const latEle = document.querySelector(".latValue")map.on('pointermove', evt => {const coords = evt.coordinatelngEle.textContent = coords[0].toFixed(6)latEle.textContent = coords[1].toFixed(6)})const zoomEle = document.querySelector(".zoomValue")map.on('postrender', evt => {const view = map.getView()zoomEle.textContent = parseInt(view.getZoom())})
</script>

OpenLayers示例數據下載,請回復關鍵字:ol數據

全國信息化工程師-GIS 應用水平考試資料,請回復關鍵字:GIS考試

【GIS之路】 已經接入了智能助手,歡迎關注,歡迎提問。

歡迎訪問我的博客網站-長談GIShttp://shanhaitalk.com

都看到這了,不要忘記點贊、收藏 + 關注

本號不定時更新有關?GIS開發 相關內容,歡迎關注?!

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

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

相關文章

JxBrowser 8.8.0 版本發布啦!

一次調用即可下載文件精準清除瀏覽數據右鍵點擊位置檢測獲取元素在視口中的位置 &#x1f517; 點擊此處了解更多詳情。 &#x1f193; 獲取 30 天免費試用。

React 中的TypeScript開發范式

在 TypeScript 中使用 React 可以提高代碼的可維護性、可讀性和可靠性。TypeScript 提供了靜態類型檢查和豐富的類型系統&#xff0c;這些功能在 React 開發中非常有用。下面詳細介紹如何在 React 項目中使用 TypeScript&#xff0c;并結合泛型和 infer 來定義類型。 1. 項目初…

72道Nginx高頻題整理(附答案背誦版)

1. 簡述什么是Nginx &#xff1f; Nginx 是一個開源的高性能HTTP和反向代理服務器&#xff0c;也能夠用作IMAP/POP3/SMTP代理服務器。它最初由Igor Sysoev為俄羅斯的一個大型網站Rambler開發&#xff0c;并在2004年首次公開發布。Nginx被設計用來解決C10k問題&#xff0c;即同…

AI時代,數據分析師如何成為不可替代的個體

在數據爆炸的 AI 時代&#xff0c;AI工具正以驚人的速度重塑數據分析行業&#xff0c;數據分析師的工作方式正在經歷一場前所未有的變革。數據分析師又該如何破局&#xff0c;讓自己不被AI取代呢&#xff1f; 一、AI工具對重復性工作的徹底解構 如以往我們需要花幾天寫一份數…

DockerHub與私有鏡像倉庫在容器化中的應用與管理

哈嘍&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的應用與管理 Docker Hub的基本概念與使用方法 Docker Hub是Docker官方提供的一個公共鏡像倉庫&#xff0c;用戶可以在其中找到各種操作系統、軟件和應用的鏡像。開發者可以通過Docker Hub輕松獲取所…

Kafka入門-Broker以及文件存儲機制

Kafka Broker Broker實際上就是kafka實例&#xff0c;每一個節點都是獨立的Kafka服務器。 Zookeeper中存儲的Kafka信息 節點的服役以及退役 服役 首先要重新建立一臺全新的服務器105&#xff0c;并且在服務器中安裝JDK、Zookeeper、以及Kafka。配置好基礎的信息之后&#x…

dexcap升級版之DexWild——面向戶外環境的靈巧手交互策略:人類和機器人演示協同訓練(人類直接帶上動捕手套采集數據)

前言 截止到25年6.6日&#xff0c;在沒動我司『七月在線』南京、武漢團隊的機器的前提下&#xff0c;長沙這邊所需的前幾個開發設備都已到齊——機械臂、宇樹g1 edu、VR、吊架 ?長沙團隊必須盡快追上南京步伐 加速前進 如上篇文章所說的&#xff0c; 為盡快 讓近期新招的新同…

【基于阿里云搭建數據倉庫(離線)】使用UDTF時出現報錯“FlatEventUDTF cannot be resolved”

目錄 問題&#xff1a; 可能的原因有&#xff1a; 解決方法&#xff1a; 問題&#xff1a; 已經將包含第三方依賴的jar包上傳到dataworks&#xff0c;并且成功注冊函數&#xff0c;但是還是報錯&#xff1a;“FlatEventUDTF cannot be resolved”&#xff0c;如下&#xff1a…

06 Deep learning神經網絡編程基礎 激活函數 --吳恩達

深度學習激活函數詳解 一、核心作用 引入非線性:使神經網絡可學習復雜模式控制輸出范圍:如Sigmoid將輸出限制在(0,1)梯度傳遞:影響反向傳播的穩定性二、常見類型及數學表達 Sigmoid σ ( x ) = 1 1 +

【LC實戰派】小智固件編譯

這篇寫給立創吳總&#xff0c;是節前答應他配合git代碼的說明&#xff1b;也給所有對小智感興趣的小伙伴。 請多提意見&#xff0c;讓這份文檔更有價值 - 第一當然是拉取源碼 - git clone https://github.com/78/xiaozhi-esp32.git 完成后&#xff0c;先查看固件中實際的…

有沒有 MariaDB 5.5.56 對應 MySQL CONNECTION_CONTROL 插件

有沒有 MariaDB 對應 MySQL CONNECTION_CONTROL 插件 背景 寫這篇文章的目的是因為昨晚半夜突然被call起來&#xff0c;有一套系統的mysql數據庫啟動失敗了。嘗試了重啟服務器也不行。讓我協助排查一下問題出在哪。 分析過程 一開始拿到服務器IP地址&#xff0c;就去數據庫…

初學 pytest 記錄

安裝 pip install pytest用例可以是函數也可以是類中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…

【LeetCode】算法詳解#6 ---除自身以外數組的乘積

1.題目介紹 給定一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法&#xff0c;且在 O…

Kubernetes 節點自動伸縮(Cluster Autoscaler)原理與實踐

在 Kubernetes 集群中&#xff0c;如何在保障應用高可用的同時有效地管理資源&#xff0c;一直是運維人員和開發者關注的重點。隨著微服務架構的普及&#xff0c;集群內各個服務的負載波動日趨明顯&#xff0c;傳統的手動擴縮容方式已無法滿足實時性和彈性需求。 Cluster Auto…

LLMs 系列科普文(11)

目前我們已經介紹了大語言模型訓練的兩個主要階段。第一階段被稱為預訓練階段&#xff0c;主要是基于互聯網文檔進行訓練。當你用互聯網文檔訓練一個語言模型時&#xff0c;得到的就是所謂的 base 模型&#xff0c;它本質上就是一個互聯網文檔模擬器&#xff0c;我們發現這是個…

深度學習環境配置指南:基于Anaconda與PyCharm的全流程操作

一、環境搭建前的準備 1. 查看基礎環境位置 conda env list 操作說明&#xff1a;通過該命令確認Anaconda默認環境&#xff08;base&#xff09;所在磁盤路徑&#xff08;如D盤&#xff09;&#xff0c;后續操作需跳轉至該磁盤根目錄。 二、創建與激活獨立虛擬環境 1. 創…

【2D與3D SLAM中的掃描匹配算法全面解析】

引言 掃描匹配(Scan Matching)是同步定位與地圖構建(SLAM)系統中的核心組件&#xff0c;它通過對齊連續的傳感器觀測數據來估計機器人的運動。本文將深入探討2D和3D SLAM中的各種掃描匹配算法&#xff0c;包括數學原理、實現細節以及實際應用中的性能對比&#xff0c;特別關注…

力扣160.相交鏈表

題目描述 難度&#xff1a;簡單 示例 思路 使用雙指針 使用指針分別指向兩個不同的鏈表進行比較 解題方法 1.首先進行非空判斷 2.初始化指針分別指向兩個鏈表 3.遍歷鏈表 while (pA ! pB)&#xff1a; 當pA和pB不相等時&#xff0c;繼續循環。如果pA和pB相等&#xff0c;說明找…

本地項目push到git

cd /home/user/project git init 添加遠程倉庫地址 git remote add origin https://github.com/user/repo.git 創建并切換到新分支 git checkout -b swift 添加文件到暫存區 git add . git commit -m “swift訓練評測” git push -u origin swift —force #首次 git push …

uni-app學習筆記二十九--數據緩存

uni.setStorageSync(KEY,DATA) 將 data 存儲在本地緩存中指定的 key 中&#xff0c;如果有多個key相同&#xff0c;下面的會覆蓋掉原上面的該 key 對應的內容&#xff0c;這是一個同步接口。數據可以是字符串&#xff0c;可以是數組。 <script setup>uni.setStorageSyn…