cesium 面试题 (一)

2,904 阅读10分钟

OGC服务有那⼏种服务

1、WMS(Web Map Service):地图服务

⽤于获取地图图像,以便在Web上进⾏显示。WMS服务通常允许⽤户以各种格式(若PNG,JPEG 等)检索地图图像。

2、WFS(Web Feature Service):矢量服务

⽤于获取地理空间数据,以便在Web上进⾏分析和查询,WFS服务通常允许⽤户以多种格式(如GML,JSON等)检索地理空间数据。

具体代码表现层⾯:如加载geojson数据

3、WCS(Web Coverage Service):栅格服务

⽤于获取遥感数据和其他覆盖范围数据。WCS服务允许⽤户以各种格式(如GeoTIFF、NetCDF 等)检索遥感数据。

4、WMTS(Web Map Tile Service):地图瓦片服务

它是OGC的⼀种服务,⽤于提供已切割为⼩图块的地图图像,以便在Web上进⾏显示。与WMS不 同,WMTS不会动态⽣成地图图像,⽽是将地图预先切割为固定⼤⼩的图块,并将其存储在服务 器上。客户端可以请求特定级别和坐标的特定图块,⽽⽆需请求整个地图图像。这样可以提⾼地图显示的效率和速度,特别是在处理⼤规模地图时。

地图上要素很多加载慢,遇到过崩掉的情况下前端是如何缓解的

前端在处理大量要素时,确实可能会遇到加载缓慢、卡顿、崩溃等问题。以下是一些缓解这些问题的方法:

1、数据优化:将不必要的数据过滤掉,只加载必要的数据。例如,如果地图上只需要显示某些特定的区 域或点,可以通过缩放或其他⽅式进⾏筛选,只加载这些要素。这样可以减轻数据量,加快加载速度。

2、图层分级:将地图逐层分级,每层只显示特定的要素,降低⼀层图层中的要素数量。可以通过层叠效 果来叠加多层图层,形成完整的地图效果。这样能够减少对单个图层的渲染次数,提⾼性能。

3、后台优化:通过后台对数据进⾏剪裁和压缩,减⼩数据传输的⼤⼩。还可以在后台对数据进⾏分块, 分段加载,来减轻前端负担。

4、瓦⽚地图:将地图切分成瓦⽚,只显示在当前屏幕可视范围内的瓦⽚,减少了不必要的数据加载。该 技术可以⼤⼤减少加载速度,特别是在⼤地图并发⽤户请求⾮常⾼的情况下。

5、前端优化:通过缓存、预加载等技术,优化前端的性能。例如,可以将⼀些经常使⽤的数据进⾏缓 存,提⾼响应速度,还可以在⽤户浏览过⼀个⻚⾯时,预加载下⼀个即将进⼊的⻚⾯,以提⾼⽤户体 验。

二维和三维的区别:

⼆维和三维之间最显著的区别在于它们所描述的对象的维度不同。

⼆维指的是平⾯,通常是由两个坐标轴(x轴和y轴)描述的图像或平⾯⼏何形状。例如,⼀张 纸、⼀幅画、⼀张地图或⼀张⼆维条形码都是⼆维对象。

三维则指的是空间,通常由三个坐标轴(x轴、y轴和z轴)描述的物体或形状。例如,⼀个球体、 ⼀个⽴⽅体、⼀辆汽⻋或⼀个建筑物都是三维对象。

因为三维空间具有深度、⾼度和宽度等额外的维度,所以它可以更准确地描述现实中的物体和场 景,使得我们可以更好地理解和模拟真实世界中的事物。⽽⼆维空间则更适合⽤于图像处理、计算 机绘图和其他⼀些平⾯设计应用。

数据模型过大怎么处理

如果Cesium 中的3D Tiles 模型过⼤,可以尝试以下⽅法来处理:

  1. 压缩模型:使⽤专业的3D建模⼯具或者压缩⼯具来减⼩模型的体积。例如,可以使⽤ glTF- Pipeline ⼯具来压缩glTF 模型⽂件。

  2. 减少细节:通过去除细节,例如移除⼀些⼩的物体、降低模型的分辨率、简化模型的纹理等, 来降低模型的复杂度。

  3. 数据分块:将模型分成多个⼩块,只加载当前需要的块,避免同时加载整个模型。可以使⽤ Cesium 的可⻅性剖析技术,只在需要的时候加载和卸载数据块。

  4. 使⽤Level of Detail(LOD)技术:通过使⽤不同分辨率的模型来代替原始模型,根据观察距 离和⼤⼩选择最合适的模型,从⽽减少模型的细节。

  5. 选择合适的数据格式:选择合适的数据格式也可以减⼩模型的体积。例如,glTF 模型⽂件相 对于其他格式的模型⽂件有更⼩的体积,并⽀持压缩和⼆进制格式。

Cesium⾥⾯的Entity和primitive有什么区别

在Cesium中,Entity和primitive是两个不同的概念,它们分别⽤于不同的场景。

1、Entity

Entity是Cesium中最重要的概念之⼀,它通常⽤于描述具有坐标位置的实际对象,例如⻜机、汽⻋、楼 房、⼈物等。每个Entity实例都有不同的属性,例如位置、姿态、缩放、颜⾊、贴图等,并且可以通过编 程⽅式创建、修改、删除。

Entity的优点是⾮常灵活和易于使⽤。由于Entity是更⾼层次的概念,因此它可以⾃动处理许多与底层图 形和⼏何形状相关的复杂性,例如纹理贴图、光照、碰撞检测等。它还可以与其他Cesium组件集成,例 如事件处理、拾取和相机控制等。

2、Primitive

