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.mzph.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 地址。一般都用在防火墙是边界的场景下 防火墙需要的部署/配置: 接…