实现步骤

Step 1. 引用开发库
本示例引用 local 本地【include-cesium-local.js】开发库,完成此步骤后才可调用三维 WebGL 的功能;

Step 2. 创建布局
创建id='GlobeView'的 div 作为三维视图的容器,并设置其样式;

Step 3. 构造三维场景控件
实例化Cesium.WebSceneControl对象,完成此步骤后可在三维场景中加载三维球控件;

Example:

/构造三维视图对象(视图容器div的id,三维视图设置参数)var webGlobe = new Cesium.WebSceneControl('GlobeView', {})

Step 4. 加载数据:
    加载数据:构造CesiumZondy.Layer.M3DLayerM3D 图层管理对象,调用append()方法,传入 M3D 缓存三维地图服务的 URL 地址即可加载浏览数据,同时可传入相关配置参数。

Example:

//构造M3D模型层管理对象(视图)var m3dLayer = new CesiumZondy.Layer.M3DLayer({viewer: webGlobe.viewer,})//加载M3D地图文档(服务地址,配置参数)var obliqueLayer = m3dLayer.append('http://develop.smaryun.com:6163/igs/rest/g3d/钻孔分层点_Sur_000_Ent', {})

关键接口

1.【三维场景控件类】Cesium.WebSceneControl(elementId, options)

参数名 类 型 说 明
elementId Element | String 放置视图的div的id
options Object (可选)附加属性
  • options属性主要参数
参数名 类 型 默认值 说 明
viewerMode String ‘3D’ (可选)初始视图模式默认为三维球视图 '2D’表示二维视图 ‘COLUMBUS_VIEW’ 表示三维平面视图
showInfo Boolean false (可选)是否显示默认的属性信息框
animation Boolean true (可选)默认动画控制不显示
baseLayerPicker Boolean true (可选)是否创建图层控制显示小组件
fullscreenButton Boolean true (可选)是否创建全屏控制按钮
vrButton Boolean false (可选)是否创建VR按钮

2.【M3D 模型层管理类】CesiumZondy.Layer.M3DLayer

【method】append(url, options):添加 M3D 地图文档服务

参数名 类 型 说 明
url String 文档服务地址
options Object 附加属性
  • options属性主要参数
参数名 类 型 默认值 说 明
autoReset Boolean true (可选)是否自动定位
synchronous Boolean true (可选)是否异步请求
loaded Boolean function (可选)回调函数
proxy DefaultProxy defaultProxy (可选)代理
showBoundingVolume Boolean false (可选)是否显示包围盒
maximumScreenSpaceError Number 16 (可选)用于控制模型显示细节,值较大将会渲染更少的贴图,进而可以提高性能,而较低的值将提高视觉质量

代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title>M3D-地质体数据展示</title><!--引用第三方的jQuery脚本库--><script include="jquery" src="./static/libs/include-lib-local.js"></script><!--引用Cesium脚本库文件--><script src="./static/libs/include-cesium-local.js"></script><!--引用示例页面样式表--><link rel="stylesheet" href="./static/demo/cesium/style.css" /><script>//在JS脚本开发中使用严格代码规范模式,及时捕获一些不规范的行为,从而避免编程错误'use strict';//定义三维场景控件对象var webGlobe;//定义图层类var geobodyLayerArr;//加载三维场景function init() {//构造三维视图对象(视图容器div的id,三维视图设置参数)webGlobe = new Cesium.WebSceneControl('GlobeView', {});//构造视图功能管理对象(视图)var sceneManager = new CesiumZondy.Manager.SceneManager({viewer: webGlobe.viewer});//设置鼠标位置信息展示控件:经纬度、高程、视角高度(容器div的id)sceneManager.showPosition('coordinate_location');//是否显示场景球webGlobe.viewer.scene.globe.show = false;//大气显示webGlobe.viewer.scene.skyAtmosphere.show = false;//透明度webGlobe.viewer.scene.globe.enableTransparent = true;webGlobe.viewer.scene.globe.baseColor = new Cesium.Color(255 / 255, 255 / 255, 255 / 255, 0.001);//开启地形深度检测webGlobe.viewer.scene.globe.depthTestAgainstTerrain = true;// 亮度设置var stages = webGlobe.viewer.scene.postProcessStages;webGlobe.viewer.scene.brightness = webGlobe.viewer.scene.brightness || stages.add(Cesium.PostProcessStageLibrary.createBrightnessStage());webGlobe.viewer.scene.brightness.enabled = true;webGlobe.viewer.scene.brightness.uniforms.brightness = Number(1.3);// 修改场景时间var utc = Cesium.JulianDate.fromDate(new Date("2020/7/04 24:00:00"));webGlobe.viewer.clock.currentTime = Cesium.JulianDate.addHours(utc, 0, new Cesium.JulianDate());//构造M3D模型层管理对象(视图)var m3dLayer = new CesiumZondy.Layer.M3DLayer({viewer: webGlobe.viewer});//加载M3D地图文档(服务地址,配置参数)var { protocol, ip, port } = window.webclient;geobodyLayerArr = m3dLayer.append(`${protocol}://${ip}:${port}/igs/rest/g3d/钻孔分层点_Sur_000_Ent`,{autoReset: true,loaded: function (layer) {var boundingSphere = layer.boundingSphere;var cartographic = Cesium.Cartographic.fromCartesian(layer.boundingSphere.center);var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude,cartographic.latitude,0.0);var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude,cartographic.latitude,-12);var translation = Cesium.Cartesian3.subtract(offset,surface,new Cesium.Cartesian3());layer.modelMatrix = Cesium.Matrix4.fromTranslation(translation);},});//视点跳转(经度,纬度,视角高度,方位角,俯仰角,翻滚角)sceneManager.flyToEx(112.94845170512113, 30.004246325952618, {height: 2600,heading: 67,pitch: -30,roll: 0});initPick();}function initPick() {let handler = new Cesium.ScreenSpaceEventHandler(webGlobe.viewer.scene.canvas);handler.setInputAction(handleClick.bind(this),Cesium.ScreenSpaceEventType.LEFT_DOWN);}function handleClick(screenPosition) {const viewer = webGlobe.viewer;const scene = webGlobe.viewer.scene;const { position } = screenPosition;var pickedFeature = viewer.scene.pick(position);console.warn("screenPosition", pickedFeature);}</script>
</head><body onload="init()"><!--三维场景容器--><div id='GlobeView'></div><!--位置信息容器--><div id="coordinateDiv" class="coordinateClass"><label id="coordinate_location"></label></div>
</body></html>

