iClient for MapboxGL对接WMS服务

news2024/11/27 9:40:58

作者:yx

文章目录

  • 前言
  • 一、获取WMS服务
  • 二、请求参数说明
  • 三、获取参数
  • 四、关键代码
  • 五、完整代码
  • 总结


前言

咱们iClient官网Leaflet、OpenLayers、Classic均有对接WMS服务的示例,详情可以参考iClient官网示例https://iclient.supermap.io/。
但是许多小伙伴不知道MapboxGL该如何对接,接下来将介绍如何对接。
以下以SuperMap iServer发布服务得到WMS1.1.1服务为例。


一、获取WMS服务

您可以通过SuperMap iServer发布服务得到WMS服务,详细步骤可以参考http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/Server_Service_Management/quickPublish/start_a_service.htm

二、请求参数说明

WMS 1.1.1定义了 GetCapabilities,GetMap,GetFeatureInfo 三个操作(operation),其中GetMap 操作返回一幅地图。因此前端加载时采用该资源。服务器接受到 GetMap 操作请求之后,如果符合请求要求返回一幅地图,否则抛出服务异常。

对于一个合法的 GetMap 请求,服务器将根据请求参数(空间坐标参考系、图层、范围、图片大小等)返回一幅地图。

相关参数您可以通过在线帮助文档了解各参数含义,这里我们就只介绍必填参数

请求参数是否必需描述
VERSION=version请求版本号
REQUEST=GetMap请求名称
请求 GetMap 操作,请求名称需要设为“GetMap”
LAYERS=layer_list
(请求中没有 LAYERS/STYLES 参数时,必须包含 SLD 或 SLD_BODY 参数)
地图图层列表
图层名称必须是 GetCapabilities 操作返回的文档中声明的 Name 元素的值
SRS=namespace:identifier空间坐标参考系统
该参数值应该是 GetCapabilities 操作中服务器声明的 SRS
BBOX=minx,miny,maxx,maxyBounding box(地图范围),该参数的值为半角英文逗号分隔的一串实数,形如“minx,miny,maxx,maxy”,分别代表指定 SRS 下的区域坐标最小 X、最小 Y、最大 X、最大 Y
WIDTH=output_width地图图片的像素宽度
HEIGHT=output_height地图图片的像素高度
FORMAT=output_format地图的输出格式

说明:参数的大小写不是必须的,请求参数的顺序也可以任意顺序排列。

三、获取参数

以官网示例为例:https://iserver.supermap.io/iserver/services/map-china400/wms111/China

  • VERSION:这里是1.1.1,从地址不难看出是wms111,如果是wms130,这个则是1.3.0
  • REQUEST:GetMap
  • LAYERS:China,这里以China为例
<Layer queryable="0">
<Title>China</Title>
<SRS>EPSG:3857</SRS>
<SRS>EPSG:4326</SRS>
<LatLonBoundingBox minx="-180.0" miny="-85.05112877980652" maxx="180.0" maxy="85.05112877980646"/>
<BoundingBox SRS="EPSG:3857" minx="-2.0037508342789248E7" miny="-2.003750834278914E7" maxx="2.0037508342789244E7" maxy="2.0037508342789087E7"/>
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-85.05112877980652" maxx="180.0" maxy="85.05112877980646"/>
  • SRS:3857(这里我们以3857为例),从能力文档里边可以看到有3857和4326两个参考系
<Layer queryable="0">
<Title>China</Title>
<SRS>EPSG:3857</SRS>
<SRS>EPSG:4326</SRS>
<LatLonBoundingBox minx="-180.0" miny="-85.05112877980652" maxx="180.0" maxy="85.05112877980646"/>
<BoundingBox SRS="EPSG:3857" minx="-2.0037508342789248E7" miny="-2.003750834278914E7" maxx="2.0037508342789244E7" maxy="2.0037508342789087E7"/>
<BoundingBox SRS="EPSG:4326" minx="-180.0" miny="-85.05112877980652" maxx="180.0" maxy="85.05112877980646"/>
  • BBOX:{bbox-epsg-3857},{bbox-epsg-3857}是mapbox-gl的内部参数,在请求时会转换成范围坐标,和{z}{y}{x}一个道理 ,相应说明可以参考以下连接https://docs.mapbox.com/mapbox-gl-js/style-spec/sources/#tiled-sources、https://blog.51cto.com/speciallist/5716930
  • WIDTH:256
  • HEIGHT:256
  • FORMAT:image/png,这里我们采用image/png
<GetMap>
<Format>image/png</Format>
<Format>image/bmp</Format>
<Format>image/jpeg</Format>
<Format>image/gif</Format>

至此必填参数已经获取完成

四、关键代码

 var map = new mapboxgl.Map({
            container: 'map', // container id
            style: {
                "version": 8,
                "sources": {
                    "raster-tiles": {
                        "attribution": attribution,
                        "type": "raster",
                        "tiles": ['https://iserver.supermap.io/iserver/services/map-china400/wms111/China?VERSION=1.1.1&REQUEST=GetMap&LAYERS=China&SRS=EPSG:3857&bbox={bbox-epsg-3857}&WIDTH=256&HEIGHT=256&FORMAT=image/png'],
                        "tileSize": 256,
                    }
                },
                "layers": [{
                    "id": "simple-tiles",
                    "type": "raster",
                    "source": "raster-tiles",
                    // "minzoom": 0,
                    // "maxzoom": 22
                }]
            },
            center: [0, 0], // starting position
            zoom: 1, // starting zoom
        });

