cesium实现卷帘效果(一张地图同时加载两个不同服务)

第一步使用css画出卷帘中间的分界线

<template>
<div class="swiper-class" ref="swiper-class"></div>
</template>

<style>

.swiper-class {
    height: 100%;
    width: 5px;
    background: #d3d3d3;
    position: absolute;
    top: 0px;
    left: 50%;
    z-index: 10;
    cursor: pointer;
}
</style>
第二步给左右两边添加不同的服务
<script setup>
onMonted(()=>{

    function initRoller() {
          
        viewer.vlaue 是保存的地图对象 
        
        图层的加载方式根据你的需求来加载 

        let leftLayer=viewer.value.imageryLayers.addImageryProvider(
         new Cesium.WebMapTileServiceImageryProvider({
            url: 放你的服务地址,
            layer:  '',
            style: 'default',
            format: 'image/webp',
            tileMatrixSetID: 'EGSP:3857',
            tilematrixset: 'EGSP:3857',
            tileWidth: 256,
            tileHeight: 256,
            service: 'WMTS',
            tilerow: 'TileRow',
            tilecol: 'TileCol',
            tilematrix: 'TileMatrix',
            version: '1.0.0',
            request: 'GetTile',
        }))   
    
           let rightLayer=viewer.value.imageryLayers.addImageryProvider(
        new Cesium.WebMapTileServiceImageryProvider({
            url: 放你的服务地址,
            layer: '',
            style: 'default',
            format: 'image/webp',
            tileMatrixSetID: 'EGSP:3857',
            tilematrixset: 'EGSP:3857',
            tileWidth: 256,
            tileHeight: 256,
            service: 'WMTS',
            tilerow: 'TileRow',
            tilecol: 'TileCol',
            tilematrix: 'TileMatrix',
            version: '1.0.0',
            request: 'GetTile',
        }))  
            
        设置左右两边的图层服务

        leftLayer.splitDirection = Cesium.SplitDirection.LEFT

        rightLayer.splitDirection = Cesium.SplitDirection.RIGHT
        }  
    }

})

</script>
第三步实现卷帘轴的左右跟随滑动
<script setup>


onMonted(()=>{

function initRoller() {
        nextTick(() => {
            获取到当前的分割线dom
            let  swiperSlider = proxy.$refs['swiper-class']

            进行左右的分割
            viewer.value.scene.splitPosition = swiperSlider.offsetLeft / swiperSlider.parentElement.offsetWidth

                viewer.value 是保存的初始化的viewer数据

                const handler = new Cesium.ScreenSpaceEventHandler(swiperSlider)

                moveActive = false

                添加地图的滑动点击事件等 开启拖拽
                handler.setInputAction(function () {
                        moveActive = true
                }, Cesium.ScreenSpaceEventType.LEFT_DOWN)

                handler.setInputAction(function () {
                        moveActive = true
                }, Cesium.ScreenSpaceEventType.PINCH_START)
                
                handler.setInputAction(swiperMove, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
                handler.setInputAction(swiperMove, Cesium.ScreenSpaceEventType.PINCH_MOVE)

                handler.setInputAction(function () {
                        moveActive = false
                }, Cesium.ScreenSpaceEventType.LEFT_UP)
                handler.setInputAction(function () {
                        moveActive = false
                }, Cesium.ScreenSpaceEventType.PINCH_END)
        })

}


function swiperMove(movement) {
        if (!moveActive) {
                return
        }
        const relativeOffset = movement.endPosition.x
        const splitPosition = (swiperSlider.offsetLeft + relativeOffset) / swiperSlider.parentElement.offsetWidth
        swiperSlider.style.left = `${100.0 * splitPosition}%`
        viewer.value.scene.splitPosition = splitPosition
}


})


</script>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Cesium实现加载地形服务时提升原有高度的效果,你可以使用Cesium的TerrainProvider API加载地形数据,并使用Cesium的SampledHeightProperty API来提升地形高度。 以下是实现提升原有高度效果的步骤: 1. 加载地形数据 使用Cesium的TerrainProvider API加载地形数据。Cesium支持多种地形数据源,例如STK World Terrain、Cesium Terrain、Mapbox Terrain等。你可以根据自己的需求选择相应的数据源。 ``` var viewer = new Cesium.Viewer('cesiumContainer'); var terrainProvider = new Cesium.CesiumTerrainProvider({ url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles' }); viewer.terrainProvider = terrainProvider; ``` 2. 创建地形几何体 使用Cesium的GroundPrimitive API创建地形几何体。你可以设置几何体的位置、高度、颜色等属性。 ``` var geometry = new Cesium.RectangleGeometry({ rectangle: Cesium.Rectangle.fromDegrees(-75.0, 39.0, -71.0, 42.0), vertexFormat: Cesium.VertexFormat.POSITION_AND_NORMAL }); var instance = new Cesium.GeometryInstance({ geometry: geometry, modelMatrix: Cesium.Matrix4.IDENTITY, attributes: { color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED) } }); var primitive = new Cesium.GroundPrimitive({ geometryInstances: instance, allowPicking: false }); viewer.scene.primitives.add(primitive); ``` 3. 监听高度变化 使用Cesium的SampledHeightProperty API监听高度变化。你可以在地形高度变化时更新几何体的高度。 ``` var heightProperty = new Cesium.SampledHeightProperty(); heightProperty.addSample(viewer.clock.currentTime, 0); // 初始高度为0 viewer.clock.onTick.addEventListener(function(clock) { var time = clock.currentTime; var height = Math.sin(time.secondsOfDay) * 100; // 模拟高度变化 heightProperty.addSample(time, height); }); primitive.appearance = new Cesium.MaterialAppearance({ material: Cesium.Material.fromType('Color', { color: Cesium.Color.RED }) }); primitive.height = heightProperty; ``` 这样,在地形数据加载完成后,几何体就会被放置在地形上,并可以随着高度变化而改变高度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值