源碼分析之Openlayers中的控件篇Control基類介紹

概述

Openlayers 中內置了9類控件,這9類控件都是基于Control類,而Control類則是繼承于BaseObject類,如下圖所示:

在這里插入圖片描述

如上,這9類控件分別是:

  • Attribution:屬性控件
  • FullScreen:全屏控件
  • MousePosition:鼠標位置控件
  • OverviewMap:鷹眼控件
  • Rotate:旋轉控件源碼分析之Openlayers中的Rotate旋轉控件
  • ScaleLine:比例尺控件
  • Zoom:縮放控件,可參考源碼分析之Openlayers中的Zoom縮放控件
  • ZoomSlider:滑動縮放控件
  • ZoomToExtent:縮放到指定視圖范圍控件源碼分析之Openlayers中的ZoomToExtent控件

本文主要介紹控件的基類Control類。

源碼剖析

Control類的實現如下:

class Control extends BaseObject {constructor(options) {super();const element = options.element;if (element && !options.target && !element.style.pointerEvents) {element.style.pointerEvents = "auto";}this.element = element ? element : null;this.target_ = null;this.map_ = null;this.listenerKeys = [];if (options.render) {this.render = options.render;}if (options.target) {this.setTarget(options.target);}}disposeInternal() {this.element?.remove();super.disposeInternal();}getMap() {return this.map_;}setMap(map) {if (this.map_) {this.element?.remove();}for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {unlistenByKey(this.listenerKeys[i]);}this.listenerKeys.length = 0;this.map_ = map;if (map) {const target = this.target_ ?? map.getOverlayContainerStopEvent();target.appendChild(this.element);if (this.render !== VOID) {this.listenerKeys.push(listen(map, MapEventType.POSTRENDER, this.render, this));}map.render();}}render(mapEvent) {}setTarget(target) {this.target_ =typeof target === "string" ? document.getElementById(target) : target;}
}

Control類的構造函數

Control類的構造函數接受一個參數對象options,先是判斷options.element!element.style.pointerEvents以及!options.target是否存在,若為true,則修改element元素的樣式,element對應的就是控件的HTML Element;然后初始化this.element,若options.element不存在,則this.elementnull,反之為options.element;初始化this.target_this.map_null;初始化this.listenerKeys[];最后判斷options.render是否存在,若存在則覆蓋this.render方法;判斷options.target是否存在,若存在,則調用this.setTarget方法。

Control類的主要方法

Control類作為控件基類,它定義的方法很少,主要有如下幾個:

  • setTarget:接受一個參數target,若target是一個字符串,則調用document.getElementById獲取DOM節點,否則直接賦值,默認情況下,控件是會添加到overlay container中,這個方法會改變這個一默認行為

  • getMap: 獲取this.map_

  • setMap:Control類的核心方法,接受一個參數map對象,若this.map_存在該控件元素,則移除元素;并且循環遍歷this.listenerKeys移除注冊的事件監聽,并且清空this.listenerKeys,設置this.map_的值;然后判斷參數map是否存在,若存在,則重新添加控件元素到overlay container中,然后判斷this.render是否是空方法,若不為空方法,則調用listen方法注冊postrender類型的事件監聽,this.render方法即為注冊的回調函數,本質上它是子類中定義的一個方法;最后調用map.render方法。

  • render方法:空函數,會被Control的子類覆蓋

  • disposeInternal方法:清除方法,會移除控件元素,調用父類的disposeInternal方法移除監聽

總結

本文主要介紹了 Openlayers 中的控件類型分類以及控件基類Control類的實現。

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

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

相關文章

計算機網絡知識點全梳理(二.HTTP知識點總結)

目錄 HTTP基本概念 HTTP優缺點 HTTP優點&#xff08;1.1&#xff09; HTTP缺點 HTTP與HTTPS HTTP 與 HTTPS 的區別 HTTPS 解決 HTTP 的哪些安全問題&#xff1f; HTTPS 如何解決安全問題&#xff1f; HTTPS 連接建立的過程&#xff1a; HTTP/1.1、HTTP/2、HTTP/3 演…