其中根据不同的服务,修改tiles对应的模板地址

五、完整代码

<!DOCTYPE html>
<html>

<head>
    <meta charset='utf-8' />
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <title data-i18n="resources.title_tiledMapLayer"></title>
    <script type="text/javascript" src="../js/include-web.js"></script>
    <style>
        body {
            margin: 0;
            padding: 0;
        }

        #map {
            position: absolute;
            top: 0;
            bottom: 0;
            width: 100%;
        }
    </style>
</head>

<body>
    <div id='map'></div>
    <script type="text/javascript" include="mapbox-gl-enhance" src="../../dist/mapboxgl/include-mapboxgl.js"></script>
    <script type="text/javascript">
        var host = window.isLocal ? window.server : "https://iserver.supermap.io";
        var attribution = "<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
            " with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
            " Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ";

        var map = new mapboxgl.Map({
            container: 'map', // container id
            style: {
                "version": 8,
                "sources": {
                    "raster-tiles": {
                        "attribution": attribution,
                        "type": "raster",
                        "tiles": ['https://iserver.supermap.io/iserver/services/map-china400/wms111/China?VERSION=1.1.1&REQUEST=GetMap&LAYERS=China&SRS=EPSG:3857&bbox={bbox-epsg-3857}&WIDTH=256&HEIGHT=256&FORMAT=image/png'],
                        "tileSize": 256,
                    }
                },
                "layers": [{
                    "id": "simple-tiles",
                    "type": "raster",
                    "source": "raster-tiles",
                    // "minzoom": 0,
                    // "maxzoom": 22
                }]
            },
            center: [0, 0], // starting position
            zoom: 1, // starting zoom
        });
        map.addControl(new mapboxgl.NavigationControl(), 'top-left');

    </script>
</body>

</html>

运行结果:

在这里插入图片描述

总结

1、(1){bbox-epsg-3857}是mapbox-gl的内部参数,在请求时会转换成范围坐标
2、VERSION,REQUEST,SRS,BBOX,WIDTH,HEIGHT,FORMAT这几个参数是必填

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础知识java

1.浅克隆和深克隆&#xff1f;深克隆的方法 浅克隆&#xff1a;对象的引用变量只会拷贝地址&#xff0c;不会新建一个对象 深克隆&#xff1a;对象的引用变量也会新建一个对象 实现方式&#xff1a; 浅克隆&#xff1a;实现cloneable接口的clone方法 深克隆&#xff1a;实现Ser…

《树莓派项目实战》第八节 使用光敏电阻传感器检测环境中是否有光照

目录 8.1 引脚介绍 8.2 工作原理 8.3 连接到树莓派 8.4 编写代码检测有无光照 在本节&#xff0c;我们将学习如何使用光敏电阻度传感器检测是否有光照&#xff0c;该项目设计到的材料有&#xff1a; 树莓派 * 1面包板 * 1杜邦线若干光敏电阻传感器 * 18.1 引脚介绍 从右到…

tictoc例子理解6-9

tictoc 6-9tictoc 6 自消息实现计时tictoc 7 节点等待时延随机&#xff0c;丢失包概率tictoc 8 两个节点分别定义两个类tictoc 9 保留原始包副本&#xff0c;从而不需要重新构建包tictoc 6 自消息实现计时 在前面的模型中&#xff0c;’ tic’和’ toc’立即将收到的消息发送回…

高防CDN和融合CDN的区别

所有网站比较关心的一个问题就是如何解决南北用户能够稳定的加速访问&#xff0c;为此网站运营商通常用的CDN来解决这个问题。那么CDN是什么呢&#xff1f;CDN是属于一种内容分发网络。通过在现有的网络中增加一层新的网络架构的模式&#xff0c;使用户能够就近获取数据&#x…

利用综合微生物指数评估富营养化危险沿海湿地生态状况

河海大学环境学院李轶课题组近期在《Science of the Total Environment》期刊上(IF10.753)发表的“Eutrophication dangers the ecological status of coastal wetlands: A quantitative assessment by composite microbial index of biotic integrity.”研究论文中&#xff0c…

IP-Guard批量部署客户端的方法有哪些?

常用的批量部署客户端方式有以下几种&#xff1a; 1、通过IP-guard域脚本安装工具推送安装 概括步骤如下&#xff1a; 1&#xff09;打包好客户端安装包&#xff08;勾选静默安装&#xff09;&#xff0c;将安装包命名为OAgentInst.exe 2&#xff09;将客户端安装包OAgentInst.…

React路由

文章目录单页面应用spa路由路由是什么React路由原理点击页面选项路径改变路径改变页面变化React路由的使用实现点击页面选项路径改变——编写路由链接根据路径显示组件 ——注册路由组件的分类——普通组件和路由组件案例实现选中高亮效果——NavLinkNavLink的封装Switch的使用…

