当前位置: 首页 > news >正文

openlayers 3d 地图 非三维 立体地图 行政区划裁剪 地图背景

这是实践效果
如果没有任何基础 就看这个专栏:http://t.csdnimg.cn/qB4w0 这个专栏里有从最简单的地图到复杂地图的示例
最终效果:
在这里插入图片描述
线上示例代码:

想要做这个效果 如果你的行政区划编辑点较多 可能会有卡顿感 如果出现卡顿感需要将边界点相应减少一些 这样地图边界会相对模糊 卡顿也会明显减少

首先要有整个行政区划的边界geoJson文件 然后利用专栏里的行政区划裁剪 将地图裁剪下来

	//这是你的图片layer 放后面用于裁剪this.imageLayer = new Image({source: new ImageStatic({url: require("@/assets/images/bigData/mapBg.png"), // 背景图路径 如果希望打包的时候处理 需要使用require处理 告知打包工具 这里是一个地址imageExtent: [109.40275824, 34.3809588338, 115.4139700635, 40.75244622,],//这里就是渲染图片的大小 这里如果你不知道大小 可以在后面动态获取行政区划的边界 然后 再新建图片layer }),opacity: 1, // 设置背景图的透明度 如果透明度低 做3d地图的时候就会发现地图是凹陷的 但是也更加立体了});
//添加背景图裁剪 addBackgroundClip(event) {const clipPolygon = event.target.getFeatures()[0].getGeometry().clone();//克隆边界矩形this.imageLayer.on("prerender", function (event) {//监听背景图层渲染前var ctx = event.context;var vecCtx = getVectorContext(event);vecCtx.setStyle(//修改样式 将填充颜色制空 用来裁剪 new Style({fill: new Fill({color: "#ffffff00",}),}));ctx.save();ctx.stroke();vecCtx.drawGeometry(clipPolygon); //裁剪矩形 ctx.clip();});this.imageLayer.on("postrender", function (event) {//监听渲染后var ctx = event.context; ctx.restore();//恢复最近一次保存的绘图状态 不调用后续操作会卡住});this.map.render();//调用渲染方法},this.geoLayerExtent.getSource().once("change", this.addBackgroundClip);//对你的整个区域边界的图层进行监听 并且修改颜色 为透明this.geoLayer.getSource().once("change", this.initTextAndPoint)//监听含有子项的数据 用来添加文字和点动画 
//这个之前专栏写过 可以找一下 https://blog.csdn.net/qq_36287830/article/details/136291021 这是文章链接 模仿一下就好了var r3D = new Render3D({style: this.shanxiStyle,//样式 这里的填充色需要是透明的ghost: true,//透明 如果是false 就是透明 true貌似更立体了height: -0.2,//高度 正值向上 负值向下});this.geoLayerExtent.setRender3D(r3D);//给行政区划边界添加3d效果//这是最不重要的内容 就是通过修改层级 使他更加立体this.geoLayerExtent.setZIndex(0);this.map.addLayer(this.geoLayerExtent);this.imageLayer.setZIndex(1);this.map.addLayer(this.imageLayer);this.geoLayer.setZIndex(2);this.map.addLayer(this.geoLayer);this.pointLayer.setZIndex(3);this.map.addLayer(this.pointLayer);this.textLayer.setZIndex(3);this.map.addLayer(this.textLayer);

看完还是不太会的 可以留言或者私信

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-支持VForm3表单的选择与支持
  • 安装好anaconda,打开jupyter notebook,新建 报500错
  • 二叉树的构造问题 | LeetCode刷题笔记 | 每日练习 | 深度优先遍历| 广度优先遍历 | Java
  • 【必看】基于LSTM网络的温度预测
  • 【性能优化】在大批量数据下使用 HTML+CSS实现走马灯,防止页面卡顿(一)
  • ubuntu中git log中文乱码
  • vue、js截取视频任意一帧图片
  • Linux——五种IO模型
  • Volatility:分析MS10-061攻击
  • 【总结】逻辑运算在Z3中运用+CTF习题
  • C#实现数据采集系统-查询报文处理和响应报文分析处理
  • 【C++】C++类和对象详解(上)
  • Docker核心技术:容器技术要解决哪些问题
  • Python爬虫-淘宝搜索热词数据
  • 《0基础》学习Python——第二十二讲__网络爬虫/<5>爬取豆瓣电影封面图
  • Google 是如何开发 Web 框架的
  • ES6--对象的扩展
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript学习总结——原型
  • Objective-C 中关联引用的概念
  • Quartz初级教程
  • vue 个人积累(使用工具,组件)
  • Zepto.js源码学习之二
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 翻译:Hystrix - How To Use
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 跨域
  • 力扣(LeetCode)357
  • 前端临床手札——文件上传
  • 如何设计一个微型分布式架构?
  • 如何胜任知名企业的商业数据分析师?
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • Nginx实现动静分离
  • 阿里云ACE认证学习知识点梳理
  • 进程与线程(三)——进程/线程间通信
  • ​linux启动进程的方式
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #HarmonyOS:Web组件的使用
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (03)光刻——半导体电路的绘制
  • (C++哈希表01)
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (k8s中)docker netty OOM问题记录
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (七)Java对象在Hibernate持久化层的状态
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net 使用ajax控件后如何调用前端脚本
  • .net打印*三角形
  • @angular/cli项目构建--http(2)
  • @SentinelResource详解
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [ActionScript][AS3]小小笔记
  • [BJDCTF2020]EzPHP1
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析