arcgis js 4.x實現類似openalayers加載tilewms圖層效果

一、普通wms與tilewms區別

相同點:都是加載WMS服務。
不同點:TitleWMS會把當前可視窗口根據網格(開發者可以在調用OpenLayers api的時候自定義)切分,一片一片地返回回來,在前端進行整合。而ImageWMS則不會進行切割,每次請求都是只會返回一個當前窗口可見地地圖圖片。如果WMS服務對應地數據比較大并且網絡條件不是很好的時候,TileWMS交互體驗更好一點(因為做了切割,每次返回回來的圖片大小都比較小),而ImageWMS是返回一整個圖片,看起來會有較大的卡頓時間,交互感覺不好。

二、封裝一個TileWMSLayer圖層,代碼如下:

 let TileWMSLayer = BaseTileLayer.createSubclass({properties: {urlTemplate: null,spatialReference: null,tileInfo: null,},getTileUrl: function (level, row, col) {// return this.urlTemplate.replace("{z}", level).replace("{x}", col).replace("{y}", row);},fetchTile: function (level, row, col, options) {let out = this.getTileBounds(level, row, col);const url = this.urlTemplate + "&BBOX=" + out[0] + "," + out[1] + "," + out[2] + "," + out[3];// 基于生成的url請求平鋪return esriRequest(url, {responseType: "image",signal: options && options.signal,}).then(function (response) {let image = response.data;let width = this.tileInfo.size[0];let height = this.tileInfo.size[0];// create a canvas with a filled rectanglelet canvas = document.createElement("canvas");let context = canvas.getContext("2d");canvas.width = width;canvas.height = height;context.drawImage(image, 0, 0, width, height);return canvas;}.bind(this));}});

三、對TileWMSLayer進行實例化,注意切片原點與geoserver設置的該坐標系的網格集有關,為xmin,ymax值;

 let tileLayer = new TileWMSLayer({urlTemplate: "http://localhost:18080/geoserver/jjgis/wms?tiled=true&format=image/png&LAYERS=jjgis:view_equ_pipeline_new&tilesOrigin=-5385313.720203,8002161.202151&SRS=EPSG:0&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&WIDTH=256&HEIGHT=256&TRANSPARENT=true",spatialReference: new SpatialReference({wkt:wkt}),tileInfo: new TileInfo({dpi: 96,format: 'image/png',spatialReference: new SpatialReference({wkt:wkt}),size : [256,256],origin: {x: -5385313.720203,y: 8002161.202151},lods: [{ "level": 0, "scale": 106726486.36551324, "resolution":29883.416182343703 },{ "level": 1, "scale": 53363243.18275662, "resolution": 14941.708091171851 },{ "level": 2, "scale": 26681621.59137831, "resolution": 7470.854045585926 },{ "level": 3, "scale": 13340810.795689154, "resolution": 3735.427022792963 },{ "level": 4, "scale": 6670405.397844577, "resolution": 1867.7135113964814 },{ "level": 5, "scale": 3335202.6989222886, "resolution": 933.8567556982407},{ "level": 6, "scale": 1667601.3494611443, "resolution": 466.92837784912035 },{ "level": 7, "scale": 833800.6747305722, "resolution": 233.46418892456018 },{ "level": 8, "scale": 416900.3373652861, "resolution": 116.73209446228009 },{ "level": 9, "scale": 208450.16868264304, "resolution": 58.366047231140044 },{ "level": 10, "scale": 104225.08434132152, "resolution": 29.183023615570022 },{ "level": 11, "scale": 52112.54217066076, "resolution": 14.591511807785011 },{ "level": 12, "scale": 26056.27108533038, "resolution": 7.2957559038925055 },{ "level": 13, "scale": 13028.13554266519, "resolution": 3.6478779519462528 },{ "level": 14, "scale": 6514.067771332595, "resolution": 1.8239389759731264 },{ "level": 15, "scale": 3257.0338856662975, "resolution": 0.9119694879865632 },{ "level": 16, "scale": 1628.5169428331487, "resolution": 0.4559847439932816 },{ "level": 17, "scale": 814.2584714165744, "resolution": 0.2279923719966408 },{ "level": 18, "scale": 407.1292357082872, "resolution": 0.1139961859983204 },{ "level": 19, "scale": 203.5646178541436, "resolution": 0.0569980929991602 },{ "level": 20, "scale": 101.7823089270718, "resolution": 0.0284990464995801 },]})})

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

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

相關文章

Springboot 配置 log4j 時的注意事項

感謝博主 https://www.cnblogs.com/fishlittle/p/17950944 依賴 SpringBoot 的 starter 自帶的是 logback 日志,若要使用 log4j2 日志,需要引入對應依賴。logback 日志和 log4j2 日志都是對 slf4j 門面的實現,只能存在一個,且必…

江協科技51單片機學習- p25 無源蜂鳴器

🚀write in front🚀 🔎大家好,我是黃桃罐頭,希望你看完之后,能對你有所幫助,不足請指正!共同學習交流 🎁歡迎各位→點贊👍 收藏?? 留言📝?…

環信IM實現小米、oppo推送詳細步驟

本文教大家集成環信IM后如何實現小米、oppo推送。 一、小米推送 步驟一、在小米開放平臺創建應用。 在 小米開放平臺 創建應用,開啟推送服務。詳見小米官方網站的 推送服務接入指南。 步驟二、上傳推送證書。 注冊完成后,需要在環信即時通訊云控制臺…

WebSocket 雙向通信

WebSocket 是一種在前端開發中用于實現雙向通信的網絡技術。它與傳統的 HTTP 請求-響應模式不同,允許客戶端和服務器之間實時、雙向的數據傳輸。 1. 實時性 能夠實現數據的即時推送和接收,無需輪詢服務器,大大降低了延遲。 2. 雙向通信 客…

LeetCode-刷題記錄-前綴和合集(本篇blog會持續更新哦~)

一、前綴和(Prefix Sum)算法概述 前綴和算法通過預先計算數組的累加和,可以在常數時間內回答多個區間和相關的查詢問題,是解決子數組和問題中的重要工具。 它的基本思想是通過預先計算和存儲數組的前綴和,可以在 O(1)…

初步理解六__《面向互聯網大數據的威脅情報 并行挖掘技術研究 》

初步理解 六 STIX 提出了一種標準化的網絡威脅情報格式(Structured Threat Information eXpression, STIX) gtp STIX(Structured Threat Information eXpression)是一種用于標準化描述和共享網絡威脅情報的格式和語言。它的設計目標是提供一個通用的…

7.8作業

一、思維導圖 二、 1】按值修改 2】按值查找,返回當前節點的地址 (先不考慮重復,如果有重復,返回第一個) 3】反轉 4】銷毀鏈表 //按值修改 int value_change(linklistptr H,datatype e,int value) {if(HNULL||empty(H…

Greenplum(二)【SQL】

前言 Greenplum 的剩余部分主要其實主要就是 DDL 和之前學的 MySQL 不大一樣,畢竟 Greenplum 是基于 PostgreSQL 數據庫的,不過那些 DML 和 MySQL、Hive 基本上大差不差,所以就沒有必要浪費時間了。 1、DDL 1.1、庫操作 1.1.1、創建數據庫…

python爬蟲加入進度條

安裝tqdm和requests庫 pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simplepip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple帶進度條下載 import time # 引入time模塊,用于處理時間相關的功能 from tqdm import * # 從tqdm包中…

算法力扣刷題 三十六【二叉樹迭代遍歷】

前言 記錄三十五 介紹了二叉樹基礎,和遞歸法模版及遍歷方式; 遞歸:代碼簡單,但要想清楚三步: 確定參數和返回值;確定終止條件,并return什么?;終止條件外的邏輯&#xf…

【AI大模型】賦能兒童安全:樓層與室內定位實踐與未來發展

文章目錄 引言第一章:AI與室內定位技術1.1 AI技術概述1.2 室內定位技術概述1.3 樓層定位的挑戰與解決方案 第二章:兒童定位與安全監控的需求2.1 兒童安全問題的現狀2.2 智能穿戴設備的興起 第三章:技術實現細節3.1 硬件設計與選擇傳感器選擇與…

SpringSecurity中文文檔(Servlet Authorization Architecture )

Authorization 在確定了用戶將如何進行身份驗證之后,還需要配置應用程序的授權規則。 Spring Security 中的高級授權功能是其受歡迎的最有說服力的原因之一。無論您選擇如何進行身份驗證(無論是使用 Spring Security 提供的機制和提供者,還是與容器或其…

兩張圖片合并(右上角添加水印,兼容矢量圖)保留原來的顏色

無縫合并兩張圖片(封面右上角添加logo)-- opencv : 進行添加logo(水印)由于使用了cv2.seamlessClone,cv2.seamlessClone使用了泊松克隆(Poisson Cloning),會根據周圍的顏色信息進行顏色調整&…

tcp并發設計

4注意:原始代碼,如果先關閉服務器端,再次開啟服務器的時候會報"connect: Connection refused "錯誤,這是因為先關服務器端,導致系統認為客戶端仍然在與服務器端連接造成。 可以使用setsockopt setsockopt函…

three-tile 一個開源的輕量級三維瓦片庫

three-tile 介紹 three-tile 是一個開源的輕量級三維瓦片庫,它基于threejs使用typescript開發,提供一個三維地形模型,能輕松給你的應用增加三維瓦片地圖。 源碼:https://github.com/sxguojf/three-tile 示例:https:/…

【TB作品】51單片機 Proteus仿真 00013紅外proteus仿真循跡避障小車

實驗報告:智能小車系統設計與實現 一、背景介紹 本實驗旨在設計并實現一個基于STC89C52單片機控制的智能小車系統。該系統通過超聲波傳感器進行避障,通過紅外接收器實現遠程控制,同時具備循跡功能。整個系統的核心是單片機,它通…

YOLOv10改進 | 損失函數篇 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等損失函數

一、本文介紹 本文給大家帶來的是YOLOv10最新改進,為大家帶來最近新提出的InnerIoU的內容同時用Inner的思想結合SIoU、WIoU、GIoU、DIoU、EIOU、CIoU等損失函數,形成 InnerIoU、InnerSIoU、InnerWIoU、等新版本損失函數,同時還結合了Focus和…

LeetCode42(接雨水)[三種解法:理解動態規劃,雙指針,單調棧]

接雨水 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之后能接多少雨水。 這是一道困難題,難度確實有點層次.我們先來樸素思想走一波. 要求能接多少雨水,我們可以具化到每個硅谷,每個硅谷能存多少雨水,那么答案就是每個…

PDA:Prompt-based Distribution Alignment for Unsupervised Domain Adaptation

文章匯總 式中, y s y^s ys表示源域數據的one-hot ground-truth, K K K為類數, w i w_i wi?和 z ~ s \tilde{z}_s z~s?分別表示源域經過提示調優的最終文本表示和最終圖像表示的第 i i i類。 同理,為了進一步利用目標領域的數據…

防火墻詳解(USG6000V)

0、防火墻組網模式 防火墻能夠工作在三種模式下分別是路由模式、透明模式、旁路檢測模式、混合模式 0.1、路由模式 路由模式:防火墻全部以第三層對外連接,即接口具有IP 地址。一般都用在防火墻是邊界的場景下 防火墻需要的部署/配置: 接…