Cesium历史影像对比,全球历史影像0-17级

19 篇文章 4 订阅
16 篇文章 21 订阅

老规矩先上项目截图,符合预期往下看。

项目截图

大兴机场
大兴机场
天府国际机场

地图年份是2014-2022年的,层级最高到17级,就会受限制。

地图来源

这里是找的arcgis提供的历史影像网址,因为权限问题只能获取17级的,访问数据还可以。
历史影像
点击红框,页面右下角是影像请求地址

注意:arcgis提供的是WMTS格式

关键代码

  • 加载WMTS
//cesium 官方示例
const shadedRelief1 = new Cesium.WebMapTileServiceImageryProvider({
    url : 'http://basemap.nationalmap.gov/arcgis/rest/services/USGSShadedReliefOnly/MapServer/WMTS',
    layer : 'USGSShadedReliefOnly',
    style : 'default',
    format : 'image/jpeg',
    tileMatrixSetID : 'default028mm',
    // tileMatrixLabels : ['default028mm:0', 'default028mm:1', 'default028mm:2' ...],
    maximumLevel: 19,
    credit : new Cesium.Credit('U. S. Geological Survey')
});
viewer.imageryLayers.addImageryProvider(shadedRelief1);
  • 参数说明
    在这里插入图片描述

卷帘

const layer1 = viewer.imageryLayers.addImageryProvider(...);
layer1.splitDirection = Cesium.SplitDirection.LEFT;//左侧
const layer = viewer.imageryLayers.addImageryProvider(...);
layer.splitDirection = Cesium.SplitDirection.RIGHT;//右侧

源码

源码因为涉及到很多项目内部的组件就不全部贴出来了,这里提供简易版本的。

<template>
<div  id="cesiumContainer">
      <div id="slider"></div>
    </div>
</template>
<script lang="ts" setup>
import {  onMounted } from "vue";
onMounted(()=> {
	const viewer = new Cesium.Viewer("cesiumContainer", {
	    imageryProvider :new Cesium.TileMapServiceImageryProvider({
	    url: "http://192.168.2.183:9310/maptilecache/service/tms/1.0.0/image_global_base_big-PNG-4326@EPSG:4326@png",
	    fileExtension: 'png',
	    minimumLevel: 1,
	    maximumLevel: 19,
	    rectangle:Cesium.Rectangle.fromDegrees(-180.0, -90.0, 180.0, 90.0), // west,south,east,north,
	    tilingScheme: new Cesium.GeographicTilingScheme()
	  })
	});
	
	const layer = viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
	    url: `https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/default028mm/MapServer/tile/17825/{TileMatrix}/{TileRow}/{TileCol}`, // 复制 2.5 中的地址
	    layer: '',
	    style: 'default',
	    tileMatrixSetID: '',
	    format: 'image/png',
	    credit: '',
	    maximumLevel: 17
	  }));
	layer.splitDirection = Cesium.SplitDirection.RIGHT;
	const layer1 = viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
	    url: `https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/default028mm/MapServer/tile/13851/{TileMatrix}/{TileRow}/{TileCol}`, // 复制 2.5 中的地址
	    layer: '',
	    style: 'default',
	    tileMatrixSetID: '',
	    format: 'image/png',
	    credit: '',
	    maximumLevel: 17
	  }));
	layer1.splitDirection = Cesium.SplitDirection.LEFT;
	initRollerShutter(viewer)
})
const initRollerShutter = (viewer: Cesium.Viewer) => { //初始化卷帘
  if (handler) {
    handler.destroy();
    handler = null;
  }
  const slider = document.querySelector("#slider");
  if (slider) {
    const dom: HTMLCanvasElement = slider as HTMLCanvasElement;
    if (dom.parentElement) {
      handler = new Cesium.ScreenSpaceEventHandler(dom);
      viewer.scene.splitPosition =
        dom.offsetLeft / dom.parentElement.offsetWidth;
      let moveActive = false;
      function move(movement: any) {
        if (!moveActive) {
          return;
        }
        const relativeOffset = movement.endPosition.x;
        if (dom.parentElement) {
          const splitPosition =
            (dom.offsetLeft + relativeOffset) / dom.parentElement?.offsetWidth;
          dom.style.left = `${100.0 * splitPosition}%`;
          viewer.scene.splitPosition = splitPosition; // 设置卷帘左右分区范围(0-1)之间
        }
      }
      handler.setInputAction(function () {
        moveActive = true;
      }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
      handler.setInputAction(function () {
        moveActive = true;
      }, Cesium.ScreenSpaceEventType.PINCH_START);

      handler.setInputAction(move, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
      handler.setInputAction(move, Cesium.ScreenSpaceEventType.PINCH_MOVE);

      handler.setInputAction(function () {
        moveActive = false;
      }, Cesium.ScreenSpaceEventType.LEFT_UP);
      handler.setInputAction(function () {
        moveActive = false;
      }, Cesium.ScreenSpaceEventType.PINCH_END);
    }
  }
}
</script>
<style lang="less" scoped>
.cesiumContainer{
  position: relative;
}

.cesiumContainer{
  position: relative;
  width:100vw;
  height:100vh;

  #slider {
    position: absolute;
    left: 50%;
    top: 0px;
    background-color: #d3d3d3;
    width: 5px;
    height: 100%;
    z-index: 9;
  }

  #slider:hover {
    cursor: ew-resize;
  }
}
</style>

投影坐标系和地理坐标系

GCS:(Geographic Coordinate System)

