背景

AutoCAD是国际上著名的二维和三维CAD设计软件,用于二维绘图、详细绘制、设计文档和基本三维设计。现已经成为国际上广为流行的绘图工具。.dwg文件格式成为二维绘图的事实标准格式。

但由于AutoCAD私有格式,只能在CAD软件上编辑查看,如何发布至Web上,并在上面做应用开发,如数据展示,GIS分析等,一直是业内头疼的事情。

解析DWG格式

DWG与DXF

DWG格式文件是Auto CAD 软件的专有格式,类似于doc,是封闭的不开放的,且是二进制的。而 DXF 格式则是文本格式的,用于交换数据的,使用Auto CAD软件本身就可将 DWG文件另存为 DXF文件。

现有的能解析DWG格式的开源 CAD项目:

1、FreeCAD:开源,2D支持较好,对DXF支持较好。

需要使用 TeighaFileConverter(商业软件)将 DWG格式转换为 DXF格式。因为 FreeCAD 基本不支持DWG格式。

参考:https://www.freecadweb.org/wiki/index.php?title=FreeCAD_and_DWG_Import

  1. 其它 github 解析、浏览CAD文件的一些项目,未验证是否有效:

    https://github.com/LibreCAD/LibreCAD

    https://github.com/janopontarollo/DXF2JSON

    https://github.com/wanttobeno/dwg2dxf

    https://github.com/apendua/dxf2svg

    https://github.com/haplokuon/netDxf

    https://github.com/mozman/ezdxf

  2. 采用OpenDwg Toolkit实现对DWG文件的解析。由于ObjectDBX应用程序只能在Windows平台上采用Visual C++来开发,而网络应用开发环境要比AutoCAD单个软件运行的环境要复杂的多。OpenDwg Toolkit简称ODT。

  3. GDAL中也部分支持dwg. https://gdal.org/drivers/vector/dwg.html

解析完dwg文件是很重要的第一步,那如何Web展示?

下面就一些常见的方法做下分析和总结:

Web展示方法

方法根据实现的方式不同,大致可以分为两类:

有插件ActiveX方式

ActiveX控件是MicrosoftActiveX技术的一部分。是一种很早的技术。只能适合于windows平台。

实现原理大致是:

解析AutoCAD图形绘制,并封装成AcitveX控件,用于PC端和Web端显示。比较典型的有梦想CAD控件

优点:性能好,功能全,能编辑二次开发

缺点:Web端需要安装插件,只支持windows,而Chrome已不再支持ActiveX技术,同时无法利用html5做展示效果,效果一般

无插件Html5方式

HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。

实现原理大致是:

解析AutoCAD图形格式,然后转成html5所能绘制的格式如svg,geojson,栅格瓦片,在前端渲染。

这块如果从底层去实现,有很大的工作量。一般利用GIS生态圈的开源项目来搭建。

例如可以利用 GDAL把dwg或dxf格式导成shpGeoJson,后端利用 GeoServerMapServer发布成服务,前端利用LeafletOpenLayers去展示。

技术栈:

后端 GeoServerMapServer

前端 LeafletOpenLayers

但CAD与GIS在数据结构上存在较大的差异,CAD数据类型较为丰富,支持简单点、线、面、多义线、椭圆、块、文字等多种数据类型,而转换到GIS中,只转换为点、线、面、注记等类型,这使得CAD图形数据不能很好的满足GIS的要求,如:CAD中的Text数据类型,直接转换后只转换为GIS中的Point。通过这种转换去绘制,会导致和原始CAD图形绘制不太一样, 同时CAD里面有线型、字体也会导致绘制上的差异性。

同时对于GIS而言,有个地理坐标系的概念,而一些图纸,如户型图等就没有地理坐标系的概念。

此方案优缺点如下:

优点:能利用GIS生态圈,容易实现;能利用html5做应用开发,开发简单,效果好

缺点:存在着和真实CAD图形绘制差异的问题;坐标系也是个问题

结论

上述两种方案各有利弊,前者主要应用于图形的编辑展示,后面应用于基于图形的可视化开发展示。各有优缺点,貌似鱼和熊掌不可兼得!

那有没有一种方案,既能在Web端和真实CAD图形绘制一样,同时不能安装插件,也能利用html5做应用开发呢?

其实也是可以的。不过技术难度比较大。

实现原理大致是在后端解析CAD的图形数据不进行转换直接渲染,同时保存图形的几何数据至空间数据库用于以后查询分析;前端不用安装插件,加载渲染出的栅格和矢量数据,完美解决上述问题;

比较典型的有 唯杰地图vjmap

具体原因细节可查看 https://vjmap.com/guide/service.html

效果如下:

还有一个方案是利用AutoCAD的自有云产品 Autodesk Forge,能在浏览器中渲染 3D 和 2D 模型数据,不过其数据得保存在AutoCAD公有云上。

