OpenLayers:extent與view extent 介紹

一、范圍的概念

1.什么是范圍?

在Openlayers中范圍(Extent)是用于表示地理空間區域的一種概念。它通常由一個數字數組構成,數組中的內容為:[最小x坐標,最小y坐標,最大x坐標,最大y坐標]

Extent實際上表示了一個矩形的空間范圍:

2.什么是視圖范圍?

視圖范圍可以理解為Openlayers的map在瀏覽器視口中所顯示的地理空間范圍,這個范圍被map所關聯的view(視圖)來存儲和管理,所以稱之為視圖范圍。

二、視圖范圍的使用

1.設置視圖范圍

想要設置視圖范圍可以在實例化View時通過extent屬性來設置。

但是在實例化完成后似乎就沒有辦法去修改一個視圖的extent了。

2.獲取視圖范圍

獲取地圖當前的視圖范圍是一個常見的操作,當前的視圖范圍可以幫助我們去甄別一些要素是否應該被現實從而實現要素的“懶加載”。這個范圍一般可以通過view.calculateExtent()方法計算得到。

  // 當前的視圖范圍const extent = map.getView().calculateExtent();

如果map已經與view進行了綁定,則直接調用calculateExtent()就可以計算出視圖的范圍。但是在一些特殊情況下(如,map沒有與view相綁定或者view綁定了多個map)想要獲取視圖范圍,此時就要給calculateExtent()傳遞一個box size 作為參數,最終計算出來的范圍將適配這個size,可以使用map.getSize()方法獲取地圖的尺寸用來作為參數計算視圖范圍。

// 如果map沒有與view相綁定
const extent = view.calculateExtent( map.getSize() );

三、其它類型中的范圍

1.圖層、數據源和幾何的范圍

Openlayers中 Layer(圖層)、Source(數據源)、Geometry(幾何)等重要的類型都有自己的 extent屬性,通常用于表示包含其內容的地理范圍。調用它們的getExtent()方法就可以獲取到它們的范圍。

// 獲取圖層的范圍
layer.getExtent()// 獲取數據源的范圍
source.getExtent()// 獲取幾何圖形的范圍
point.getExtent()
polyline.getExtent()
polygon.getExtent()

在實際的開發中,我經常會使用這些范圍來實現圖層的定位或幾何圖形的定位。

// 視角切換到圖層范圍
map.getView.fit(layer.getExtent())// 視角切換到某個幾何圖形
map.getView.fit(pointFeature.getGeometry().getExtent())

2.投影坐標系的范圍

投影坐標系也有自己的范圍,例如 EPSG:4326 的范圍就是 [-180, -90, 180, 90]。投影坐標系的范圍同樣也是通過它們的getExtent()方法獲取。

import { get as getProjection } from "ol/proj";getProjection("EPSG:4326").getExtent(),

在創建切片數據源的tileGrid時就有可能會用到投影范圍。

const tileGrid = new createXYZ({extent: getProjection("EPSG:4326").getExtent(),maxZoom: 18,
}),

四、常用的范圍方法

Openlayers中封裝了一批專門用來操作Extent的方法,這些方法可以輔助我們在實際開發中實現很多的功能。

1.獲取范圍的特征信息的方法

前面提到過范圍可以理解為就是一個“矩形框”,有一些方法專門用來計算矩形框的特征信息:

方法

描述

getSize

獲取范圍的尺寸

getArea

獲取范圍的面積

getWidth

獲取范圍的寬度

getHeight

獲取范圍的高度

getCenter

獲取范圍的中心點

getTopLeft

獲取范圍的左上角點

getTopRight

獲取范圍的右上角點

getBottomLeft

獲取范圍的左下角點

getBottomRight

獲取范圍的右下角點

2.范圍查詢方法

范圍最常用的一種場景就是進行范圍查詢。containsCoordinate(extent, coordinate)containsXY(extent, x, y)containsExtent(extent1, extent2) 三個方法可以用來進行范圍查詢。其中前兩個方法用于檢查坐標是否位于范圍內,最后一個方法則用于檢查一個范圍是否包含于另一個范圍內。

