WebGIS面试题(第八期)

文摘   2024-07-16 23:22   宁夏  
2024.7.16




说在前面的一些话(碎碎念+吐槽):


    目前这一段时间一直在忙自己的事情,以前以为自己精力旺盛,但是一上班,一开始朝九晚五,其实还不算是朝九晚五,早上八点半,晚上六点。发现每天回到家里以后是真的累,坐在沙发上休息会后洗漱收拾后一晃就九十点了,学习一会就到休息的时候了,由于通勤时间较长,早上也起的较早,反正一开始当牛马就是觉得累。不知道有没有在公务体系的朋友,聊一聊,公务员事业编咋样。其实六月多的时候我进入了老家城市某厅级的事业编面试,当时裸考而且与第一名的成绩有点距离,所以就没有认真复习面试,总以为自己翻不了盘。出去玩了一圈。最后去裸面。在候考室所有人都在背都在复习,就我一个人睡觉,而且抽签抽了考场最后一个,结束都下午四点多了。没有复习过相关方面的知识,只是凭借之前参与人才引进的经验就进去了面了,结果面试的时候发挥较好,是面试第一名,完全没有预料到。高了第一名将近8分。但是我笔试成绩太低,最后综合跟第一名差0.6分,所以说我笔试在高5分,或者说我面试认真复习我个人觉得完全还可以高2分。所以与事业单位失之交臂,厅级事业单位打听了一下还是不错的。可能没有那个命吧。


    最后来到了现在的单位,刚开始以为大家水平都差不多进来的,结果当我了解到其他一同进来的同事背景时候着实有点惊讶,想过学历卷,但是没想过这么卷。有清华的、哈工大、东北大学、北邮的、香港中文、中山的、西南交大、西安交大的、中国石油的,合肥工大的。不管其本科以及专业,真的是觉得现在就业真的是太卷了。交流了一下发现大家都想回家过的舒服一点。后期估计也会有人考公考编吧。所以去大城市还是回家大家都是权衡再三的。回家面临着就是工资远不及大城市,但是目前感觉回家压力也不小。回家的话最好考上公务员或者事业单位,因为其实有些国企的工资跟当地的公务员待遇差不多,有些还可能不如。但是摆在面前的就是公务员体面。累不累就是另说了。在公务体系躺平应该挺好的。国企的话,想躺平是不太可能的,当然有背景就另说。普通人绩效就能搞垮。绩效拿最差的迟早是会被扫地出门的。


    哈哈 “钱难挣,屎难吃”,对我这个普通人太难了。如果目前还在学校的即将毕业的一定要考虑好自己想要的,及时早做准备,两手抓。


    因为这些题目都是之前面试通过记忆面试结束后记录、部分通过录音。目前我还在整理,当然有一部分也是我在做项目中出现的问题,今天就先整理一点(偷懒),因为有些答案还需要实地操作才能得出。当然依旧是答案仅供参考。同时能也在将自己之前做的项目在整理,逐步做一些大家有需求的内容。主要是一上班就太忙了,平时还要学习当前从事的行业的知识。


    同时这段时间我看到部分网上的内容跟我的内容完全一致,内容直接不做修改,是武汉某培训机构(GIS行业),一直想不通那么大的机构应该资源挺多的吧,用了别人的也不注明出处,直接copy。当然也看其他个人的账号。



WebGIS面试题


第八期

1、cesium里面polyline线段有几种表现?

在Cesium中,Polyline(线段)可以有以下几种表现类型:

  1. 空间直线 (Space Line / No Arc): 这种类型的线段表现为两点之间的直接连线,无视地球曲率,适用于小范围或在平面上模拟直线效果。在Cesium中,可以通过设置 Cesium.ArcType.NONE 实现。

  2. 球面线段 (Geodesic Line / Great Circle Arc): 考虑地球曲率,这种线段在球面上表现为大圆弧,是两点间地球上实际最短路径。使用 Cesium.ArcType.GEODESIC 可以得到这种表现形式。

  3. 恒向线 (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,从而实现了模型的旋转。

具体代码如下:

const viewer = new Cesium.Viewer('cesiumContainer');

// 加载3D Tiles数据
const tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url: './path.../tileset.json'
}));

// 定义旋转参数,例如围绕X轴旋转的角度(单位:度)
const RotateX = 45// 旋转45度为例

// 将角度转换为弧度
const rotationInRadians = Cesium.Math.toRadians(RotateX);

// 创建一个旋转矩阵,这里以X轴旋转为例
const rotationMatrix = Cesium.Matrix3.fromRotationX(rotationInRadians);

