Cesium淹没分析

一、概述

Cesium是一种开源的JavaScript库,用于创建3D WebGIS应用程序,具有跨平台、可扩展性和高性能等特点。Cesium淹没分析是利用Cesium的高可视化能力进行水淹分析,可以在地球表面自动生成水面淹没区域,并以视觉化的方式呈现。通过Cesium淹没分析,用户可以了解风暴潮、飓风等自然灾害事件对城市、沿海地区的影响情况,具有重要的应用价值。

二、地形图加载

在进行水淹分析之前,需要加载高精度的地形图数据,Cesium提供了多种开源地图数据源。以下代码为Cesium中加载ArcGis地图数据源:

var imagery = new Cesium.ArcGisMapServerImageryProvider({
    url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
});
var terrain = new Cesium.CesiumTerrainProvider({
    url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
    requestVertexNormals : true
});

viewer.terrainProvider = terrain;
viewer.imageryLayers.addImageryProvider(imagery)

三、淹没分析实现

针对不同的水淹分析需求,可以采用不同的淹没分析方法。以下为一种简单的方法,在代码中生成水面模拟,以及生成水淹面覆盖。其中,生成水淹面需要生成网格数据,网格数据的每个顶点的高度即为该点到地面的距离减去淹没深度。

var scene = viewer.scene;
var primitives = scene.primitives;
var ellipsoid = scene.globe.ellipsoid;

var points = []; // 存储地理坐标点
for (var i = 0; i < positionData.length; i++) {
    var cartographic = new Cesium.Cartographic.fromDegrees(positionData[i][0], positionData[i][1]);
    var terrainHeight = ellipsoid.cartographicToHeight(cartographic);
    var point = new Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, terrainHeight);
    points.push(point);
}

var waterHeight = 30; // 水面高度
var mesh = Cesium.TriangleMesh.fromPositions(points, waterHeight); // 生成水面模拟
var meshPrimitive = new Cesium.Primitive({
    geometryInstances: new Cesium.GeometryInstance({
        geometry: mesh,
        appearance: new Cesium.EllipsoidSurfaceAppearance({
            material: Cesium.Material.fromType(Cesium.Material.ColorType)
        })
    }),
    asynchronous: false
});
primitives.add(meshPrimitive);

var meshdata = mesh.getGeometryInstanceAttributes('mesh');
var indices = mesh.getIndices();
var position = mesh.getPositions();
var length = indices.length;

var waterSurface = []; // 存储网格数据,计算淹没面覆盖
for (var i = 0; i < length; i=i+3) {
    var ind1 = indices[i];
    var ind2 = indices[i+1];
    var ind3 = indices[i+2];

    var pt1 = new Cesium.Cartesian3(position[ind1*3], position[ind1*3+1], position[ind1*3+2]);
    var pt2 = new Cesium.Cartesian3(position[ind2*3], position[ind2*3+1], position[ind2*3+2]);
    var pt3 = new Cesium.Cartesian3(position[ind3*3], position[ind3*3+1], position[ind3*3+2]);

    var v1 = Cesium.Cartesian3.subtract(pt2, pt1, new Cesium.Cartesian3());
    var v2 = Cesium.Cartesian3.subtract(pt3, pt1, new Cesium.Cartesian3());
    var normal = Cesium.Cartesian3.cross(v1, v2, new Cesium.Cartesian3());
    Cesium.Cartesian3.normalize(normal, normal);

    var arr = new Float32Array([pt1.x, pt1.y, pt1.z, normal.x, normal.y, normal.z,
        pt2.x, pt2.y, pt2.z, normal.x, normal.y, normal.z,
        pt3.x, pt3.y, pt3.z, normal.x, normal.y, normal.z]);
    waterSurface = waterSurface.concat(arr);
}

var primitive = new Cesium.Primitive({
    geometryInstances: new Cesium.GeometryInstance({
        attributes: {
            mesh: new Cesium.GeometryInstanceAttribute({
                componentDatatype: Cesium.ComponentDatatype.FLOAT,
                componentsPerAttribute: 6,
                values: waterSurface
            })
        },
        primitiveType: Cesium.PrimitiveType.TRIANGLES,
        appearance: new Cesium.EllipsoidSurfaceAppearance({
            material: Cesium.Material.fromType(Cesium.Material.ColorType)
        })
    })
});
primitives.add(primitive);

四、水淹分析结果展示

通过Cesium淹没分析,生成的分析结果可以进行水淹模拟、淹没分析数据可视化等操作。以下为生成的水淹面覆盖截图:

五、应用场景和展望

Cesium淹没分析可以应用于自然灾害预警、城市规划等领域,为公众提供更精准的分析结果和决策支持。未来,随着地理信息技术的进一步发展,Cesium淹没分析将更加成熟、普及。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/193928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-02 09:41
下一篇 2024-12-02 09:41

相关推荐

  • 全面解析Cesium Entity

    一、概述 Cesium Entity是CesiumJS中重要的组件之一,它能够代表场景中的实体,包括物体、光源、相机、模型、贴图等,可通过调整各种属性来控制其在场景中的行为和演示效…

    编程 2025-04-23
  • Cesium GeoJSON详解

    一、概述 Cesium是一个基于WebGL的JavaScript库,用于构建与时间和空间相关的地理信息应用程序。Cesium支持GeoJSON数据的加载和展示,使您能够轻松地将地理…

    编程 2025-04-20
  • Cesium可视域分析

    一、可视域分析介绍 包括地形、建筑等自然和人造物体会对视线产生遮挡,而对于部分应用场景,比如军事、城市规划等领域,需要进行可视域分析。可视域分析可以得到一个点或者某一区域的可见性,…

    编程 2025-02-01
  • cesium flyto 的详细阐述

    cesium.io 是一个开源的 JavaScript 应用程序,它可以用于在三维地球上创建高质量的 Web 地图。cesium flyto 是 cesium.io 中一个强大的功…

    编程 2025-01-20
  • cesiumjs离线地图(cesium 离线地图)

    本文目录一览: 1、Cesium可以加载百度地图吗 2、cesium地图瓦片404默认显示某张图片 3、cesium 和 Three.js有什么区别,以及二者与WebGL 的关系 …

    编程 2025-01-16
  • cesiumjs地下管道,cesium管线

    本文目录一览: 1、Cesium实战项目 2、skyline与cesium差异 3、Cesium初始化选项 Cesium实战项目 本人所学GIS专业,毕业后一直从事Cesium相关…

    编程 2025-01-04
  • Cesium FlyTo详解

    一、FlyTo概述 Cesium是一款基于WebGL开源JavaScript库,用于构建3D地球、地图及其他视觉化场景。它提供了许多常用的地图功能,如场景切换、相机控制、基础地图功…

    编程 2025-01-04
  • cesiumjs详细教程(cesium开发教程)

    本文目录一览: 1、Cesium在js中调用entity的infobox单机事件 2、Cesium初始化选项 3、Cesium随笔:视锥绘制(上) 4、cesium如何搭建dat.…

    编程 2025-01-02
  • Cesium 3DTileset详解

    一、概述 Cesium是一个基于WebGL、JavaScript和HTML5的开源虚拟地球(virtual globe)框架。在Cesium中,3DTileset是一种通过使用3D…

    编程 2024-12-29
  • cesium导出geojson(cesium导出大图)

    本文目录一览: 1、cesium 何如加载大数据量的geojson格式的数据,geojson有切片吗 2、如何获取乡镇地图的geojson或者shp图 3、Cesium GeoJs…

    编程 2024-12-24

发表回复

登录后才能评论