entity ,primitive,3D tiles 3者的含义和区别
Entity、Primitive、3D Tiles、GeoJSON 等业务图层。
简单理解为:Entity 是业务对象,Primitive 是渲染对象,3D Tiles 是流式加载的大规模三维数据格式。
空间查询的理解
空间查询 = 根据「空间位置 / 范围条件」,筛选出满足几何关系的空间要素(点、线、面、模型)。
不是普通的id=xxx属性查询,是基于几何坐标关系的查询。工程上通常配合 Turf.js 做地理计算
放到你之前万级动态点位场景,典型需求:
- 在某个多边形范围内,找出里面所有设备点位(框选查询)
- 查询相机视野范围内有哪些点位(视锥查询)
- 查询距离某个中心点 1km 半径内的所有点位(圆形缓冲区查询)
- 查询和某个围栏相交、包含的要素
示例 (booleanPointInPolygon)
import*asturffrom'@turf/turf';// 多边形顶点 [lon, lat]constpolygon=turf.polygon([[[118.7,32.0],[118.8,32.0],[118.8,32.1],[118.7,32.1],[118.7,32.0],]]);// 待判断的点constpoint=turf.point([118.75,32.05]);constisInside=turf.booleanPointInPolygon(point,polygon);console.log(isInside);// true常见空间关系:包含、相交、距离邻近、在视锥内、碰撞。
区分:属性查询(查字段)、空间查询(查几何关系),大屏孪生项目经常两者组合使用。
简历话术参考:基于 Cesium 实现空间范围查询(多边形框选、缓冲区邻近查询、视锥体查询),支撑圈选设备、区域统计、告警筛选业务;海量点位下搭配 WebWorker + 空间索引(KDTree / 网格索引)降低查询耗时,避免主线程卡顿。
框选查询 : 用户在地图上绘制一个矩形或多边形,查询其中的点位: (pointsWithinPolygon)
// 1. 监听鼠标绘制,收集顶点坐标 [lon, lat]constdrawPolygon=[];// 用户绘制的顶点// 2. 绘制完成后构建 GeoJSON 多边形constsearchRegion=turf.polygon([drawPolygon]);// 3. 将所有点位转成 FeatureCollectionconstpoints=turf.featureCollection(allDevices.map((d)=>turf.point([d.lon,d.lat])));// 4. 求交constresult=turf.pointsWithinPolygon(points,searchRegion);// 5. 高亮结果result.features.forEach((f)=>{constid=f.properties?.id;highlightEntity(id);});LOD (Level of Detail,细节层次) = 根据物体离相机远近,切换不同精细程度的模型 / 要素,远了用简单版本、近了用精细版本,平衡渲染性能和视觉效果。
3D Tiles入口文件 tileset.json,真正几何数据在content.uri指向的二进制瓦片:
b3dm:批量模型(倾斜摄影、建筑)pnts:海量点云(点云数据)i3dm:实例化模型(大量相同设备、路灯)cmpt:复合瓦片,打包多个子瓦片