第P2周:Pytorch實現CIFAR10彩色圖片識別

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 目標 實現CIFAR-10的彩色圖片識別實現比P1周更復雜一點的CNN網絡 具體實現 &#xff08;一&#xff09;環境 語言環境&#xff1a;Python 3.10 編 譯 器: …

Quant connect的優勢和不足,學習曲線難

Quant connect的優勢和不足 Quant connect作為一個成熟的算法交易平臺&#xff0c;具有許多優勢&#xff0c;包括&#xff1a; 強大的回測功能&#xff1a;Quant connect提供了豐富的數據源和回測功能&#xff0c;可以對各種交易策略進行全面的回測和分析。 容易上手&#xf…

深入理解 Ansible Playbook:組件與實戰

目錄 1 playbook介紹 2 YAML語言 2.1語法簡介 2.2數據類型 3 Playbook核心組件 3.1 hosts組件 3.2 remote_user組件 3.3 task列表和action組件 3.4 handlers 3.5 tags組件 3.6 其他組件說明 1 playbook介紹 playbook 劇本是由一個或多個"play"組成的列表。…

2024年食堂采購系統源碼技術趨勢:如何開發智能的供應鏈管理APP

本篇文章&#xff0c;小編將與大家一同探討2024年食堂采購系統的技術趨勢&#xff0c;并提供開發更智能的供應鏈管理APP的策略。 一、2024年食堂采購系統的技術趨勢 1.人工智能與機器學習的深度應用 在2024年&#xff0c;AI和機器學習在食堂采購系統中的應用將更加普遍。這些…

代碼隨想錄-算法訓練營-番外(圖論01:圖論理論基礎,所有可到達的路徑)

day01 圖論part01 今日任務:圖論理論基礎/所有可到達的路徑 代碼隨想錄圖論視頻部分還沒更新 https://programmercarl.com/kamacoder/圖論理論基礎.html#圖的基本概念 day01 所有可達路徑 鄰接矩陣 import java.util.Scanner;import java.util.List;import java.util.ArrayL…

系統架構的演變

什么是系統架構&#xff1f; 系統架構是系統的一種整體的高層次的結構表示&#xff0c;它確定了系統的基本組織、組件之間的關系、組件與環境的關系&#xff0c;以及指導其設計和發展的原則。隨著技術的發展和業務需求的增長&#xff0c;系統架構經歷了從簡單到復雜、從集中到…

c++總復習

C 中多態性在實際項目中的應用場景 圖形繪制系統 描述&#xff1a;在一個圖形繪制軟件中&#xff0c;可能有多種圖形&#xff0c;如圓形、矩形、三角形等。這些圖形都有一個共同的操作&#xff0c;比如繪制&#xff08;draw&#xff09;。通過多態性&#xff0c;可以定義一個基…

pip離線安裝一個github倉庫

要使用pip安裝一個本地Git倉庫&#xff0c;你可以按照以下步驟操作&#xff1a; 確保你已經克隆了Git倉庫到本地。 進入倉庫所在的目錄。 使用pip安裝。 以下是具體的命令&#xff1a; 克隆Git倉庫到本地&#xff08;替換下面的URL為你的倉庫URL&#xff09; git clone https…

【從零開始入門unity游戲開發之——C#篇04】棧(Stack)和堆(Heap),值類型和引用類型,以及特殊的引用類型string

文章目錄 知識回顧一、棧&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是棧和堆2、為什么要分棧和堆3、棧和堆的區別棧堆 4、總結 二、值類型和引用類型1、那么值類型和引用類型到底有什么區別呢&#xff1f;值類型引用類型 2、總結 三、特殊的引用類…

【C語言實現:用隊列模擬棧與用棧模擬隊列(LeetCode 225 232)】

