OpenLayers:視圖變換的方法

一、什么是視圖變換?

視圖變換就是指視圖的 extent(范圍)、center(中心點)、zoom(縮放級別)、 resolution(分辨率)、rotation(旋轉角)等參數發生變化從而導致地圖展示范圍改變的情況。

在OpenLayers中能夠實現視圖變換的方法有不少,但是在實際開發中我們主要還是推薦使用view的animate()fit()方法,這兩個方法功能強大可以實現許多特殊的視圖變換效果,在下面的章節中我將著重介紹這兩個方法。

二、animate方法

view.animate()方法的作用是以平滑的動畫來實現視圖的縮放級別、中心點、旋轉角度等屬性的變換。簡單來說animate()能夠實現飛行動畫或者叫視圖動畫,它能夠實現動態的效果,提升用戶的交互體驗。

1.參數介紹

animate()方法主要有兩個參數 動畫對象(們) 和 回調函數。

動畫對象

動畫對象中定義了一個動畫的相關配置,animate()方法可以接收多個動畫對象,從而將多個動畫連接起來,形成一個系列動畫。

例如,先縮放再平移:

view.animate({zoom: 10}, {center: [0, 0]});

回調函數

如果你提供一個函數作為animate()方法的最后一個參數,它將在系列動畫的末尾被調用。如果系列動畫執行完成則返回true,動畫被取消則返回false