下面這個例子就展示了如何利用containsExtent方法檢查一個Featrue要素是否位于范圍內:

const extent = [...]; // 范圍
const feature = new Feature(...); //要素// 檢查要素是否位于范圍內
const res = containsExtent(extent, feature.getGeometry().getExtent())

3.范圍工廠方法

還有一些方法可以創建一個范圍,例如boundingExtent(coordinates)方法,它可以創建一個包含所有給定坐標的范圍。

下面的例子展示如何使用boundingExtent()方法創建一個包含所有點要素的范圍:

const pointFeatures = [...];// 創建一個包含所有點要素的范圍
const extent = boundingExtent(pointFeatures.map(r => r.getGeometry().getCoordinates())
);

參考資料

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

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

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

相關文章

can‘t set boot order in virtualbox

Boot order setting is ignored if UEFI is enabled https://forums.virtualbox.org/viewtopic.php?t99121 如果勾選EFI boot order就是灰色的 傳統BIOS就是可選的 然后選中任意介質,通過右邊的上下箭頭調節順序,最上面的應該是優先級最高的 然后就…

如何在 Kali 上解決使用 evil-winrm 時 Ruby Reline 的 quoting_detection_proc 警告

在使用 Kali Linux 運行 Ruby 工具(例如 evil-winrm)時,你可能會遇到以下警告: Warning: Remote path completions is disabled due to ruby limitation: undefined method quoting_detection_proc for module Reline這個警告會導…

工資管理系統的主要功能有哪些

工資管理系統通過自動化薪資計算、稅務處理、員工數據管理、報表生成等功能,極大地提升了薪資發放的效率和準確性。在傳統的人工薪資管理中,HR人員需要手動計算每位員工的薪資,并確保符合稅務要求,極易出錯且耗時。而現代工資管理…

C++語言程序設計——02 變量與數據類型

目錄 一、變量與數據類型(一)變量的數據類型(二)變量命名規則(三)定義變量(四)變量賦值(五)查看數據類型(六)數據類型的字節長度&…

咋用fliki的AI生成各類視頻?AI生成視頻教程

最近想制作視頻,多方考查了決定用fliki,于是訂閱了一年試試,這個AI生成的視頻效果來看真是不錯,感興趣的自己官網注冊個賬號體驗一下就知道了。 fliki官網 Fliki生成視頻教程 創建賬戶并登錄 首先,訪問fliki官網并注…

文章記單詞 | 第32篇(六級)

一,單詞釋義 inferior [?n?f??ri?(r)] adj. 較差的;次的;下級的;n. 下屬;次品joy [d???] n. 歡樂;喜悅;樂趣;樂事;v. 因… 而高興resemble [r??zembl] vt. 類…

windows上安裝Jenkins

1. 下載windows版 jenkins安裝包 2. 配置本地安全策略 在 Windows 11/10 上打開本地安全策略。 Secpol.msc 或本地安全策略編輯器是一個 Windows 管理工具,允許您在本地計算機上配置和管理與安全相關的策略。 安全設置-》本地策略-》用戶權限分配-》作為服務登錄…

dfs二叉樹中的深搜(回溯、剪枝)--力扣129、814、230、257

目錄 1.1題目鏈接:129.求根節點到葉結點數字之和 1.2題目描述:給你一個二叉樹的根節點 root ,樹中每個節點都存放有一個 0 到 9 之間的數字。 1.3解法(dfs-前序遍歷): 2.1題目鏈接:814.二叉樹剪枝 2.2題目描述&…

【樹形dp題解】dfs的巧妙應用

【樹形dp題解】dfs的巧妙應用 [P2986 USACO10MAR] Great Cow Gathering G - 洛谷 題目大意: Bessie 正在計劃一年一度的奶牛大集會,來自全國各地的奶牛將來參加這一次集會。當然,她會選擇最方便的地點來舉辦這次集會。 每個奶牛居住在 N N …

【c++深入系列】:new和delete運算符詳解