CAD图DWG解析WebGIS可视化技术分析总结的更多相关文章

  1. CAD/DWG图Web网页可视化技术之栅格和矢量瓦片

    背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,实现CAD/DWG图形Web展示的思路一般为解析AutoCAD图形格式,然后转成html5所能绘制的格式如svg,geojso ...

  2. CAD图与互联网地图网页端相互叠加显示技术分析和实现

    需求分析 之前相关的博文中介绍了如果在Web网页端展示CAD图形(唯杰地图云端图纸管理平台 https://vjmap.com/app/cloud),当一些CAD图纸有实际地理坐标位置时,如地形图等, ...

  3. 高德地图与CAD图叠加显示方法汇总及优缺点分析

    前言 ​ 高德地图应用在许多领域,平常我们用的地图导航,除过正常的地图导航指引功能之外,其实还有很多实用的功能.如高德影像地图应用在包括地理.土地测量.水文学.生态学.气象学以及海洋学等方面.Auto ...

  4. 用Python画的,5 种非传统的可视化技术,超炫酷的动态图

    数据可以帮助我们描述这个世界.阐释自己的想法和展示自己的成果,但如果只有单调乏味的文本和数字,我们却往往能难抓住观众的眼球.而很多时候,一张漂亮的可视化图表就足以胜过千言万语.本文将介绍 5 种基于 ...

  5. CNN可视化技术总结(一)--特征图可视化

    导言: 在CV很多方向所谓改进模型,改进网络,都是在按照人的主观思想在改进,常常在说CNN的本质是提取特征,但并不知道它提取了什么特征,哪些区域对于识别真正起作用,也不知道网络是根据什么得出了分类结果 ...

  6. 如何在Web前端实现CAD图文字全文搜索功能之技术分享

    现状 在CAD看图过程中我们经常会需要用到查找文字的功能,在AutoCAD软件查找一个文字时,可以通过打开左下角输入命令find,输入查找的文字,然后设置查找范围,就可以搜索到需要查询的文字.但在We ...

  7. 通过openlayers加载dwg格式的CAD图并与互联网地图叠加

    Openlayers介绍 ​ Openlayers是一个基于Javacript开发,免费.开源的前端地图开发库,使用它,可以很容易的开发出WebGIS系统.目前Openlayers支持地图瓦片.矢量数 ...

  8. 如何实现通过Leaflet加载dwg格式的CAD图

    前言 ​ 在前面介绍了通过openlayers加载dwg格式的CAD图并与互联网地图叠加,openlayers功能很全面,但同时也很庞大,入门比较难,适合于大中型项目中.而在中小型项目中,一般用开源的 ...

  9. CCF虚拟现实与可视化技术专委会丨面向增强现实的可视计算技术研究进展概述

    https://mp.weixin.qq.com/s/I-rNwgXHEtwgdpkWzKtVXw 摘要 新一代增强现实技术需要依赖可视计算理论与方法解决大尺度复杂环境下的场景建模.内容生成.感知交互 ...

随机推荐

  1. 用tinyxml2读写xml文件_C++实现

    下载源代码 开源代码github地址: https://github.com/leethomason/tinyxml2 添加工程文件 将源代码目录中 tinyxml2.h 和 tinyxml2.cpp ...

  2. 揭秘盒马鲜生 Android 短视频秒播优化方案

    短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留.因此,体验的优化就显得尤为重要.上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 Androi ...

  3. Jenkins 使用PowerShell插件部署Net5项目

    Jenkins安装 PowerShell plugin 插件 新建自由项目 拖到 构建 处,添加 PowerShell 构建 贴入下方脚本即可 # 变量 $ProjectPath = "E: ...

  4. Linux - last 命令(Mac 电脑)

    前言 为啥写这篇? 因为听 grep.sed 教程的时候有这个命令栗子 加上工作中,运维给我排查问题的时候也用到了,感觉挺重要,先了解为敬! 命令作用 显示用户和TTY的最后登录次数 这个是在 Mac ...

  5. Element UI:级联选择器Cascader_动态加载_多级请求不同接口(已知第一级调取第二级)

    ELEMENT UI_CASCADER 使用过饿了么级联动态加载的小伙伴应该都知道,lazyLoad本身是一个无差别返回渲染结点的函数. 当我们存在一个需求:已知级联选择器的第一级结点,现在需要通过第 ...

  6. 推荐一款编程字体:Iosevka

    最近发现一款很好用的编程字体:Iosevka.它是一款现代化的编程字体集合,除了等宽.oO0 iIl1明显区分等基本特性外,还有很多非常现代的特性,比如: 多种风格:有非常多的字形可供选择,衬线/非衬 ...

  7. FastAPI(2)- 快速入门

    安装 FastAPI pip install fastapi # 将来需要将应用程序部署到生产环境可以安装 uvicorn 作为服务器 pip install uvicorn 最简单的代码栗子 fro ...

  8. CPF 入门教程 - 各平台各系统发布说明(九)

    CPF C#跨平台桌面UI框架,支持Windows,Mac,Linux,支持龙芯.飞腾等CPU 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - ...

  9. Java Web下MySQL数据库的增删改查(二)

    前文:https://www.cnblogs.com/Arisf/p/14095002.html 在之前图书管理系统上做了改进优化 图书管理系统v2 首先是项目结构: 1.数据库的连接: 1 pack ...

  10. symfony的几个请求变量和方法

    请求变量 // 全部变量 $request->query->all(); // 指定变量 $request->query->get('abc'); 请求方式 $request- ...