三维GIS开发:利用Cesium加载 M3D 地质体模型(附代码)相关推荐

  1. 利用Cesium加载 M3D BIM 模型

    本例展示如何在在三维场景中加载 M3D 的 BIM 模型数据,对接 IGServer 发布的三维地图服务. 实现步骤 1. 引用开发库: 本示例引用 local 本地[include-cesium-l ...

  2. 三维GIS开发的发展路线以及需要掌握的技能

    什么是三维gis? ​ 三维GIS在WebGIS的基础上,增加了对地球表面的第三维度,即高度或深度. 相比于二维层面的WebGIS,三维GIS能够更好的分析和处理地理空间数据,使用准确的三维地理模型可 ...

  3. Cesium加载模型两种方式

    Cesium加载模型两种方式 代码如下 <!DOCTYPE html> <html><head><meta charset="UTF-8" ...

  4. 三维地图之cesium加载天地图(有代码)

    天地图官网上写了cesium加载天地图的方法,http://lbs.tianditu.gov.cn/docs/#/sanwei/,但读起来,写起来,的确令人费解. 下面写一段非常简单的代码,用cesi ...

  5. QGIS离线GeoJSON数据,使用Cesium加载并根据楼层高度拉伸(weixin公众号【图说GIS】)

    前言 往往好多事情是需求推动的,正好一个网友在群里问到"怎么让Cesium加载GeoJSON的白膜并贴在地形上?",联系到他,要了他的数据,完成了代码并测试通过.正好出差,而且一个 ...

  6. vite+cesium加载3DTile数据

    Cesium 3D Tile是Cesium的一种特有的3D模型格式,其文件名后缀为.b3dm,而要在自己开发的平台上调用这些3D Tile,一般为通过后缀为.json格式的文件来调用.b3dm格式的3 ...

  7. Cesium加载3D Tiles模型

    最近遇到一个问题,使用大疆无人机做的倾斜摄影三维模型,需要加载到地图上进行显示.从大疆的制图软件导出后,三维模型文件的后缀名为b3dm,经查阅资料发现,是3D Tiles格式. 3D Tiles 3D ...

  8. 基于TerraDeveloper的三维GIS开发研究

    [中文题名]  基于TerraDeveloper的三维GIS开发研究 [英文题名]  Research on the Development of 3D GIS Based on TerraDevel ...

  9. C# WPF Caliburn.Micro框架下利用Mef加载其它项目界面

    01 - 前言 MEF是微软自家的托管可扩展框架,在这里我把它用成了ioc容器.在Caliburn.Micro框架下,view和viewmodel被注入到CompositionContainer容器中 ...

最新文章

  1. linux6.2下安装oracle11g,Oracle Linux6.2下安装Oracle11gR2.docx
  2. Android给文档加水印,Android文档水印之PDF水印
  3. 前端遮罩层实现_cocos creator--游戏开奖功能组件《刮刮卡》特效实现
  4. 【Java】 归并排序的非递归实现
  5. Linux学习——Makefile
  6. 测试的目的_盐雾测试的目的是什么
  7. The diagram must contain a powergui block. The block must be named powergui matlab simulink 报错
  8. html阅读模式怎么进入word模式,word阅读模式怎么取消
  9. 如何在开源世界打造自己的明星 Project?
  10. 推荐一本好书《 Java程序员 上班那点事儿》
  11. 【TS】泛型 Generics
  12. Ubuntu WPS 字体缺失问题解决
  13. System.Windows.Freezable 在未被引用的程序集中定义
  14. 数据分析01 - 规范化方法
  15. Linux漏洞:showmount -e信息泄露(CEE-1999-0554)
  16. 星座运势周公解梦带流量主微信小程序源码下载
  17. 三维空间中的平面方程
  18. 使用设计模式解决支付问题
  19. linux怎样删除分区合并,linux u盘分区合并分区工具重复歌曲怎样删除
  20. 优酷视频提取声音 王睿卓 带我到山顶 MP3

热门文章

  1. 上海医保系统的三重保障
  2. oracle revers函数,Oracle SQL 语句中对Like的优化(引用reverse函数)
  3. 第一节计算机课开场白,电脑课上老师的开场白
  4. E - Polycarp and Snakes(模拟)
  5. Apache NiFi远程代码执行-RCE
  6. 计算机硬件的英语ppt,介绍计算机PPT课件.ppt
  7. zephyr学习笔记---双向链表dlist
  8. C++之工厂(factory)模式
  9. Aruba IAP配置remote ap(RAP)步骤
  10. android蓝光原盘播放软件,安卓系统真的拥有完美的蓝光原盘菜单导航吗?我来测试下...