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