CesiumJS如何加载2000坐标系的DWG文件(带带号或者不带带号)
2025年12月03日 17:42

CesiumJS是一款开源的3D GIS框架,目前使用率非常高,应该是3D GIS中应用最广的GIS框架,可以将地理数据非常好看的展现出来。而DWG文件是在工程领域应用非常广的文件格式,基本上在工程施工前,招标过程中都会产生非常多的DWG文件。

我们有的时候,希望能够将DWG文件位置对齐到地理系统当中,并展现在3D GIS系统里,效果如下图所示:

DWG预览效果图视频链接: https://www.bilibili.com/video/BV1EM24BREJJ/

我们将一个dwg文件导入CesiumJS主要分为两步:

第一步、将坐标转换为经纬度坐标或者web墨卡托(也就是4326或者3857)

那么在坐标转换之前,我们先要识别dwg自身的坐标信息,一般来说导入的dwg的位置信息主要分成三种情况:

1.国家2000坐标系

2.地方2000坐标系

3.没有对应位置信息的局部坐标系

今天我们主要讨论国家2000坐标系的情况,一般我国的2000坐标系都采用的是高斯克吕格投影,这种投影方式有两种切分的方式,分别是3度带和6度带。一般默认使用3度带,因为大部分的dwg文件范围很小,3度带的空间足够了,这样还可以畸变更小,

在这种情况下,还要分为带带号和不带带号,所谓带带号就是坐标值中的y值的前两位是带号,比如坐标是:x:2949320,y:36353822,其中36就是带号,带带号的情况,由于所有的信息是全面的,因此不用做任何处理,可以直接转换成相应的经纬度数据,而不带带号的情况,需要先确定带号后才可以,这个在gisbox当中只需要在对应的地图中点击项目所在的位置,系统就会自动识别带号。

因此对于国家2000坐标系的情况,我们可以很轻松的讲坐标转换为经纬度坐标后,直接对齐到CesiumJS当中。

第二步、将转换坐标后的矢量数据发布为CesiumJS能导入的形式

这一步实际上更加困难一些,因为DWG本身不仅是一些矢量,同时还带有样式信息,另外如果在考虑性能问题的话,我们的最佳选择是将DWG转换为mvt协议,然而CesiumJS本身并不原生支持mvt,因此这里我们曲线救国,使用GISBox将DWG文件转换为wmts协议,在后端实时绘制瓦片的同时并存储为缓存,这样就可以很方便的导入到CesiumJS当中了,当然我们也需要选择CesiumJS支持的TilingSchema。

通过这两步,我们就可以很方便的将dwg文件导入到CesiumJS当中,如果大家需要导入的OpenLayers或者Mapbox的话,可以选择直接发布成mvt协议,这样灵活性就会更高一些