news 2026/10/7 11:41:56

SuperMap iClient for OpenLayers如何实现对影像服务设置图层掩膜

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SuperMap iClient for OpenLayers如何实现对影像服务设置图层掩膜

作者:Carlo

文章目录

  • 业务背景
  • 实现步骤
  • 关键代码解析
    • 1. 初始化地图和图层
    • 2. 查询掩膜边界数据
    • 3. 掩膜操作核心方法
    • 完整代码实现

业务背景

在地理信息系统(GIS)应用中,影像服务通常提供高分辨率的遥感影像或地图底图。但在实际业务场景中,我们经常需要限制影像的显示范围,只展示特定区域内的影像数据。这种需求常见于:

  • 行政区划展示:只显示某个省/市范围内的影像;
  • 重点区域突出:在全局影像上突出显示特定区域;
  • 数据保密:只公开部分区域的影像数据;
  • 性能优化:减少不必要区域的影像加载

图层掩膜技术就是解决这类问题的有效方案,它通过矢量边界来控制影像的显示范围。

实现步骤

  • 准备掩膜数据:获取用于定义显示范围的矢量边界(如行政区划面)。
  • 创建影像图层:加载SuperMap影像服务。
  • 应用掩膜:将矢量边界设置为影像图层的掩膜。
  • 动态控制:提供掩膜的添加和移除功能。

关键代码解析

1. 初始化地图和图层

// 创建OpenLayers地图实例varmap=newol.Map({target:'map',view:newol.View({projection:'EPSG:4326',center:[110,19.2],minZoom:1,zoom:8.5})});// 添加地图服务(作为底图)varlayer=newol.layer.Tile({source:newol.source.TileSuperMapRest({url:'https://iserver.supermap.io/iserver/services/map-world/rest/maps/World',wrapX:true})});map.addLayer(layer);// 添加影像服务图层(叠加显示)varvectorLayer=newol.layer.Tile({zIndex:90,source:newol.source.ImageTileSuperMapRest({url:'您的影像服务地址',projection:'EPSG:4326',collectionId:'sample'})});map.addLayer(vectorLayer);

2. 查询掩膜边界数据

// 构建查询参数,从中国省份数据中查找特定区域,此处查找海南省varparam=newol.supermap.QueryBySQLParameters({queryParams:{name:'Province_R@China',// 数据源名称attributeFilter:'SMID = 3'// 查询条件(这里示例查询ID为3的省份)}});// 执行查询获取掩膜边界newol.supermap.QueryService('https://iserver.supermap.io/iserver/services/map-ChinaProvinces/rest/maps/ChinaProvinces').queryBySQL(param,function(serviceResult){// 将查询结果转换为OpenLayers可用的要素格式sichuanFeature=newol.format.GeoJSON().readFeatures(serviceResult.result.recordsets[0].features)[0];// 应用掩膜ol.supermap.Util.setMask(vectorLayer,sichuanFeature);});

3. 掩膜操作核心方法

// 添加掩膜函数functionaddMask(){ol.supermap.Util.setMask(vectorLayer,sichuanFeature);}// 移除掩膜函数functionremoveMask(){ol.supermap.Util.unsetMask(vectorLayer);}

完整代码实现