🔥 本文專欄:c 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄: “生活不會向你許諾什么,尤其不會向你許諾成功。它只會給你掙扎、痛苦和煎熬的過程。但只要你堅持下去,終有一天&…

Spring Boot 實現防盜鏈

在 Spring Boot 項目中實現防盜鏈可以通過多種方式,下面為你介紹兩種常見的實現方法,分別是基于請求頭 Referer 和基于令牌(Token)的防盜鏈。 基于請求頭 Referer 的防盜鏈 這種方法通過檢查請求頭中的 Referer 字段&#xff0c…

悄悄話識別、 打電話識別、攀高識別三種識別算法

在攝像頭正對場景下,悄悄話識別(唇語識別)、打電話識別和攀高識別是三種典型的行為檢測技術。以下從技術原理、算法模型、應用場景及挑戰等方面進行詳細分析: 一、悄悄話識別(唇語識別) 技術原理 唇語識別通過分析嘴唇的幾何特征(形狀、開合程度、運動軌跡)和動態變化…

centos部署的openstack發布windows虛擬機

?CentOS上部署的OpenStack可以發布Windows虛擬機?。在CentOS上部署OpenStack后,可以通過OpenStack平臺創建和管理Windows虛擬機。以下是具體的步驟和注意事項: ?安裝和配置OpenStack?: 首先,確保系統滿足OpenStack的最低硬件…

【電子通識】案例:電纜的安裝方式也會影響設備的可靠性?

背景 在日常生活中,我們常常會忽略一些看似微不足道的細節,但這些細節有時卻能決定設備的壽命和安全性。比如,你知道嗎?一根電纜的布置方式,可能會決定你的設備是否會因為冷凝水而損壞。 今天,我們就來聊聊…

【Web APIs】JavaScript 操作多個元素 ④ ( 表格全選復選框案例 )

文章目錄 一、核心要點解析 - 表格全選復選框案例1、案例需求2、復選框設置3、獲取 全選復選框 和 普通復選框4、設置 全選復選框 邏輯5、設置 普通復選框 邏輯 二、完整代碼示例1、代碼示例2、執行結果 一、核心要點解析 - 表格全選復選框案例 1、案例需求 在表格中 , 設置 多…

OpenAI發布GPT-4.1系列模型——開發者可免費使用

OpenAI剛剛推出GPT-4.1模型家族,包含GPT-4.1、GPT-4.1 Mini和GPT-4.1 Nano三款模型。重點是——現在全部免費開放! 雖然技術升級值得關注,但真正具有變革意義的是開發者能通過Cursor、Windsurf和GitHub Copilot等平臺立即免費調用這些模型。…

《重構全球貿易體系用戶指南》解讀

文章目錄 背景核心矛盾與理論框架美元的“特里芬難題”核心矛盾目標理論框架 政策工具箱的協同運作機制關稅體系的精準打擊匯率政策的混合干預安全工具的復合運用 實施路徑與全球秩序重構階段性目標 風險傳導與反制效應內部失衡加劇外部反制升級系統性風險 范式突破與理論再思考…

磁盤清理-C盤

0.采用的工具——WizTree(一定要以管理員身份運行) 沒有以管理員身份運行時: 以管理員身份運行:(查出很多之前沒有查出的文件) 1.該死的優酷!緩存占我11個G的內存 2.C 盤 Dell 文件夾下的 SARe…

錨定“體驗驅動”,銳捷EDN讓園區網絡“以人為本”

作者 | 曾響鈴 文 | 響鈴說 傳統的網絡升級路徑,一如巴別塔的建造思路一般——工程師們按技術藍圖逐層堆砌,卻常與地面用戶的實際需求漸行漸遠,從而帶來了諸多體驗痛點,如手工配置效率低下、關鍵業務用網無法保障、網絡架構趨于…

pid_t

用最簡單的方式解釋: pid_t 就像是一個"專門用來裝進程號碼的盒子"。 實際本質: 這個盒子里面裝的是整數(就像 int)但給它貼了專用標簽,標明"只能裝進程ID" 為什么不用普通int: 就像…