惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
C
Check Point Blog
P
Proofpoint News Feed
H
Help Net Security
月光博客
月光博客
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
U
Unit 42
美团技术团队
I
InfoQ
A
About on SuperTechFans

WSH

凑数日子 2026年,大概将会是最后一个人口保持在14亿以上的年份 感谢之人 数字经济中的注意力交易 突然的噩耗 一株洋瓜藤 再见到姑妈 港澳掠影 Miniflux 中文搜索能力增强 慢慢吹~~~轻轻送~~~ 房子梦 探索云南-大理 证书过期导致的错误 过年被追问工资 在秋天开始 水里的鱼 斩断联系1 云南壮族婚恋 我有一颗乳牙 世界的底色是争,抢,偷 无题4 无题3 人来人往 AI见闻 无题2 滇池掠影 WebGIS 三维空间分析之参考超图实现的天际线分析 我原来是个同步单线程 往事如烟1
三维之Cesium分屏显示
WSH · 2024-08-06 · via WSH

分屏是webgis系统很常见的基础功能,网上能找到很多文章和官方示例,描述的很详细了,不过由于我写的功能增加了一些其他操作,故这里简单记录下实现过程,

demo地址:https://www.wsh233.cn/webapp/gis-3d

以下是一些关键性代码:

1.设置Scene对象的splitPosition 属性,用于分割左右两侧场景视图所占的比例,其值介于(0,1),其中右侧作为底图,左侧作为叠加图层。

viewer.scene.splitPosition = 0.5;

2.添加两个图层资源树控件,分别管理左右场景图层。设置ImageryLayer对象的splitDirection属性,控制显示区域。

let lyr = new Cesium.ImageryLayer(Cesium.WebMapTileServiceImageryProvider())
lyr.splitDirection = Cesium.SplitDirection.LEFT

3.添加HTML元素作为分割条,监听鼠标移动事件,动态改变splitPosition,从而改变左右屏比例。

slider = document.getElementById("slider");
const handler = new Cesium.ScreenSpaceEventHandler(slider);
handler.setInputAction(
    this.startMove.bind(this),
    Cesium.ScreenSpaceEventType.LEFT_DOWN
);

handler.setInputAction(
    this.startMove.bind(this),
    Cesium.ScreenSpaceEventType.PINCH_START
);

handler.setInputAction(
    this.resize.bind(this),
    Cesium.ScreenSpaceEventType.MOUSE_MOVE
);

handler.setInputAction(
    this.resize.bind(this),
    Cesium.ScreenSpaceEventType.PINCH_MOVE
);

handler.setInputAction(
    this.endMove.bind(this),
    Cesium.ScreenSpaceEventType.LEFT_UP
);

handler.setInputAction(
    this.endMove.bind(this),
    Cesium.ScreenSpaceEventType.PINCH_END
);
resize(movement) {
    if (!this.moveActive) return;
    const relativeOffset = movement.endPosition.x;
    const splitPosition =
          (slider.offsetLeft + relativeOffset) / slider.parentElement.offsetWidth;
    slider.style.left = `${99.5 * splitPosition}%`;
    window.viewer.scene.splitPosition = splitPosition;
},

参考:

  1. https://sandcastle.cesium.com/?src=ImageryLayersSplit.html
  2. https://blog.csdn.net/weixin_45782925/article/details/123121883