<!--*********************************************************************Copyright©2000-2025SuperMap Software Co.Ltd.All rights reserved.*********************************************************************--><!--*********************************************************************该示例需要引入*ol-mapbox-style(https://github.com/openlayers/ol-mapbox-style)*********************************************************************--><!DOCTYPEhtml><html><head><meta charset="UTF-8"/><title data-i18n="resources.title_mask"></title><style type="text/css">.editPane{position:absolute;top:50px;right:50px;text-align:center;background:#fff;z-index:1000;}</style></head><body style="margin: 0; overflow: hidden; background: #fff; width: 100%; height: 100%; position: absolute; top: 0"><divclass="panel panel-primary editPane"id="editPane"style="z-index: 99999"><divclass="panel-heading"><h5class="panel-title text-center"data-i18n="resources.btn_operate"></h5></div><divclass="panel-body"id="params"><p></p><div align="right"class="button-group"><input type="button"id="btn1"class="btn btn-primary"data-i18n="[value]resources.text_input_value_addMask"onclick="addMask()"/><input type="button"id="btn2"class="btn btn-primary"data-i18n="[value]resources.text_input_value_removeMask"onclick="removeMask()"/></div></div></div><div id="map"style="width: 100%; height: 100%"></div><script type="text/javascript"include="bootstrap,widgets"src="../js/include-web.js"></script><script type="text/javascript"include="ol-mapbox-style"src="../../dist/ol/include-ol.js"></script><script type="text/javascript">varsichuanFeature;varprojection='EPSG:4326';varmap=newol.Map({target:'map',view:newol.View({projection:projection,center:[110,19.2],minZoom:1,zoom:8.5})});//添加地图服务,作为底图varlayer=newol.layer.Tile({source:newol.source.TileSuperMapRest({url:'https://iserver.supermap.io/iserver/services/map-world/rest/maps/World',wrapX:true})});map.addLayer(layer);//添加影像服务,叠加显示varvectorLayer=newol.layer.Tile({zIndex:90,source:newol.source.ImageTileSuperMapRest({url:'https://iserver.supermap.io/iserver/services/imageservice-hainan/restjsr',projection:projection,collectionId:'sample'})});map.addLayer(vectorLayer);//添加掩膜functionaddMask(){if(!sichuanFeature){varparam=newol.supermap.QueryBySQLParameters({queryParams:{name:'Province_R@China',attributeFilter:'SMID = 3'}});//从中国省份地图查找到海南省,作为掩膜矢量要素newol.supermap.QueryService('https://iserver.supermap.io/iserver/services/map-ChinaProvinces/rest/maps/ChinaProvinces').queryBySQL(param,function(serviceResult){sichuanFeature=newol.format.GeoJSON().readFeatures(serviceResult.result.recordsets[0].features)[0];//为图层设置掩膜ol.supermap.Util.setMask(vectorLayer,sichuanFeature);});return;}else{ol.supermap.Util.setMask(vectorLayer,sichuanFeature);}}//移除掩膜functionremoveMask(){ol.supermap.Util.unsetMask(vectorLayer);}</script></body></html>

效果展示

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 15:24:07

无人机飞行姿态稳不稳?关键看这个MEMS IMU

惯性测量单元&#xff08;IMU&#xff09;是无人机飞控系统的核心感知部件&#xff0c;也是无人机实现稳定飞行、姿态控制与自主导航的基础硬件。无人机依靠 IMU 实时感知自身的运动与姿态状态&#xff0c;再由飞控算法快速输出控制指令&#xff0c;驱动电机与旋翼调整姿态&…

作者头像 李华
网站建设 2026/10/8 2:43:08

机器学习 —— 关联规则

摘要&#xff1a;关联规则挖掘是机器学习中用于发现数据集中项目间关联关系的技术&#xff0c;主要应用于购物篮分析等领域。该方法通过支持度和置信度指标衡量规则强度&#xff0c;其中支持度反映规则普遍性&#xff0c;置信度表示规则可靠性。使用Python的mlxtend库可实现关联…

作者头像 李华
网站建设 2026/10/3 17:07:52

计算机Java毕设实战-基于Java web的酒店管理系统设计与实现在线查询空闲客房、提交预订申请、支付押金【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/10/6 3:35:35

超声波测距设计研究

超声波测距设计研究 一、研究背景与意义 超声波测距凭借非接触式测量、抗干扰能力强、成本低廉等优势&#xff0c;广泛应用于工业液位检测、智能机器人避障、车辆倒车雷达、安防距离监测等领域。传统超声波测距系统存在测量精度低、测距范围窄、受环境因素影响大等问题&#xf…

作者头像 李华
网站建设 2026/10/6 3:35:35

跨境电商必看:Etsy保号防封全攻略(2026)

Etsy作为全球领先的手工艺品和创意商品销售平台&#xff0c;吸引了成千上万的卖家。但当你刚准备大干一场&#xff0c;Etsy新店24小时就封了&#xff1f;上架第一个产品&#xff0c;店直接没了&#xff1f;本文将带你了解常见的封号原因&#xff0c;并提供实操干货&#xff0c;…

作者头像 李华
网站建设 2026/10/6 20:59:10

自动禁用触控板工具支持winxp/win7/win8.1/win10

平时应该有朋友遇到过手不小心碰到触控板非常影响打字的体验&#xff0c;根本用上不&#xff0c;都是用鼠标&#xff0c;这个触控板就很鸡肋&#xff0c;如果要禁用&#xff0c;可以考虑使用这个工具。能禁用大部分的触控板&#xff0c;需要的保存试试。 下载地下载地址&#x…

作者头像 李华