WebGIS面试题(第八期)
说在前面的一些话(碎碎念+吐槽):
目前这一段时间一直在忙自己的事情,以前以为自己精力旺盛,但是一上班,一开始朝九晚五,其实还不算是朝九晚五,早上八点半,晚上六点。发现每天回到家里以后是真的累,坐在沙发上休息会后洗漱收拾后一晃就九十点了。
哈哈 “钱难挣,屎难吃”,对我这个普通人太难了。如果目前还在学校的即将毕业的一定要考虑号自己想要的,及时早做准备,两手抓。
因为这些题目都是之前面试通过记忆面试结束后记录、部分通过录音。目前我还在整理,当然有一部分也是我在做项目中出现的问题,今天就先整理一点(偷懒),因为有些答案还需要实地操作才能得出。当然依旧是答案仅供参考。
1、cesium里面polyline线段有几种表现?
在Cesium中,Polyline(线段)可以有以下几种表现类型:
空间直线 (Space Line / No Arc): 这种类型的线段表现为两点之间的直接连线,无视地球曲率,适用于小范围或在平面上模拟直线效果。在Cesium中,可以通过设置
Cesium.ArcType.NONE
实现。球面线段 (Geodesic Line / Great Circle Arc): 考虑地球曲率,这种线段在球面上表现为大圆弧,是两点间地球上实际最短路径。使用
Cesium.ArcType.GEODESIC
可以得到这种表现形式。恒向线 (Rhumb Line / Loxodrome): 恒向线是一种在航行中保持固定方位角的航线,它在地图上表现为与纬线成一定角度的曲线。在Cesium中,通过指定
Cesium.ArcType.RHUMB
可以创建恒向线。
2、Cesium中3DTiles模型如何旋转
在Cesium中,对3D Tiles模型进行旋转可以通过修改模型的modelMatrix
属性来实现。
首先加载一个3D Tiles模型,然后定义绕X轴旋转的角度,并将其转换为弧度。接着,使用Cesium.Matrix3.fromRotationX
创建了一个表示X轴旋转的3x3矩阵,然后通过Cesium.Matrix4.multiplyByMatrix3
将此旋转矩阵与模型的当前变换矩阵相乘,得到新的变换矩阵。最后,将这个包含旋转信息的新变换矩阵赋值给tileset.modelMatrix
,从而实现了模型的旋转。
具体代码如下:
// 导入Cesium库 |
3、cesium提供了三种方式,可以对camera进行操作,这三种方式,有三个共同的参数,heading,pitch, roll,那么,这三个参数分别是什么呢?
简单:这三个参数组合起来可以精确控制camera的方向和视角,常用于设置camera的初始位置、动画过渡(如flyTo操作)或动态调整观察视角。在Cesium的API中,如setView
、flyTo
、或lookAt
方法中,通过orientation
对象传递这些参数,通常需要将角度从度转换为弧度使用Cesium.Math.toRadians
函数。
详细:
在Cesium中,对camera进行操作时涉及的三个共同参数——heading、pitch、roll,它们是用来描述camera方向的旋转角度,与航空和航海中常用的欧拉角类似。具体来说:
- Heading(偏航角 / Yaw): Heading代表camera绕垂直方向(通常是指向地心的方向,也就是上方向)旋转的角度,影响camera左右看向的能力。在Cesium中,正值表示向右转,负值表示向左转。
- Pitch(俯仰角 / Pitch): Pitch代表camera绕横向(水平面的正面到背面)旋转的角度,决定了camera向上或向下看的程度。正值使camera抬头向上看,负值使camera低头向下看。当pitch达到90度时,camera朝向直接向下,达到-90度时则直接向上。
- Roll(翻滚角 / Roll): Roll描述camera绕其前进方向的轴线旋转,影响camera自身的侧翻。在大多数应用场景中,camera的roll通常被设置为0,以保持camera平台的水平,但在特殊视觉效果或模拟飞行中可能会用到非零的roll值。
4、看你做过很多项目,你能描述制作cesium 热力图的逻辑步骤过程嘛,就是你如何做一个热力图。
简单回答:直接引入开源的Heatmap
详细:
使用heatmap.js:首先,利用
heatmap.js
生成热力图的canvas图像。你需要将地理位置数据和权重值传递给heatmap.js
,生成对应的热力图可视化。转换为Cesium材质:将
heatmap.js
生成的canvas转换为Cesium的材质,然后应用于一个覆盖整个地图的Primitive或Entity上。代码:
// 假设你有数据 points = [{lat: ..., lng: ..., value: ...}, ...]
let heatmapInstance = h337.create({
container: document.getElementById('heatmapContainer'), // 这里需要替换为实际的容器
radius: 25,
});
heatmapInstance.setData(points);
5、Cesium中如何实现不同精度DEM合并
简单:使用CesiumLab工具可以实现,它提供了图形界面来导入多个DEM文件,自动进行镶嵌、重采样和切片生成。
详细:
在Cesium中实现不同精度的DEM(数字高程模型)合并,通常涉及以下几个关键步骤,尤其是在离线状态下处理不同分辨率的DEM数据以保证模型能够正确贴地显示:
- 数据准备:
- 收集所有需要合并的DEM数据,确保它们覆盖相同的地理区域,但可能具有不同的分辨率(如30m、90m等)。
- 将DEM数据转换为兼容的格式,如GeoTIFF,这是许多GIS工具和Cesium支持的标准格式。
- DEM镶嵌与重采样:
- 使用GIS工具(如ArcGIS, QGIS, GDAL等)进行镶嵌处理,将多个DEM数据集合并成一个连续的DEM。在这个过程中,可能需要对低分辨率DEM进行重采样以匹配最高分辨率DEM的网格系统和分辨率。
- 通过栅格镶嵌(Mosaic)和栅格重采样(Resampling)操作,可以将不同分辨率的DEM统一到相同的空间参考系和分辨率下,确保数据的一致性。
- 创建切片:
- 利用工具(CesiumLab等)或自定义脚本,将合并后的高分辨率DEM切割成Cesium所需的瓦片格式(如Terrain Tiles)。
- 配置Cesium地形服务:
- 将生成的瓦片数据部署到Web服务器上,并在Cesium应用中配置自定义地形服务。这通常涉及到修改Cesium Viewer或Scene的
terrainProvider
属性,指向你的自定义地形服务URL。
- 将生成的瓦片数据部署到Web服务器上,并在Cesium应用中配置自定义地形服务。这通常涉及到修改Cesium Viewer或Scene的
6、有没有做过cesium添加PBS发布的服务‘
本人回答:没有
后期查询:具体操作看该文章:(https://www.cnblogs.com/GIScore/p/6047736.html)
确保你的PBS服务器正常运行,并且已经成功发布了所需的地图服务。这通常涉及到使用Terrabuilder或其他工具制作MPT(Mobile Package Tile)格式的数据包,并配置PBS以提供这些数据。确认PBS提供的服务接口类型,常见的有WMS、WMTS或自定义的Tile服务。你需要知道服务的URL、图层名称、坐标系等信息,以便在Cesium中正确引用。
以上一些仅供参考。