CesiumJS是一款开源的3D GIS框架,目前使用率非常高,应该是3D GIS中应用最广的GIS框架,可以将地理数据非常好看的展现出来。而DWG文件是在工程领域应用非常广的文件格式,基本上在工程施工前,招标过程中都会产生非常多的DWG文件。
我们有的时候,希望能够将DWG文件位置对齐到地理系统当中,并展现在3D GIS系统里,效果如下图所示:

DWG预览效果视频链接: https://www.bilibili.com/video/BV1EM24BREJJ/
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协议,这样灵活性就会更高一些。
4225

被折叠的 条评论
为什么被折叠?