tda4vm mcu1_0应用程序开发系列之ADC采样

文章目录 1. 前言2. 开发过程1. 前言 上一篇我们介绍了如何在tda4vm上拉起MCU域的mcu1_0,感兴趣的小伙伴可以看一下tda4vm如何SPL方式加载MCU域的核?,从本篇开始介绍如何在mcu1_0上开发应用程序,本篇主要介绍mcu1_0上ADC采样应用程序的开发。 2. 开发过程 如果工作中接到…

职业资格证书查询与验证

一、接口介绍 可查询多种类型的职业资格证书&#xff0c;包含&#xff1a;证券从业资格证查询、计算机信息高新技术考试证书查询、计算机技术与软件专业技术资格、全国教师资格证书查询、普通话证书查询合格证明、中小学教师资格考试合格证明&#xff08;NTCE&#xff09;、全国…

隐藏文件夹怎么显示,只需1分钟,快速学会

很多人在工作的过程中&#xff0c;将一些文件给隐藏了起来&#xff0c;后来需要使用的时候&#xff0c;却找不到隐藏的文件夹了。win10如何调出隐藏文件夹&#xff1f;隐藏文件夹怎么显示&#xff1f;只需1分钟&#xff0c;快速学会显示隐藏文件夹&#xff01; 隐藏文件夹怎么显…

【Mysql】复合查询

文章目录**1.基本查询回顾****2.多表查询** (重要)多表查询步骤**3.自连接**4.子查询在from子句中使用子查询5.合并查询1.基本查询回顾 准备工作,创建一个雇员信息表:&#xff08;来自oracle 9i的经典测试表&#xff09; EMP员工表 DEPT部门表 SALGRADE工资等级表 案例1:查询…

SVN+Gitee配置版本控制库

软件 TortoiseSVN&#xff1a;Downloads TortoiseSVN Gitee&#xff1a;https://gitee.com/ 操作步骤 在Gitee中新建仓库&#xff0c;设置仓库名以及模板&#xff08;Readme文件&#xff09;&#xff1b; 启用SVN访问 在仓库的管理页面&#xff0c;选择“功能设置”中的“…

为自己量身打造一个 Rust 项目模板/脚手架

摘要 quick-start-rs(quick start a rust project)是用于快速创建一个 rust 项目的脚手架/模板。 标题&#xff1a;为自己量身打造一个 Rust 项目模板/脚手架深度参考 Rust Code Quick Start文章来自 suhanyujieTags: Rust, utils, quick start, project template&#xff0c;脚…

视频编解码 — 带宽预测

目录 一、带宽预测作用 二、基于延时的带宽预测算法&#xff1a; 1、算法流程 2、计算延时 3、Trendline Filter 4、网络状态判断 5、带宽调整更新 三、基于丢包的带宽预测算法 1、带宽调整 四、最大带宽探测算法 五、最终的预测选择 一、带宽预测作用 控制音视频发…

荧光AF染料477876-64-5,Alexa Fluor 532,AF532 NHS ester

●中文名&#xff1a;AF532 活性酯&#xff0c;AF5 532酯 ●英文名&#xff1a;AF532-NHS &#xff0c;AF532 NHS ester&#xff0c;Alexa Fluor 532 ●外观以及性质&#xff1a; 荧光AF染料是具有磺化基团的荧光物质。AF染料带负电荷&#xff0c;具有亲水性高、亮度高、光稳定…

软件和硬件中的调用

文章目录**1 概述****2.1 程序进程内的调用&#xff1a;函数调用****2.2 程序进程间的调用&#xff1a;IPC****2.3 远程程序调用&#xff1a;RPC****2.4 远程调用REST****3 硬件“调用”****3.1 综述****总线模型****3.2 片内的总线****3.3 Chiplet多DIE封装互联总线****3.4 板…

1.1 统计学习方法的定义与分类

统计学习方法的定义与分类统计学习的概念统计学习的定义统计学习运用到的领域统计学习的步骤统计学习的分类统计学习的概念 统计学习的定义 统计学习 (Statistical Machine Learning) 是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。 以计…

Python任务调度框架Rocketry

文章目录定时任务库对比简介与其余框架的区别安装初试调度器基础测试方法字符串格式具体时间间隔周期某时间段条件 API条件逻辑方法对比执行选项在主进程和线程中执行进程线程异步设置默认选项日志流水线在一个任务后执行输入作为输出会话级参数函数参数TODO&#xff1a;元参数…

为什么说继承是把双刃剑

为什么说继承是把双刃剑 继承其实是把双刃剑&#xff1a;一方面继承是非常强大的&#xff1b;另一方面继承的破坏力也是很强的。 继承广泛应用于各种Java API、框架和类库之中&#xff0c;一方面它们内部大量使用继承&#xff0c;另一方面它们设计了良好的框架结构&#xff0c…

20221130 RabbitMQ

MQ MQ&#xff08;Message Queue&#xff09;消息队列&#xff0c;是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦&#xff0c;异步消息&#xff0c;流量削峰等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 主要的…