概述

前面有两篇文章分别介绍了矢量数据点和线、面的实现,本文讲讲静态图片的绘制和WMS服务的展示。

4.绘制图片

图片的绘制我们分两种:静态图片和WMS服务。

4.1 静态图片

绘制静态图片我们只需要两个参数:图片地址和图片四至。实现代码如下:

/*** 绘制静态图片* @private*/
ImageLayer.prototype._drawStaticImage = function () {const that = this;const extent = that._params.extent;const url = that._params.url;const pixelMin = that._map2pixel([extent[0], extent[1]]);const pixelMax = that._map2pixel([extent[2], extent[3]]);const width = Math.abs(pixelMax.x - pixelMin.x);const height = Math.abs(pixelMax.y - pixelMin.y);const img = new Image();img.src = url;img.onload = function () {that._ctx.drawImage(img, pixelMin.x, pixelMax.y, width, height);}
}

实现后效果如下:

4.2绘制WMS服务

一个wms服务的请求应包括以下参数:

{SERVICE: 'WMS',REQUEST: 'GetMap',FORMAT: 'image/png',TRANSPARENT: true,LAYERS: that._params.layer,SRS: 'EPSG:3857',WIDTH: width,HEIGHT: height,BBOX: projMin.concat(projMax).join(',')
}

一个完整的wms的请求地址如:http://localhost:8081/geoserver/lzugis/wms?SERVICE=WMS&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=lzugis:china_prov_people&SRS=EPSG:3857&WIDTH=1920&HEIGHT=969&BBOX=5721121.240344884,1414403.022565099,17727742.969104737,7473994.926298538。wms的实现方式如下:

/*** 绘制wms服务* @private*/
ImageLayer.prototype._drawWmsImage = function () {const that = this;let extent = that._map.getBounds().toArray();extent = extent[0].concat(extent[1]);// 超范围处理const xmin = extent[0] < -180 ? -180 : extent[0];const ymin = extent[1] < -90 ? -90 : extent[1];const xmax = extent[2] > 180 ? 180 : extent[2];const ymax = extent[3] > 90 ? 90 : extent[3];const pixelMin = that._map2pixel([xmin, ymin]);const pixelMax = that._map2pixel([xmax, ymax]);const width = Math.round(Math.abs(pixelMax.x - pixelMin.x));const height = Math.round(Math.abs(pixelMax.y - pixelMin.y));const projMin = turf.projection.toMercator([xmin, ymin]);const projMax = turf.projection.toMercator([xmax, ymax]);const wmsParams = {SERVICE: 'WMS',REQUEST: 'GetMap',FORMAT: 'image/png',TRANSPARENT: true,LAYERS: that._params.layer,SRS: 'EPSG:3857',WIDTH: width,HEIGHT: height,BBOX: projMin.concat(projMax).join(',')};let url = that._params.url;for(const key in wmsParams) {const join = url.indexOf('wms?') !== -1? '&': '?';url += `${join}${key}=${wmsParams[key]}`;}const img = new Image();img.src = url;img.setAttribute('crossOrigin', 'anonymous');img.onload = function () {that._ctx.drawImage(img, pixelMin.x, pixelMax.y, width, height);}
}

实现后效果如下:

