第三章:Vue3.0+Openlayers+Cesium 三维地球WGS84瓦片乱序问题解决

瓦片加载问题

  大家好!不知道大家在看上一章内容时,是否发现上一章中当将瓦片调整为EPSG:4326时三维视图中的地图瓦片显示是有问题的,瓦片的层级结构错误导致加载的瓦片有明显的拉伸;所以本章节我们来处理上一章中的这些问题。

var sworldmap = new Sworld.SworldMap({
    mapContainer: "map",
       initView: {
           center: [115, 39],
           zoom: 4,
           project: 'EPSG:4326',
           minZoom:0,
           maxZoom:29
       },
       baseMapUrls:{
           mapSync:true
       },
       terrainProviderUrl:''            
       });
sworldmap.run();

瓦片展示结果错乱。

在这里插入图片描述

主要原因

  那么造成这种问题的原因主要是因为在olcs中的OLImageryProvider.js中,瓦片X与Y方向上的瓦片起始编号默认是从1开始的,所以加载的瓦片并不是从第0-0号瓦片开始加载的,这样导致了瓦片加载的错乱。

修改方法

  要修改这些问题,我们需要在安装的模块目录node_modules中找到olcs,打开目录olcs/core/OLImageryProvider.js,对olcs的源代码进行修改。

修改瓦片底层源数据

  handleSourceChanged_方法中将默认设置起点编号的参数options相关部分代码全部删除,修改如下:

handleSourceChanged_(frameState) {
    if (!this.ready_ && this.source_.getState() == 'ready') {
        this.projection_ = olcsUtil.getSourceProjection(this.source_) || this.fallbackProj_;
  
        if (this.projection_ == getProjection('EPSG:4326')) {
          this.tilingScheme_ = new Cesium.GeographicTilingScheme();
        } else if (this.projection_ == getProjection('EPSG:3857')) {
          this.tilingScheme_ = new Cesium.WebMercatorTilingScheme();
        } else {
          return;
        }
        this.rectangle_ = this.tilingScheme_.rectangle;
  
        this.ready_ = true;
      }
}

修改瓦片请求方法

  requestImage方法中将获取瓦片等级z_值的判断修改为如果tilingScheme_瓦片方案为Cesium.GeographicTilingScheme时级别加1,修改如下:

const z_ = this.tilingScheme_ instanceof Cesium.GeographicTilingScheme ? level + 1 : level;

修改完成后,我们再重启一下项目;然后使用将地图框架投影设置为EPSG:4326后再次加载,结果如下:
在这里插入图片描述
那么到这里我们WGS84的坐标系瓦片三维加载也就能正常显示了,,如果大家觉得我的方法还有用的话,也请大家能够点赞鼓励一下,您的鼓励是我分享的动力,谢谢各位!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
请问在openlayers中如何删除Layer中的marker 3 在层中加了一个标记怎么永久的存到地图上 3 OpenLayers 如何设死地图边界 3 谁写过openlayers解析xml 3 openlayer.popup 3 OpenLayers 怎么做字段标注 4 字段标注不是用OL做的,而是你在SLD中定义用数据表的哪个字段做标签就可以了 4 OpenLayers 中画最短轨迹 4 使用TileCache配合OpenLayers 4 openlayers如何准确测距 9 openlayers简单实用例子 9 关于TileCache函数 13 openlayers 有函数说明的类图 14 go 14 Maker 一多,客户端就死掉 15 OpenLayers 怎么实现 AJAX 16 openlayer 要怎么研究才会应用得比较自如 16 改良OpenLayers的Popup 16 在openlayers的地图中要添加地图搜索功能一般采用什么方法 17 openlayers中如何访问geoserver发布的图片 18 什么是TMS? 18 怎样设置瓦片的大小 18 画一条线,数据量太大,怎么办? 18 怎么在图层上动态画点 20 GeoExt集成google map ,地图偏移 21 用JavaScript为OpenLayers.Marker的加上单击显示详细信息的功能 21 改良OpenLayers的MousePostion 25 使用OpenLayers实现一个在鼠标点击处添加标记的效果 27 openlayers 利用google maps的卫星地图 29 openLayers集成google map ,点标注错位 30 openlayers可以做出谷歌效果的地图吗? 31 用OpenLayers API和类来画点、线、面 32 OGC标准术语介绍WMS、WFS、WCS 35 如何控制地图的放缩 37 openLayers链接WMS的代码探讨 37 openlayers 2.5 矢量层在ie下闪烁的问题 38 openLayers 在地图上添加一个点并保存 39 openLayers 各个参数的意义 42 geoserver能搞出这种风格的图来吗? 43 关于SLD的线切割后的设置 43 GEOSERVE 标注铁路,使用 SLD 44 geoserver 发布.shp 中文乱码问题 怎么解决啊 45 Geoserver怎么连postGreSql 数据库 48 Geoserver连Oracle Spatial 52 GeoServer架构浅谈 53 Geoserver发布地图无法显示问题 57 WebGIS相关的OpenGIS规范 58 geoserver中地图以外的区域以自定义图片填充 62 怎样修改 geoServer 的用户名密码 65 GeoServer中的WMS服务生成的png图片背景色为透明 65 比例尺 65 需不需要一个layer对应一个store 66 如何部署shp 66 用GeoWebCache后Marker错位 66 标签太大导致不能显示? 67 geoserver把两个shapefile格式的图叠 67 GeoServer 能够集成 Google Map? 68 gwc地图切片的缓存路径在web.xml中设置么 68 如何实现地图查询? 68 sld文件怎么用 69 在sld中怎么控制路名的间隔? 69
Vue OpenLayers 是一种基于 Vue.js 的开源地图库,结合了 OpenLayers 的强大功能和 Vue.js 的易用性。其中,鼠标 pointermove 显示城市名片是 Vue OpenLayers 中非常有用的功能之一。下面我们来看一下示例代码。 在 Vue OpenLayers 中,我们可以使用 PointerMove() 方法来实现鼠标移动时的功能。我们可以在 mounted() 中添加以下代码: ```JavaScript mounted() { this.map.on('pointermove', this.displayCityCard); } ``` 这里,我们为指针移动事件添加了一个监听器,该监听器会调用 displayCityCard 方法。 接下来,我们需要实现 displayCityCard 方法,该方法会在指针移动时显示城市名片。代码如下: ```JavaScript methods: { displayCityCard(evt) { let features = this.map.getFeaturesAtPixel(evt.pixel); if (features.length) { let feature = features[0]; let city = feature.get('name'); this.city = city; this.showCityCard = true; } else { this.showCityCard = false; } } } ``` 这里,我们首先通过 getFeaturesAtPixel() 方法获取与指针所在位置对应的要素。如果有要素,则从中取出城市名,并将其赋值给 city。同时,我们将 showCityCard 属性设置为 true,以显示城市名片。如果没有要素,则将 showCityCard 设置为 false,以隐藏城市名片。 最后,我们需要在模板中添加一个 div 元素,用于显示城市名片: ```HTML <div v-if="showCityCard" class="city-card"> {{ city }} </div> ``` 这里,我们使用了 v-if 指令来控制 div 元素的显示与隐藏。如果 showCityCard 为 true,则显示该元素,并将城市名字显示在其中。 以上就是在 Vue OpenLayers 中实现鼠标 pointermove 显示城市名片的示例代码。通过这个函数,我们可以更加便捷地在地图上查看城市信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值