1.Cesium地形切片--CTB(cesium-terrain-builder)填坑指南
2.(五) Geometries
3.Cesium中文网——如何开发一款地图下载工具[一]
Cesium地形切片--CTB(cesium-terrain-builder)填坑指南
面临全中国Cesium地形数据制作需求,原计划使用cesiumlab进行操作,但处理数千张DEM数据时,面临性能和数据管理问题,导致项目效率低下。
随后发现CTB(cesium-terrain-builder)工具,远程协助软件源码能有效提升处理速度,且不占用个人办公资源,便于数据处理与后期发布。然而,使用过程中遇到编译问题,GDAL环境部署后,CTB的cmake编译不通过,经排查后发现是GDAL版本与CTB需求不符,调整至GDAL-2.4.4后,问题解决。
在验证CTB使用效果时,智慧公厕源码发现cesium无法直接使用CTB输出的gzip压缩地形文件,为了解决瓦片压缩问题,通过修改CTB源代码,将CTBZFileOutputStream改为CTBFileOutputStream,完成对输出文件格式的调整,使cesium能直接利用输出结果进行数据展示。
对于多数据同时处理问题,采用Python脚本按顺序处理文件夹下数据,并结合GDAL生成虚拟数据集(vrt)的方法,以简化层.json文件的合并过程,提升工作效率。最终,通过此方案,不仅成功解决了技术难题,还有效提升了项目处理效率,实现自动化与标准化流程。文件监听源码
(五) Geometries
本文主要介绍以下内容:
专栏代码地址: github.com/ue/three....
本文代码地址: github.com/ue/three....
在three.js概念里,mesh是由几何体Geometry和材质Material组成的,在源码Mesh.js可以看到之间的关系:
Mesh = Geometry + Material
为什么会有Mesh三角网的概念呢?
首先我们要回顾下图形渲染管线了。
所以,从上图可以理解:
Geometry: 就是在准备顶点数据,对应Vertex处理过程; Mesh: 就是对应的Triangle三角面处理过程; Material:对应Fragment片元处理过程,对每个三角面片进行着色、贴图等等处理;
几何体,就是在准备一堆顶点数据,主要包括顶点数据、颜色数据、UV贴图数据、法向量数据等等;简单的说,几何体就是数据源,如果你对如何通过三角面片拼接成几何体非常了解,完全可以自己组织数据,夜使者源码不幸的是,这样操作不仅麻烦,而且也是非常困难的事情。所以,three.js内置常用的几何体,供大家直接使用,然后控制Position、Scale、Rotation、visible等空间属性,来操控物体。
Three.js一共有 种内置的图元。
简单整个例子,了解下使用流程,其他几何体触类旁通,参考three.js官网即可。5.1驱动源码
参考代码:
执行命令:
运行后,场景中多一个Line。
运行后,多出一个三角锥:
为什么即存在Geometry,又存在BufferGeometry?
说白了,Geometry更适合于人来理解,自定义的地方比较多,但性能比较低一些;
BufferGeometry更适合计算机来理解,自定义的地方很少,适合对图形学非常了解的人使用,但是性能很高。
内置的几何体,都是一些非常基础的模型,可以使用这些基础模型组装成,搭积木的方式,组成非常复杂的场景。
目前国内,数字产业化搞得如火如荼,各个行业都要数字化,所以数据的来源也是非常复杂的,多种多样的,比如:BIM行业的Revit数据模型、CAD图纸,GIS行业的各种数据要素、倾斜摄影、tiles,可以参考CesiumLab的数据转换这张图。
最终都会将各行各业的数据进行转换,轻量化,瓦片化等等技术手段,传输给Three.js的BufferGeometry,进行渲染;
或者将数据通过Datasmith的插件,转换数据转换成Unreal Engine的资产进行渲染。
后期会针对熟悉的行业数据进行一一分析,探讨应用场景。
图形学分为三大部分,几何、渲染、动画。
Cesium中文网——如何开发一款地图下载工具[一]
Cesium中文网: cesiumcn.org/ | 国内快速访问: cesium.coinidea.com/
Cesium中文网的朋友们其中一个关注点是:独立开发一款地图(瓦片图)下载工具。
我们将通过多个博客文章[所有用户]和视频[付费用户]的形式来拆分并介绍这个主题。源代码将不断更新并提交到Github,地址:github.com/hujiulin/Map...。源代码对所有用户开放,若您觉得对您有帮助,请给予一个star以示鼓励。
重剑无锋,大巧不工。
这个工具将以C#和JavaScript的形式呈现。编程语言只是形式,理解其内部逻辑和流程,您也可以使用Java,Python,PHP或其他开发语言进行实现。
目前开源的工具非常简单(简陋),但我将定期更新和维护代码。如果您有任何问题,可以在Github上提交issue,或在公众号:Cesium中文网;QQ群:;论坛: cesium.coinidea.com/上留言和提问。
准备工作:
找到自己熟悉的一门开发语言,它支持:
一般来说,现代的开发语言都支持上述大部分功能。本文选择的是C#。在整个主题的中部,会引入JavaScript。
瓦片图服务器:
本文选择的是百度地图,其实大部分的瓦片图服务器都会有x, y, z(level)三个参数,百度地图的URL Pattern是:online{ 0}.map.bdimg.com/onlinelab...{ 1}&y={ 2}&z={ 3}&styles=pl&udt=&scaler=1&p=0
如果我们把x=1, y=1, z=3,在浏览器打开上述URL
online0.map.bdimg.com/o...
样例瓦片图
既然我们已经知道了瓦片图的生成规则,那我们只要指定具体的下载链接,我们就可以下载对应的了。C#的核心下载代码是,这里代码可以轻易地在网络上搜索到:
瓦片图批量下载:
接下来我们要做的是:
之前提到过地图的核心思想是四叉树,所以我们可以再次简单的处理,认为瓦片图也是四叉树构成的,一共分为级(网上可查)左右。那么
levelminX~maxXminY~maxY~~~~~~4…n1~2^(n-1)1~2^(n-1)
四叉树
批量下载的核心代码如下:
上述的运行代码肯定能下载,但是有很多问题。这些问题将在下一步中进行讨论。
当前软件界面
下载结果
下一步:
上面的这些问题将在后续的文章中进行介绍。
声明:
一般来说,地图服务器需要很大的存储资源和带宽资源,本文仅从学术角度和大家探讨现在的下载软件内部原理,如有错误欢迎大家指正。
Again: Github地址:github.com/hujiulin/Map...。源代码对所有用户开放,如果大家觉得有益,请轻轻地给一个star进行鼓励。
本文和软件仅做学术交流,严禁用于商业用途。
Cesium中文网交流QQ群:
Cesium中文网: cesiumcn.org/ | 国内快速访问: cesium.coinidea.com/
2024-12-22 10:24
2024-12-22 09:40
2024-12-22 08:48
2024-12-22 08:35
2024-12-22 08:14
2024-12-22 08:05