与Entity相⽐,Primitive是Cesium的⼀种更低层次的图形概念,它通常⽤于描述⼀组简单的图形⼏何 体。例如,我们可以使⽤Primitive来绘制点、线、多边形、体积、⽂本等基本图形。每个Primitive实例 都可以设置不同的属性,例如颜⾊、边框、宽度、⾼度等。

Primitive的主要优点是它们⾮常⾼效,因为它们使⽤了GPU硬件加速,可以轻松地绘制⼤量的⼏何体。 它们也⽐Entity更灵活,因为我们可以直接控制⼏何体的属性和细节,例如绘制线宽,选择不同的纹理贴 图等等。但Primitive的使⽤需要较少的⾃动性和灵活性,因为需要⼿动处理许多问题,例如碰撞检测、 ⾼级光照和渲染技术等。

总的来说,Entity和Primitive都是Cesium中强⼤的图形概念,但它们⽤于不同的场景。如果我们需要描 述具有复杂属性和⾏为的实际对象,那么我们应该使⽤Entity;如果我们只需要绘制简单的⼏何体,那么 我们可以使⽤Primitive来获得更好的性能和控制。

什么情况使⽤Primitive

在Cesium中,Primitive是⽤于渲染三维场景的基本渲染单元,它可以表示多种类型的⼏何形状和纹理贴 图。以下是在Cesium中使⽤Primitive的⼀些常⻅情况:

1、渲染⼏何形状:Primitive可以表示各种⼏何形状,例如平⾯、⽴⽅体、球体、柱体、圆锥等。对于简 单的形状,可以使⽤Cesium提供的预定义⼏何形状(如RectangleGeometry、BoxGeometry、 SphereGeometry等),对于更复杂的形状,可以使⽤三⻆形⽹格(TriangleMeshGeometry)来定义⼏ 何形状。

2、纹理贴图:Primitive可以将纹理映射到⼏何形状上,以创建更真实的场景。可使⽤TextureAtlas或 TextureCoordinateGenerator为Primitive指定纹理贴图。

3、投影:Primitive可以被⾼效的投影到各种不同的地形数据集上,例如地形切⽚、3D Tiles和3D模型。 这使得Cesium可以在不同的地形数据集上展示同⼀场景,提⾼应⽤的可视化效果和跨平台兼容性。

4、地图中有很多要素时使⽤Primitive可以更⾼效的渲染出来。

总之,Primitive是Cesium开发中⾮常重要的基本渲染单元,⽤于表示⼏何形状、纹理贴图和投影等内 容,开发者可以根据不同的需求使⽤它来创建复杂的3D场景。

主流地图的坐标系

  1. 地理坐标系(Geographic Coordinate System):地理坐标系使用经度(longitude)和纬度(latitude)来表示地球上的位置。经度表示东西方向上的位置,纬度表示南北方向上的位置。常用的地理坐标系包括经典的 WGS84(World Geodetic System 1984)和 NAD83(North American Datum 1983)。
  2. 投影坐标系(Projected Coordinate System):投影坐标系是将地球上的经纬度坐标投影到平面上的坐标系。由于地球是一个椭球体,为了在平面上准确表示地球上的位置,需要使用投影来进行坐标转换。常见的投影坐标系包括 UTM(Universal Transverse Mercator)投影和 Web Mercator(Web 协议的墨卡托投影)。
  3. 像素坐标系(Pixel Coordinate System):像素坐标系是指地图在屏幕上的像素坐标。屏幕上的每个像素都有一个唯一的坐标,通常以左上角为原点。像素坐标系在图像处理和屏幕显示中广泛使用。
  4. 瓦片坐标系(Tile Coordinate System):瓦片坐标系是一种将地图数据划分为瓦片的坐标系统。地图数据通常被分割成小块的瓦片,每个瓦片都有一个唯一的坐标标识。瓦片坐标系常用于在线地图服务中,如 Google Maps、OpenStreetMap 等。

在加载大量地图要素时,前端可能会遇到性能问题和崩溃情况。

  1. 数据分批加载:将地图要素数据分为多个批次进行加载,而不是一次性加载所有要素。这可以通过分页加载或者根据可视范围动态加载要素来实现。只加载当前可见区域附近的要素,随着用户的移动或缩放,动态加载周围的要素。这样可以降低初始加载量和渲染负荷,提高地图加载速度和性能。
  2. 数据剖析和简化:对于大规模的地图数据,可以使用数据剖析(Data Tiling)和简化(Simplification)的技术来减少数据量。数据剖析将地图数据切割成小块的瓦片,只加载当前视图所需的瓦片。简化算法可以减少要素的细节和节点数,保持地图的可视化效果同时降低数据量。
  3. 瓦片级别控制:地图服务通常提供多个级别的瓦片数据,可以根据当前地图缩放级别选择加载的瓦片级别。在较高的缩放级别下,加载更详细的瓦片数据;在较低的缩放级别下,加载更粗略的瓦片数据。这样可以根据需要平衡地图的显示效果和加载速度。
  4. 图层可见性控制:如果地图包含多个图层,可以根据需要设置图层的可见性。只加载和渲染当前可见的图层,隐藏不需要显示的图层。这样可以减少不必要的数据加载和渲染工作,提高性能。
  5. 数据压缩和缓存:对地图数据进行压缩可以减少数据传输量,提高加载速度。在客户端使用缓存机制来存储已加载的数据,避免重复请求和加载相同的数据。这样可以减少对服务器的压力和网络请求次数。
  6. 硬件加速和优化:利用现代浏览器的硬件加速功能,如使用 CSS 3D 变换、使用 WebGL 进行渲染等,可以提高地图的渲染性能。此外,可以进行代码优化、减少不必要的计算和操作,提高前端代码的执行效率。