// 将旋转矩阵转换为4x4的模型变换矩阵
// 假设tileset的初始modelMatrix为单位矩阵或者你有特定的初始变换
let modelMatrix = Cesium.Matrix4.IDENTITY;

// 应用旋转到现有的modelMatrix
Cesium.Matrix4.multiplyByMatrix3(modelMatrix, rotationMatrix, modelMatrix);

// 将更新后的modelMatrix应用到tileset上
tileset.modelMatrix = modelMatrix;

3、cesium提供了三种方式,可以对camera进行操作,这三种方式,有三个共同的参数,heading,pitch, roll,那么,这三个参数分别是什么呢?

简单:这三个参数组合起来可以精确控制camera的方向和视角,常用于设置camera的初始位置、动画过渡(如flyTo操作)或动态调整观察视角。在Cesium的API中,如setViewflyTo、或lookAt方法中,通过orientation对象传递这些参数,通常需要将角度从度转换为弧度使用Cesium.Math.toRadians函数。

详细

在Cesium中,对camera进行操作时涉及的三个共同参数——heading、pitch、roll,它们是用来描述camera方向的旋转角度,与航空和航海中常用的欧拉角类似。具体来说:

  1. Heading(偏航角 / Yaw): Heading代表camera绕垂直方向(通常是指向地心的方向,也就是上方向)旋转的角度,影响camera左右看向的能力。在Cesium中,正值表示向右转,负值表示向左转。

  2. Pitch(俯仰角 / Pitch): Pitch代表camera绕横向(水平面的正面到背面)旋转的角度,决定了camera向上或向下看的程度。正值使camera抬头向上看,负值使camera低头向下看。当pitch达到90度时,camera朝向直接向下,达到-90度时则直接向上。

  3. 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({
      containerdocument.getElementById('heatmapContainer'), // 这里需要替换为实际的容器
      radius: 25,
    });
    heatmapInstance.setData(points);

5、Cesium中如何实现不同精度DEM合并

简单:使用CesiumLab工具可以实现,它提供了图形界面来导入多个DEM文件,自动进行镶嵌、重采样和切片生成。

详细:

在Cesium中实现不同精度的DEM(数字高程模型)合并,通常涉及以下几个关键步骤,尤其是在离线状态下处理不同分辨率的DEM数据以保证模型能够正确贴地显示:

  1. 数据准备

  • 收集所有需要合并的DEM数据,确保它们覆盖相同的地理区域,但可能具有不同的分辨率(如30m、90m等)。

  • 将DEM数据转换为兼容的格式,如GeoTIFF,这是许多GIS工具和Cesium支持的标准格式。

  1. DEM镶嵌与重采样

  • 使用GIS工具(如ArcGIS, QGIS, GDAL等)进行镶嵌处理,将多个DEM数据集合并成一个连续的DEM。在这个过程中,可能需要对低分辨率DEM进行重采样以匹配最高分辨率DEM的网格系统和分辨率。

  • 通过栅格镶嵌(Mosaic)和栅格重采样(Resampling)操作,可以将不同分辨率的DEM统一到相同的空间参考系和分辨率下,确保数据的一致性。

  1. 创建切片

  • 利用工具(CesiumLab等)或自定义脚本,将合并后的高分辨率DEM切割成Cesium所需的瓦片格式(如Terrain Tiles)。

  1. 配置Cesium地形服务

  • 将生成的瓦片数据部署到Web服务器上,并在Cesium应用中配置自定义地形服务。这通常涉及到修改Cesium Viewer或Scene的terrainProvider属性,指向你的自定义地形服务URL。

6、有没有做过cesium添加PBS发布的服务‘

本人回答没有

后期查询:具体操作看该文章:(https://www.cnblogs.com/GIScore/p/6047736.html)

     确保你的PBS服务器正常运行,并且已经成功发布了所需的地图服务。这通常涉及到使用Terrabuilder或其他工具制作MPT(Mobile Package Tile)格式的数据包,并配置PBS以提供这些数据。确认PBS提供的服务接口类型,常见的有WMS、WMTS或自定义的Tile服务。你需要知道服务的URL、图层名称、坐标系等信息,以便在Cesium中正确引用。

欢迎关注我的博客及B站

博客:

https://blog.csdn.net/weixin_44857463/article/details/129157708

B站:

https://space.bilibili.com/610654927?spm_id_from=..0.0


点击蓝字  关注我们
扫码关注
我们一起学习!

GISer世界
热门GIS开源库介绍、GIS开源库实战教程、GIS技术前沿动态(关注GIS技术的最新发展)、GIS行业应用案例分享(分享众多GIS在不同行业中的应用案例)、GIS技术交流互动
 最新文章