view.animate({duration: 2000,zoom: initialZoom.value,center: initialCenter.value,},// 回調函數isFinish => {console.log(isFinish);console.log("視角飛行完成");});

動畫的取消

動畫可以通過用戶交互(例如拖動地圖)或調用view.setCenter()view.setResolution()view.setRotation()(或調用這些方法中的任何一個的其他方法)來取消。

2.動畫對象中的屬性

animate()方法的動畫對象中有著如下的屬性:

名稱

說明

center

動畫結束時視圖的中心點坐標,如[116,23]。

zoom

動畫結束時視圖的縮放級別。這優先于分辨率

resolution

動畫結束時視圖的分辨率。如果還提供縮放(zoom ),則此選項將被忽略。

rotation

動畫結束時視圖的旋轉角度。

anchor

在旋轉或分辨率動畫期間保持固定的可選錨點坐標,如[116,23]。

duration

動畫的持續時間(以毫秒為單位)。

easing

在動畫過程中使用的緩動函數(默認為inAndOut 先加速后減速)。該函數會在動畫的每一幀被調用,并接收一個表示動畫持續時間的比例值作為參數。函數應該返回一個0到1之間的數字,表示當前動畫進度相對于目標狀態的完成程度。

它們大致可以分為兩類:

  • 視圖參數centerzoomresolutionrotation,用于設置視圖該如何變化。
  • 動畫參數anchordurationeasing,用于設置視圖動畫的內容。

下面我將對其中幾個重點的參數做一下介紹。

anchor 錨點

錨點就是旋轉動畫和分辨率動畫的中心點,通過下面這個旋轉動畫示例應該可以很明顯的看出錨點的作用:

我寫了一個圍繞錨點旋轉180°的功能

const anchor = [113.00864859159968, 23.735462919857348];function rotate() {const view = window.map.getView();const currentRotation = view.getRotation();view.animate({duration: 3000,rotation: currentRotation + Math.PI,anchor,});
}

如果沒有設置錨點,則會圍繞中心點旋轉。

easing 緩動函數

緩動函數在動畫中十分的重要,它定義了動畫在持續時間內是如何進行。像 CSS 動畫中也有設置緩動函數的屬性:

在Opnelayers中給animate()方法設置緩動函數 ( easing屬性 ) , 可以使用OpenLayers中封裝好的緩動函數(ol/easing)或者自定義。這里我肯定推薦使用OpenLayers內置的緩動函數,因為自定義一個緩動函數需要有一定的數學基礎比較困難。

OpenLayers中內置的緩動函數如下:

函數

介紹

easeIn

緩慢開始然后逐漸加速

easeOut

快速開始然后逐漸減速

inAndOut

緩慢開始,然后加速,最后再減速

linear

保持固定速度

upAndDown

與 inAndOut 相似 ,但最終的減速過程會延遲。

三、fit方法

fit()方法的作用是將視圖匹配到一個范圍或幾何圖形,讓指定的幾何圖形或范圍完整地顯示在地圖視窗內。

1.參數介紹

fit()方法的參數也有兩個:匹配目標配置項

匹配目標可以是一個范圍也可以是一個幾何圖形。

// 匹配一個范圍
view.fit([minx , miny , maxx , maxy])// 匹配一個幾何圖形
view.fit(new Point([116,23]))

配置項中的屬性如下:

名稱

描述

size

用于適配該范圍的矩形框的像素尺寸。默認值為與該視圖相關聯的地圖的大小。如果沒有地圖與該視圖相連,或者有多個地圖與該視圖相連,則需提供所需的矩形框尺寸(例如 map.getSize() 所獲取的尺寸)。

padding

視圖的內邊距(以像素為單位)。屬性是一個數組 [上內邊距 , 有內邊距 , 左內邊距 , 右內邊距]

nearest

如果視圖的 constrainResolution 選項為 true,則獲取最接近的范圍,而不是實際能恰好適配該視圖的最接近范圍。

minResolution

我們縮放到的最小分辨率。

maxZoom

我們縮放到的最大縮放級別。如果已經設置了minResolution,該屬性將會被忽略。

duration

animate()方法。

easing

animate()方法。

callback

animate()方法。

在下面的例子中我實現了一個定位到錨點圖形的功能:

function flyToGeometry() {// 獲取錨點的幾何圖形const anchorGeometry = getLayer(window.map, {layerId: "vector-test",})[0].getSource().getFeatureById("anchor").getGeometry();window.map.getView().fit(anchorGeometry, {duration: 3000,minResolution: 0.000002682209014892578,});
}

參考資料

  1. OpenLayers v10.5.0 API - Class: View
  2. OpenLayers v10.5.0 API - Module: ol/easing

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

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

相關文章

數字孿生火星探測車,星際探索可視化

運用圖撲構建數字孿生火星探測車,高精度還原外觀與內部構造。實時映射探測車在火星表面的移動、探測作業及設備狀態,助力科研人員遠程監測、分析數據,為火星探索任務提供可視化決策支持。

【NLP 66、實踐 ? 基于Agent + Prompt Engineering文章閱讀】

你用什么擦干我的眼淚 莎士比亞全集 工業紙巾 還是你同樣泛紅的眼睛 —— 4.19 一、?【核心函數】定義大模型調用函數 call_large_model prompt:用戶傳入的提示詞(如 “請分析這篇作文的主題”),指導模型執行任務 client&…

黑馬Java基礎筆記-1

JVM,JDK和JRE JDK是java的開發環境 JVM虛擬機:Java程序運行的地方 核心類庫:Java已經寫好的東西,我們可以直接用。 System.out.print中的這些方法就是核心庫中的所包含的 開發工具: javac(編譯工具)、java&…

PR第一課

目錄 1.新建 2.PR內部設置 3.導入素材 4.關于素材窗口 5.關于編輯窗口 6.序列的創建 7.視頻、圖片、音樂 7.1 帶有透明通道的素材 8.導出作品 8.1 打開方法 8.2 導出時,需要修改的參數 1.新建 2.PR內部設置 隨意點開 編輯->首選項 中的任意內容&a…

Xcode16 調整 Provisioning Profiles 目錄導致證書查不到

cronet demo 使用的 ninja 打包,查找 Provisioning Profiles 路徑是 ~/Library/MobileDevice/Provisioning Profiles,但 Xcode16 把該路徑改為了 ~/Library/Developer/Xcode/UserData/Provisioning Profiles,導致在編譯 cronet 的demo 時找不…

【更新完畢】2025華中杯C題數學建模網絡挑戰賽思路代碼文章教學數學建模思路:就業狀態分析與預測

完整內容請看文末最后的推廣群 先展示文章和代碼、再給出四個問題詳細的模型 基于多模型下的就業狀態研究 摘要 隨著全球經濟一體化和信息技術的迅猛發展,失業問題和就業市場的匹配性問題愈加突出。為了解決這一問題,本文提出了一種基于統計學習和機器學…

[HOT 100] 1964. 找出到每個位置為止最長的有效障礙賽跑路線

文章目錄 1. 題目鏈接2. 題目描述3. 題目示例4. 解題思路5. 題解代碼6. 復雜度分析 1. 題目鏈接 1964. 找出到每個位置為止最長的有效障礙賽跑路線 - 力扣(LeetCode) 2. 題目描述 你打算構建一些障礙賽跑路線。給你一個 下標從 0 開始 的整數數組 obst…

2025年KBS SCI1區TOP:增強天鷹算法EBAO,深度解析+性能實測

目錄 1.摘要2.天鷹算法AO原理3.改進策略4.結果展示5.參考文獻6.代碼獲取 1.摘要 本文提出了增強二進制天鷹算法(EBAO),針對無線傳感器網絡(WSNs)中的入侵檢測系統(IDSs)。由于WSNs的特點是規模…

JavaScript數據類型簡介

在JavaScript中,理解不同的數據類型是掌握這門語言的基礎。數據類型決定了變量可以存儲什么樣的值以及這些值能夠執行的操作。JavaScript支持多種數據類型,每種都有其特定的用途和特點。本文將詳細介紹JavaScript中的主要數據類型,并提供一些…

性能比拼: Elixir vs Go(第二輪)

本內容是對知名性能評測博主 Anton Putra Elixir vs Go (Golang) Performance Benchmark (Round 2) 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 這是第二輪關于 Elixir 和 Go 的對比測試。我收到了一份來自 Elixir 創作者的 Pull Request ,并且我認為…

接口自動化 ——fixture allure

一.參數化實現數據驅動 上一篇介紹了參數化,這篇 說說用參數化實現數據驅動。在有很多測試用例的時候,可以將測試用例都存儲在文件里,進行讀寫調用。本篇主要介紹 csv 文件和 json 文件。 1.讀取 csv 文件數據 首先創建 csv 文件&#xff…

`peft`(Parameter-Efficient Fine-Tuning:高效微調)是什么

peft(Parameter-Efficient Fine-Tuning:高效微調)是什么 peft庫是Hugging Face推出的用于高效參數微調的庫,它能在不調整模型全部參數的情況下,以較少的可訓練參數對預訓練模型進行微調,從而顯著降低計算資源需求和微調成本。以下從核心功能、優勢、常見微調方法、使用場…

編程常見錯誤歸類

上一篇講了調試&#xff0c;今天通過一個舉例回憶一下上一篇內容吧&#xff01; 1. 回顧&#xff1a;調試舉例 在VS2022、X86、Debug的環境下&#xff0c;編譯器不做任何優化的話&#xff0c;下?代碼執?的結果是啥&#xff1f; #include <stdio.h> int main() {int …

在windows上交叉編譯opencv供RK3588使用

環境 NDK r27、RK3588 安卓板子、Android 12 步驟操作要點1. NDK 下載選擇 r27 版本&#xff0c;解壓到無空格路徑&#xff08;如 C:/ndk&#xff09;2. 環境變量配置添加 ANDROID_NDK_ROOT 和工具鏈路徑到系統 PATH3. CMake 參數調整指定 ANDROID_NATIVE_API_LEVEL31、ANDRO…

淺析MySQL事務鎖

在 MySQL 中,事務鎖是用于確保數據一致性和并發控制的重要機制。事務鎖可以幫助防止多個事務同時修改同一數據,從而避免數據不一致和臟讀、不可重復讀、幻讀等問題。 以下是 MySQL 事務鎖的關鍵點總結: 事務鎖:用于確保數據一致性和并發控制。鎖的類型: 行級鎖:InnoDB,粒…

vue3 文件下載(excel/rar/zip)

安裝axios npm install axios 在項目中引入 import axios from axios; 1、get接口excel文件下載 const file_key ref() const downLoadExcel (value:any) > {//file_key.value value axios({method: "get",url: "/api/da/download_excel/",//url:…

RT-Thread RTThread studio 初使用

RT-Thread Studio 下載 https://www.rt-thread.org/studio.html 安裝使用 https://bbs.elecfans.com/jishu_2425653_1_1.html 4 編譯問題解決 問題一&#xff1a;error: unknown type name clock_t 具體的類型值是在sys/_types.h中定義的&#xff0c;需要包含sys/_types.h 這個…

漢諾塔專題:P1760 通天之漢諾塔 題解 + Problem D: 漢諾塔 題解

1. P1760 通天之漢諾塔 題解 題目背景 直達通天路小A歷險記第四篇 題目描述 在你的幫助下&#xff0c;小 A 成功收集到了寶貴的數據&#xff0c;他終于來到了傳說中連接通天路的通天山。但是這距離通天路仍然有一段距離&#xff0c;但是小 A 突然發現他沒有地圖&#xff0…

探索 HumanoidBench:類人機器人學習的新平臺

在科技飛速發展的當下&#xff0c;類人機器人逐漸走進我們的視野&#xff0c;它們有著和人類相似的外形&#xff0c;看起來能像人類一樣在各種環境里完成復雜任務&#xff0c;潛力巨大。但實際上&#xff0c;讓類人機器人真正發揮出實力&#xff0c;還面臨著重重挑戰。 這篇文…

數據結構中的寶藏秘籍之廣義表

廣義表&#xff0c;也被稱作列表&#xff08;Lists&#xff09;&#xff0c;是一種遞歸的數據結構。它就像一個神秘的盒子&#xff0c;既可以裝著單個元素&#xff08;原子&#xff09;&#xff0c;也可以嵌套著其他的盒子&#xff08;子列表&#xff09;。比如廣義表 (a (b c)…