1.Cesium加载本地切片南北极缺失问题
最近有加载本地切片数据的需求,但加载时遇到极地区域影像加载不完全的问题,很困惑,于是用该篇文章记录一下~
2.webGIS中常用的投影坐标系
学习自GIS中的WGS84地理坐标系和墨卡托投影坐标系,真的写的很清楚!
首先我们需要知道webGIS中常用的坐标系一般有两种:
1.以经纬度表示的WGS84坐标系(EPSG:4326),通过经纬度直投将地球展示在一个平面上;经纬度等间隔直投的特点是相同的经纬度间隔在屏幕上的间距相等,没有复杂的坐标变换。但是只是在低纬度地区长度、角度、面积、形状变化比较小,越向高纬度,水平距离变长越大,很小的纬圈都变得和赤道一样长。同时要素自身会变形,长方形会变成上宽下窄的倒梯形。
2.主流web地图厂商使用的web墨卡托投影(EPSG:3857):由于经纬度直投下地物被明显的拉长了,角度也发生了变化,就引出了墨卡托投影。墨卡托投影的“圆柱”特性,保证了南北(纬线)和东西(经线)都是平行直线,并且相互垂直。而且经线间隔是相同的,纬线间隔从标准纬线(此处是赤道,也可能是其他纬线)向两级逐渐增大。web墨卡托投影(伪墨卡托投影)最早是由 Google 提出的,由于南北两极的失真过大,web墨卡托投影切掉了南北85.051129°纬度以上的地区,以保证整个投影是正方形的,当前已经成为 webMap 的事实标准。
3.Cesium加载本地切片支持的切片方案
对于Cesium只支持两种切片方案:
学习自cesium wmts切片方案 TilingScheme-CSDN博客
// 默认:web墨卡托投影,经纬度-180~180,-85~85(切片方案的x和y比例是1:1) tilingScheme :new Cesium.WebMercatorTilingScheme() // 经纬度投影,经纬度-180~180,-90~90(切片方案的x和y比例是2:1) tilingScheme : new Cesium.GeographicTilingScheme()
对于web墨卡托投影,本地切片数据0级只有一个文件夹,文件夹中只有一张影像图片
对于经纬度直投,本地切片数据0级有两个文件夹,每个文件夹中只有一张影像图片
4.解决Cesium加载本地切片南北极缺失问题(由墨卡托投影导致)
现在我们已经将背景知识了解清楚了,那么为什么当我们加载本地切片数据时,南北极会有漏洞呢?
首先我们需要知道我们加载的本地切片是什么投影类型?我加载的web墨卡托投影的本地切片,由上述可知,该数据纬度范围是在-85~85范围内的,所以南北极是没有影像的。CesiumJS在使用Web墨卡托覆盖极点时,会自动拉伸影像层。因此,你可以通过viewer.imageryLayers.removeAll()方法删除Cesium的默认影像层,然后添加你自己本地的影像切片数据,这样它就具有覆盖极点的相同行为。(参考自community.cesium.com)
cesiumViewer.imageryLayers.removeAll();
window.webMercatorBaseLayer = new Cesium.TileMapServiceImageryProvider({
url:'xxx',
tilingScheme : new Cesium.WebMercatorTilingScheme(), // 可以不写
});
5.Cesium加载经纬度直投的本地切片数据
如果我们加载经纬度直投的本地切片,例如google影像数据,就不需要自动拉伸影像层。
window.googleBaseLayer = new Cesium.TileMapServiceImageryProvider({
url:'xxx',
tilingScheme : new Cesium.GeographicTilingScheme(),
});
简单记录到这里,欢迎大家多多讨论,共同进步!