1、地球只有一个质心,只是测不测的精确的问题而已。由地球的唯一性和客观存在,以地球质心为旋转椭球面的中心的坐标系,叫地心坐标系(地心坐标系又名协议地球坐标系),且唯一。质心不一定等于几何中心。

2、这里还要引出一个问题,地图是为人民服务的,每个国家都想让地图尽可能准确地描述本国的地形地貌,因此就有国家把质心“移走”,让局部的表面“贴到”该国的国土,使之高程误差尽量减小到最小。
这个时候,就出现了所谓的“参心坐标系”。即椭球中心不在地球质心的坐标系。

3、我们国家主要用到的四个GCS。

  • 北京54坐标系、西安80坐标系、WGS84坐标系(World Geodetic System-1984)、CGCS2000坐标系

PCS(Projection Coordinate System)
PCS=GCS+投影方式

1、常用投影方式:高斯-克吕格投影、墨卡托投影、通用横轴墨卡托投影

墨卡托投影:它的投影面是竖着的椭圆柱面,并且投影面与地轴方向一致,所以也叫正轴等角切/割圆柱投影。百度地图和Google Maps使用的投影方法都是墨卡托投影。

高斯-克吕格投影(横轴墨卡托投影)

  • 它的投影面是椭圆柱面
  • 投影后的地图,角度不变,面积会变。离中央经线越远的地区,面积变化越大。此投影合适用于导航。
  • 投影椭圆柱面是横着的;
  • 投影椭圆柱面与椭球体相切。

6°分带法:从格林威治零度经线起,每6°分为一个投影带,全球共分为60个投影带。
3°分带法:从东经1°30′起,每3°为一带,将全球划分为120个投影带。
我国1:2.5万1:50万地形图使用6度分带法;1:50001:10000地形图使用3度分带法。

通用横轴墨卡托投影(UTM投影)

  • 它和高斯克吕格投影特别像,只不过它是割圆柱,就是球体与椭圆柱面相割。因此也被称作横轴等角割圆柱投影
  • 我国遥感影像通常会用UTM投影。
  • 3857是投影坐标系嘛,以米为单位,4326是地理坐标系以度为单位
            var viewer = new Cesium.Viewer('cesiumContainer');
            var wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
                url : 'http://localhost:8080/geoserver/shp/wms',
                layers : 'shp:wafangdianshi_0',
                parameters : {
                    transparent : true,     //是否透明
                    format : 'image/png',
                    srs: 'EPSG:4326',
                    styles:''
                }
            });
            viewer.imageryLayers.addImageryProvider(wmsImageryProvider);


            var viewer = new Cesium.Viewer('cesiumContainer');
            var wmtsImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
                url : 'http://localhost:8080/geoserver/gwc/rest/wmts/wzf:wafangdianshi_0/{style}/{TileMatrixSet}/{TileMatrixSet}:{TileMatrix}/{TileRow}/{TileCol}?format=image/png',
                layer : 'wzf:wafangdianshi_0',
                style : '',
                format : 'image/png',
                tileMatrixSetID:'EPSG:900913'      //一般使用EPSG:3857坐标系
            });
            viewer.imageryLayers.addImageryProvider(wmtsImageryProvider);

cesium加载地图服务的注意事项:
(1)首先要弄弄清地图服务的坐标系,例如可以通过查看 0级0文件夹下是1张还是2张瓦片来判断。
EPSG4326:tile_num(z) = 2的(2z+1)次方 个瓦片;
EPSG3857:tile_num(z) = 2的(2z)次方 个瓦片;
(2)cesium调用地图服务的时候,默认的坐标系是EPSG3857,默认的切片原点是左上角,即-180,90。如果是调用EPSG4326坐标系下的地图服务,需要加上

tilingScheme: new Cesium.GeographicTilingScheme()
WebMercatorTilingScheme //其中WebMercatorTilingScheme对应于EPSG:3857切片方案 常见于谷歌地图、微软必应地图以及大多数的ArcGIS在线地图,也是Cesium中默认的切片方案。
GeographicTilingScheme//对应于EPSG:4326切片方案,是一个简单的地理投影方案,可直接将经纬度映射为X和Y,这种投影通常被称为地理投影、等矩形投影、等距圆柱形投影等。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium是一种基于Web的地图影像解决方案,可以实现全球地图数据的可视化和交互。要获取Cesium地图影像地址,首先需要准备地图数据。 Cesium支持的地图数据源非常丰富,包括高分辨率的卫星影像、地理矢量数据、地形数据等。这些数据通常由各个地理信息系统(GIS)提供商或地理数据提供商提供。 可以通过以下几个步骤获取Cesium地图影像地址: 1. 确定你需要的地图影像源。例如,你可以选择使用国内外的地理数据提供商的地图影像,或者使用自己的地理数据。 2. 找到合适的地理信息提供商或地理数据提供商。可以通过互联网搜索或咨询相关领域的专业人士来获取信息。 3. 在提供商的网站上找到你需要的地图数据。通常,你可以在地图数据提供商的网站上搜索和浏览可用的数据集,然后选择你想要的地图影像数据。 4. 获取地图影像数据的URL地址。一旦你找到了合适的地图影像数据,通常可以在提供商的网站上找到该数据的URL地址。 5. 将地图影像数据的URL地址嵌入到Cesium的代码中。在你的Cesium应用程序中,可以使用Cesium的图层类(如imageryLayer)将地图影像数据加载到地球模型上,并通过设置URL参数来指定影像数据的URL地址。 综上所述,获取Cesium地图影像地址需要选择合适的地图数据源,并从提供商的网站获取数据的URL地址,然后在Cesium应用程序中使用。这样就可以实现Cesium地图影像的可视化和交互。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值