Openlayers3加载DXF文件作为底图实现

Openlayers3是一款优秀的地图渲染JS开源框架,它支持各种通用GIS数据源的地图渲染,官网地址openlayers.org,官网提供了详细的API和案例。


本文主要记录本人对于DXF文件作为静态底图进行渲染的实现思路

如有类似需求或者更好的解决思路,欢迎交流


具体需求:1.根据业务需求我需要加载DXF文件作为底图。

                  2.在其基础上增加业务元素的绘制和编辑。

解决方案:

   方案A:

将DXF文件转换为SVG或者PNG图片格式,因为对于SVG和PNG,使用Openlayer3就可以直接加载

   参考官网案例:http://openlayers.org/en/latest/examples/static-image.html

   评价:数据存储和加载较为方便,但是缩放时会失真,显示效果大打折扣

           方案B:将DXF转化为通用GIS格式(本文采用了GEOJSON格式),将转换后的数据存储为文件作为底

图数据进行加载渲染

   评价:渲染不会失真,显示效果较好;原本样式数据丢失,不能直接支持文字;转换文件较为复杂

   方案A较为简单,在此不做详细介绍

方案B:

问题一:重要文字在转换过程中丢失

      解决办法:使用AutoCAD软件(2016)中的扩展功能对单行或多行文字进行矢量化

      选中操作对象,然后输入快捷命令 TXTEXP

          提示:正常安装2016时默认未安装扩展组件,可以在控制面板/程序与功能中找到AutoCAD

           进行变更,并选择添加或删除功能,从列表中选择Express Tools进行更新

问题二:DXF文件中BLOCK对象丢失

全选目标元素,输入快捷命令 X进行拆解(有可能需要执行多次)

问题三:转换DXF为GEOJSON的途径

a.在线转换 http://ogre.adc4gis.com/ 该网站提供了在线转换通用GIS文件为geojson的功能

优点:转换方便,简单,支持服务本地安装(可参考https://github.com/wavded/ogre)

缺点:DXF中包含的中文图层名称乱码(如果不需要支持底图图层显示可忽略此问题),

   安装依赖包括gdal-1.7.2.tar.gz,node-v4.4.7-linux-x64.tar.xz,proj-4.7.0.tar.gz

b.在线转换的内部原理是使用GDAL服务,因此将GDAL开发库引入到工程中,直接进行调用将不再依

赖网络转换服务。

优点:集成转换服务到工程中,不必单独安装依赖,可以解决数据中文乱码问题

缺点:这个方案不好找啊(哭)

问题四:加载转换后的数据显示自适应屏幕问题

由于不能直接读取DXF文件中地图的Extent,因此初始化Openlayer Map时未设定数据的Extent,

导致显示地图不能自适应

解决办法:在程序中调用ogrinfo类获取Extent,该命令支持读取DXF或者转换后的geojson格式文件

封装Openlayer中ol.Map,上传Gear_Sample-iss4.dxf,转换dxf为geojson,zip压缩geojson(压缩率很可观)

使用openlayers加载渲染,最终实现效果如下:


转载自:https://mtr-1.oss-cn-beijing.aliyuncs.com/qyblog/2019/04/52586618.jpg

You may also like...