发布日期 :2026-09-03 08:21:03 UTC
作者 :xuzhiping
访问量: 16 次浏览
三维地理信息系统(3D‑GIS)是数字孪生、智慧城市、自动驾驶仿真领域的核心基础平台。对比传统二维 GIS,它需要处理 TB 级海量空间数据,同时在 Web 浏览器端完成流畅 3D 渲染、动态数据更新、复杂空间分析能力。本文梳理从底层数据存储、瓦片生成、服务接口、引擎渲染到上层业务应用的全链路实现方案。
采用分层解耦设计,分离数据、业务逻辑与前端表现,底层数据变更可通过事件自动驱动前端刷新,无需重新发布服务。
数据层
负责存储矢量、栅格、倾斜摄影、BIM 等原始空间数据。主要使用 PostgreSQL/PostGIS 数据库,结合 3D Tiles 格式、对象存储 S3 完成海量数据存放。
服务层
对外提供瓦片、地形、空间分析各类 API 服务。常用组件包含 Cesium Ion、GeoServer,也可基于业务需求搭建自研微服务。
逻辑层
承担空间计算、坐标转换、多源数据融合工作。依赖 GDAL、JTS、Turf.js 库,同时可开发自定义业务算法完成空间运算。
渲染引擎层
实现三维场景构建、WebGL 渲染、实时光照效果。核心技术为 Cesium.js、Three.js、WebGL 2.0,负责浏览器端三维画面输出。
应用层
面向实际业务场景,覆盖智慧城市、管线运维、应急指挥等业务。一般基于 Vue/React 框架,对 Cesium 能力做二次组件封装。
城市级三维数据体量可达 TB 级别,依靠 LOD 细节层次 + 四叉树空间索引实现按需流式加载。3D Tiles 是 Web 三维 GIS 事实标准,tileset.json描述瓦片树层级结构,引擎会根据相机远近自动调度不同精度瓦片。
使用pg2b3dm工具,将数据库中建筑底面矢量拉伸为三维体,输出 3D Tiles 瓦片,同时建立 GIST 空间索引加速查询。
-- 创建建筑三维数据表
CREATE TABLE buildings (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
geom GEOMETRY(POLYGON, 4326), --建筑底面轮廓
height FLOAT, --建筑高度
roof_type VARCHAR(20)
);
-- 创建空间索引
CREATE INDEX idx_buildings_geom ON buildings USING GIST(geom);
-- 将二维面拉伸为三维几何体,输出MVT瓦片
WITH tile_data AS (
SELECT
id, name,
ST_AsMVTGeom(
ST_Extrude(ST_Force3D(geom), 0, 0, height),
ST_MakeEnvelope(116.3, 39.8, 116.5, 40.0, 4326)
) AS geom,
height
FROM buildings
)
SELECT ST_AsMVT(tile_data, 'buildings') FROM tile_data;
前端通过Cesium3DTileset加载tileset.json,实现亿级三角面片模型网页流畅加载。
Cesium 是开源 Web 三维地球主流引擎,通过关闭非必要控件、调整瓦片调度参数提升场景性能。
//初始化Cesium视图
const viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain({
requestWaterMask: false,
requestVertexNormals: false
}),
imageryProvider: new Cesium.ArcGisMapServerImageryProvider({
url: 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
}),
baseLayerPicker: false,
animation: false, //关闭时间动画控件
timeline: false, //关闭时间轴
infoBox: false,
sceneModePicker: false,
selectionIndicator: false,
targetFrameRate: 60,
resolutionScale: window.devicePixelRatio > 1 ? 0.8 : 1.0
});
//镜头定位跳转
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(116.391, 39.913, 5000),
orientation: { pitch: Cesium.Math.toRadians(-35), roll: 0.0 },
duration: 2.0
});
//加载3D Tiles建筑瓦片集
const tileset = new Cesium.Cesium3DTileset({
url: 'https://cdn.my-gis.com/tilesets/buildings/tileset.json',
maximumScreenSpaceError: 4, //LOD切换灵敏度
maximumNumberOfLoadedTiles: 500,
dynamicScreenSpaceError: true,
dynamicScreenSpaceErrorDensity: 0.5
});
viewer.scene.primitives.add(tileset);
1.调整maximumScreenSpaceError,降低 LOD 频繁切换,减少 GPU 压力;
2.开启dynamicScreenSpaceError,远处瓦片自动降低渲染精度;
3.静态建筑场景可预生成 quantized‑mesh 格式,降低解析开销。
三维 GIS 核心价值在于空间分析,支持缓冲区、视域通视、遮挡判断等功能。采用 Node.js 微服务,基于 Turf.js 完成几何运算,计算结果通过 WebSocket 推送到前端渲染。
const express = require('express');
const turf = require('@turf/turf');
const app = express();
//缓冲区分析接口
app.post('/api/buffer', (req, res) => {
const { lng, lat, radius } = req.body;
const point = turf.point([lng, lat]);
const buffered = turf.buffer(point, radius, { units: 'meters' });
res.json(buffered);
});
//视域分析模拟接口
app.post('/api/viewshed', (req, res) => {
const { observer, targets } = req.body;
const result = targets.map(target => {
const distance = turf.distance(
turf.point([observer.lng, observer.lat]),
turf.point([target.lng, target.lat])
);
return { target, visible: distance < 2000 };
});
res.json(result);
});
viewer.screenSpaceEventHandler.setInputAction((click) => {
const cartesian = viewer.camera.pickEllipsoid(click.position);
if (cartesian) {
const cartographic = Cesium.Cartographic.fromCartesian(cartesian);
const lng = Cesium.Math.toDegrees(cartographic.longitude);
const lat = Cesium.Math.toDegrees(cartographic.latitude);
//调用后端分析接口
fetch('/api/buffer', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ lng, lat, radius: 500 })
})
.then(res => res.json())
.then(geojson => {
//把GeoJSON结果渲染为半透明多边形
viewer.entities.add({
polygon: {
hierarchy: geojson.geometry.coordinates[0].map(coord =>
Cesium.Cartesian3.fromDegrees(coord[0], coord[1])
),
material: Cesium.Color.RED.withAlpha(0.3),
outline: true,
outlineColor: Cesium.Color.RED
}
});
});
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
真实三维场景需要整合多源异构模型:
1.倾斜摄影 OSGB:使用osg2cesium工具转换为 3D Tiles 瓦片;
2.BIM IFC 模型:通过ifc‑to‑3dtiles转换,或上传 Cesium Ion 进行格式处理;
3.在 Cesium 中可同时加载多个Cesium3DTileset实例,通过show属性实现图层开关切换。
三维 GIS 平台属于跨技术栈的系统工程,整套链路覆盖 PostGIS 数据存储、3D Tiles 瓦片生成、Cesium 前端渲染、空间分析微服务,该架构已经在智慧城市项目落地,支持数十 GB 级三维数据流畅运行。
未来三维 GIS 发展方向:
1.接入 IoT 实时数据流,例如无人机轨迹、各类传感器监测数据;
2.引入 AI 空间推理,自动识别建筑、地物变化;
3.WebSocket 实时数据推送、GPU 加速空间分析,进一步提升平台智能化与响应速度。