LeetCode刷題記錄 &#x1f310; 我的博客主頁&#xff1a;iiiiiankor&#x1f3af; 如果你覺得我的內容對你有幫助&#xff0c;不妨點個贊&#x1f44d;、留個評論?&#xff0c;或者收藏?&#xff0c;讓我們一起進步&#xff01;&#x1f4dd; 專欄系列&#xff1a;LeetCode…

【Python】Selenium 爬蟲的使用技巧和案例

引言 Selenium 是 Python 中功能強大的自動化測試工具,因其能夠操控瀏覽器進行模擬操作,被廣泛應用于網頁數據爬取。相比傳統的 requests 等庫,Selenium 能更好地應對動態加載內容和復雜交互場景。本文將詳細介紹 Selenium 爬蟲的使用技巧,并提供實際案例來幫助讀者快速上…

MySQL SQL語句性能優化

MySQL SQL語句性能優化指南 一、查詢設計優化1. 避免 SELECT *2. 使用 WHERE 進行條件過濾3. 避免在索引列上使用函數和表達式4. 使用 LIMIT 限制返回行數5. 避免使用子查詢6. 優化 JOIN 操作7. 避免全表掃描 二、索引優化1. 使用合適的索引2. 覆蓋索引3. 索引選擇性4. 多列索引…

Mybatis動態sql執行過程

動態SQL的執行原理主要涉及到在運行時根據條件動態地生成SQL語句&#xff0c;然后將其發送給數據庫執行。以下是動態SQL執行原理的詳細解釋&#xff1a; 一、接收參數 動態SQL首先會根據用戶的輸入或系統的條件接收參數。這些參數可以是查詢條件、更新數據等&#xff0c;它們…

java jar包加密 jar-protect

介紹 java 本身是開放性極強的語言,代碼也容易被反編譯,沒有語言層面的一些常規保護機制,jar包很容易被反編譯和破解。 受classfinal&#xff08;已停止維護&#xff09;設計啟發,針對springboot日常項目開發,重新編寫安全可靠的jar包加殼加密技術,用于保護軟件版權。 使用說…

Linux:Git

Git常見指令&#xff1a; git help xx_command git xx_command --help git --version 查看git版本git config --global user.name "xxx_name" 全局級別的簽名設置&#xff0c;全局的放在本用 git config --global user.ema…

【WiFi】WiFi中RSSI、SNR、NF之間關系及說明

RSSI&#xff08;接收信號強度指示&#xff09; 定義&#xff1a; RSSI 是一個相對值&#xff0c;用于表示接收到的無線信號的強度。它通常由無線設備的硬件&#xff08;如無線網卡或無線芯片&#xff09;直接提供。 計算&#xff1a; RSSI 的計算通常是由設備的無線芯片完成的…

提升音頻轉錄準確性:VAD技術的應用與挑戰

引言 在音頻轉錄技術飛速發展的今天&#xff0c;我們面臨著一個普遍問題&#xff1a;在嘈雜環境中&#xff0c;轉錄系統常常將非人聲誤識別為人聲&#xff0c;導致轉錄結果出現錯誤。例如&#xff0c;在whisper模式下&#xff0c;系統可能會錯誤地轉錄出“謝謝大家”。本文將探…

[ZMQ] -- ZMQ通信Protobuf數據結構 1

1、前言背景 工作需要域間實現zmq通信&#xff0c;剛開始需要比較簡單的數據結構&#xff0c;比如兩個bool&#xff0c;后面可能就需要傳輸比較大的數據&#xff0c;所以記錄下實現流程&#xff0c;至于為啥選擇proto數據結構去做大數據傳輸&#xff0c;可能是地平線也用這個&…

順序表的使用,對數據的增刪改查

主函數&#xff1a; 3.c #include "3.h"//頭文件調用 SqlListptr sql_cerate()//創建順序表函數 {SqlListptr ptr(SqlListptr)malloc(sizeof(SqlList));//在堆區申請連續的空間if(NULLptr){printf("創建失敗\n");return NULL;//如果沒有申請成功&#xff…