跟牛老师一起学WEBGIS——WEBGIS实现(绘制图片)相关推荐

  1. 跟牛老师一起学WEBGIS——WEBGIS基础(基础概念)

    1.基础概念 1.1 定义 WebGIS是一种在Internet或Intranet环境下基于HTTP协议的用来存储.管理.分析.发布和共享地理信息的B/S模式分布式计算机应用系统. 1.2 基本特征 ...

  2. 跟牛老师一起学WEBGIS——GIS基础(空间数据)

    3.空间数据 3.1 空间数据模型 空间数据模型可以分为三种: 场模型:用于描述空间中连续分布的现象: 要素模型:用于描述各种空间地物: 网络模型:可以模拟现实世界中的各种网络: 1. 场模型 对于模 ...

  3. 跟牛老师一起学WEBGIS——WEBGIS实现(绘制切片)

    概述 前面已经有三篇文章分别讲述了点.线和面.图片的绘制,在本文讲讲如何实现切片的绘制. 5. 绘制切片 前面的文章地图切片提到了切片的几个重要参数:切片范围.切片原点.分辨率,这些概念在实现切片的调 ...

  4. 跟牛老师一起学WEBGIS——WEBGIS基础(WMS服务)

    2.2 WMS服务 WMS是Web Map Service(网络地图服务)的缩写,是开放地理空间联盟 (OGC) 定义提供和使用动态地图时需遵守的国际规范.到目前为止,已发布了四个版本的 WMS 规范 ...

  5. 跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)

    2.1 切片服务 1.定义 瓦片数据是将矢量或影像数据进行预处理,采用高效的缓存机制(如金字塔)形成的缓存图片集,采用"级.行.列"方式进行组织,可在网页中快速加载.因此,瓦片地图 ...

  6. 对于牛老师作业陈老师作业补充(老陈、小石头的典型用户、用例图、场景)...

    对于牛老师作业陈老师作业补充(老陈,小石头的典型用户.用例图.场景) 一  :  典型用户 (1)名字:小石头 性别:男 年龄:    8岁 职业:学生 收入:无 知识层次能力:小学二年级 生活/工作 ...

  7. 我们学校一牛老师的语录

    我们学校一牛老师的语录<转载> 来天大都快四年多了,本科开学就听说了天大四大才子这么一说,但一直以来都没有机会了解下,现在上了研究生,无意中拾起了这个想法,终于在这周一蹭了他一节美学概论, ...

  8. 牛客2020年七夕节比赛 D.拜托了,牛老师

    牛客2020年七夕节比赛 D.拜托了,牛老师 题目链接 题目描述 时钟指向0点,又是新的一天.今天是七夕节,看着朋友圈牛云.牛郭.牛陈.牛余.牛lan等脱单牛准点发送的虐牛图,牛牛心理丝毫没有波动,因 ...

  9. 拜托了,牛老师(DFS)

    拜托了,牛老师(DFS) 思路:dfsdfsdfs,因为nnn最大只有1e61e61e6,考虑因数最多只有两百多,因为要求因数不同,可以考虑以递增顺序剪枝dfsdfsdfs. 时间复杂度:O(kn)O ...

最新文章

  1. 修改squid的Header中的X-Cache为Powered-By-LinuxTone
  2. 植物的意识,是我们的错觉吗?
  3. 获取各种常见形状的位图
  4. /D _WINDOWS, /D _CONSOLE
  5. 脑电分析系列[MNE-Python-8]| 参考电极简介
  6. 数据结构源码笔记(C语言):可变长度字符串的快速排序
  7. Linux常用Shell脚本珍藏
  8. twisted:基于python的twisted框架编写一个客户端和服务端的对话聊天空间
  9. 章鱼哥出品—VB.NET DataGridView绑定数据源 quot;与货币管理器的位置关联的行不能设置为不可见quot; 问题的解决...
  10. poj_2349 Kruskal 最小生成树
  11. 使用IntelliJ IDEA11创建Java Web程序
  12. ElasticSearch学习29_基于Elasticsearch实现搜索推荐
  13. Java开发中定时器的使用
  14. 和为k的倍数(51Nod-2522)
  15. 找不到列 dbo 或用户定义的函数或聚合_Power BI 的大数据处理方案:聚合
  16. Java比较器-学习
  17. 了解Go编译处理(三)—— 初识go compile
  18. matlab fft时域采样,信号时域采样 谱分析(matlab).doc
  19. 有家谱和没家谱,后人的差距真的很大!家谱用怎么样的形式完成传承
  20. java 读书笔记_《java编程思想》读后感

热门文章

  1. dreamweaver家乡主题网页设计 DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载 HTML5期末大作业
  2. 软件测试是吃青春饭的吗?软件测试能干到多少岁?
  3. 安徽大学入学计算机考试模拟试题,安徽大学计算机图形学期末考试试卷
  4. 卡牌游戏战斗系统的设计和实现一
  5. 前端调试接口技巧 更好的配合后端进行接口调试
  6. decomposeParDict----并行运算文件
  7. 从零开始研发GPS接收机连载——11、电文解析
  8. 播音学习如何找到适合自己的稿件,播音稿件推荐
  9. JAVA中List遍历时如何正确remove元素
  10. 常见算法思想3:递归法