openlayers 地图限制区域实现方法

  • 一、利用arcmap裁剪实现
  • 二、canvas的clip方法实现

一、利用arcmap裁剪实现

之前遇到一个项目,需要只显示某个区县范围内的地图,其余部分不要显示,其实就是地图限制区域的问题,当时由于时间紧急,第一个想到的方法,就是利用arcmap的裁剪方法来实现。
具体想法:弄个某县边界图层,再绘制一个巨大范围的矢量面,用这个图层去裁剪范围面,形成一个新的图层,这个图层中间镂空的地方就是该县的边界区域,地图加载的时候一起加载进去,然后镂空图层样式设置成实心的,这样底图就在该区域不显示,具体arcmap操作就不说了,很简单。实现效果如下:

二、canvas的clip方法实现

我们都知道openlayers是基于canvas创建的,所以可以利用一下canvas的方法去实现。(例子里那个心形的地图就是用的这个方法)
具体代码:

 const _this = this;const boundFeature = new GeoJSON().readFeatures(jsBound);wmtszjVecLayer.on('prerender', function(evt) {const canvas = evt.context;canvas.save();const coords = boundFeature[0].getGeometry().getCoordinates()[0];canvas.beginPath();_this.createClip(coords[0], canvas);canvas.clip();});wmtszjAnnoLayer.on('prerender', function(evt) {const canvas = evt.context;canvas.save();const coords = boundFeature[0].getGeometry().getCoordinates()[0];canvas.beginPath();_this.createClip(coords[0], canvas);canvas.clip();});wmtszjVecLayer.on('postrender', function(event) {const ctx = event.context;ctx.restore();});wmtszjAnnoLayer.on('postrender', function(event) {const ctx = event.context;ctx.restore();});
createClip(coords, canvas) {for (let i = 0, cout = coords.length; i < cout; i++) {const screenCoord = this.map.getPixelFromCoordinate(coords[i]);const x = screenCoord[0],y = screenCoord[1];if (i === 0) {canvas.moveTo(x, y);} else {canvas.lineTo(x, y);}}canvas.closePath();canvas.strokeStyle = "#2944de";canvas.lineWidth = 3;canvas.stroke();}

实现效果:

openlayers 地图限制区域实现方法相关推荐

  1. openlayers地图初始化

    1.安装ol(官网ol已更新到openlayers7版本,我所用的是v6.14.1) yarn add ol //安装openlayers 2.初始化openlayer地图 先创建一个容器来存放map ...

  2. 小程序上让随机的两个点都显示在地图可视区域

    功能需求 如滴滴打车,当用户叫到车之后,会在用户的界面同时显示用户当前位置和车辆位置,这两个点对程序来说都是随机的,怎么让两个点都显示在地图可视区域呢? 解决方法 小程序中不需要我们计算缩放级数,有一 ...

  3. ios 百度地图指定区域_获取百度地图可视区域范围的数据

    有个业务场景,需要根据获取到的地图区域显示,根据相应的经纬度反查 左侧区域的会议室. 思路: 1.得到百度地图可视区域--可视区域的中心点 2.可视区域的四个角的其中两个(东北角+西南角) http: ...

  4. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十七)地图自适应区域加载...

    目前地图编辑器已经能够对地图图片进行切片了,那么接下来我们需要做的是对切好的地图片进行拼装从而取代整张大地图.需要特别说明的是,如果一次性将所有的切片加载进游戏中并显示出来,那么效果与使用一张整的地图 ...

  5. 百度地图 json 区域 数据_获取百度地图可视区域范围的数据

    有个业务场景,需要根据获取到的地图区域显示,根据相应的经纬度反查 左侧区域的会议室. 思路: 1.得到百度地图可视区域--可视区域的中心点 2.可视区域的四个角的其中两个(东北角+西南角) http: ...

  6. 【MapBox实战】生成地图+绘制区域+纠偏

    [MapBox实战]生成地图+绘制区域+纠偏 mapbox介绍 生成地图过程 基础配置 坐标 在地图上绘制一块区域 在地图上画上点 瓦片地图原理理解 原理 瓦片地图背景理解 编码方式 谷歌xyz 百度 ...

  7. Echart + 百度地图实现区域聚合(Vue版)

    Echart + 百度地图实现区域聚合(Vue版) 百度地图的聚合很简单,但是根据区域聚合怎么实现呢?结合Echart的百度地图怎么实现区域聚合呢? 单独玩过Echart,也单独用过百度地图,但是两个 ...

  8. 自动驾驶中基于地图的视觉定位方法

    点云PCL免费知识星球,点云论文速读. 文章:Visual Map-based Localization applied to Autonomous Vehicles 作者:JEAN-ALIX DAV ...

  9. jvectormap的自定义地图和区域上色、图片标记

    jvectormap的自定义地图和区域上色.图片标记 因为网上例子太少,上手实属不易,所以在这里跟大家分享一下我的使用! (第一次写,因为粘贴代码卡死几次,重写了几次,心累 ╥﹏╥-) 这里就简单的介 ...

最新文章

  1. Codeforces Round #556 (Div. 2)
  2. 洛谷——P1194 买礼物
  3. 分库分表的事务处理机制
  4. 网络的性能指标与分组交换网络
  5. 从零开始学keras之多分类问题
  6. 《深入理解分布式事务》第十章 最大努力通知型分布式事务原理
  7. 年会宣布 996 后,那些保持沉默的人
  8. java+基于dom4j工具类_基于dom4j的xml映射实体的工具类(java)
  9. (tip_修订0618)bmp 32位转24位
  10. 使用tensorflow神经网络预测房价模型
  11. nvidia卸载程序无法继续运行_win10系统下nvidia安装程序无法继续不兼容的解决办法_nvidia显卡驱动与系统不兼容...
  12. msl3等级烘烤时间_MSL 湿敏等级对应表
  13. Instagram帖子类型及标题撰写技巧
  14. android显示视频预览
  15. 王者荣耀服务器维护到几点,今晚王者荣耀更新到几点 王者荣耀维护时间王者荣耀公告...
  16. 万物皆可AI,狗狗也不例外
  17. python自动化办公读后感_《Python编程快速上手——让繁琐的工作自动化》读书笔记3...
  18. MySQL连续三条_求教一条Mysql,查询大于等于3条连续的重复记录,急急急!!!!...
  19. windows鼠标,物理位移与屏幕位移的计算方法(鼠标加速度)
  20. html支持草书的字体吗,汉仪孙万民草书字体

热门文章

  1. 国家级、省级认定(备案)科技企业孵化器、众创空间奖励申请指南
  2. Mac OS X运行程序出现bad interpreter: operation not permitted的解决方案
  3. 【BZOJ 4455】ZJOI2016小星星
  4. 图片上传与excel的导出
  5. dreamweaver半角空格_Dreamweaver初学者小技巧应用系列--1.快速插入空格
  6. 征服number类型的input框
  7. PCB设计笔记-AD(二)-如何将元器件库导入AD中
  8. js获取文件MD5值
  9. 浙江计算机二级操作题内容,浙江省计算机二级上机操作题(新)
  10. 视频网站将延续内容为王的策略