CAD、GIS與Three.js如何完美結(jié)合,實(shí)現(xiàn)2D與3D數(shù)據(jù)可視化的無限可能
現(xiàn)狀
AutoCAD是全球最流行的CAD軟件之一,其生成的DWG文件格式已經(jīng)成為二維繪圖的事實(shí)標(biāo)準(zhǔn)格式。然而,由于AutoCAD使用的是私有文件格式,這些文件只能在支持該格式的CAD軟件中編輯和查看。這為希望將AutoCAD圖紙發(fā)布到Web上,并在Web平臺上進(jìn)行應(yīng)用開發(fā)(如數(shù)據(jù)展示和GIS分析)的用戶帶來了挑戰(zhàn)。傳統(tǒng)的CAD文件難以直接在Web環(huán)境中展示和互動,因此如何有效地將AutoCAD的數(shù)據(jù)轉(zhuǎn)換并展示在Web平臺上,成為業(yè)內(nèi)亟待解決的問題。
隨著Web技術(shù)的發(fā)展,一些解決方案逐漸出現(xiàn)。例如,把DWG數(shù)據(jù)發(fā)布成GIS服務(wù)用前端GIS開源庫進(jìn)行加載顯示,或利用三維圖形庫(如Three.js)進(jìn)行3D渲染,結(jié)合地理信息系統(tǒng)(GIS)的空間分析功能,可以將AutoCAD的設(shè)計(jì)文件發(fā)布到Web上,并實(shí)現(xiàn)豐富的互動和分析功能。這種技術(shù)集成不僅打破了私有格式的限制,還為CAD數(shù)據(jù)在更廣泛的平臺上應(yīng)用提供了可能。
相關(guān)技術(shù)開源方案
解析DWG格式
-
libdxfrw https://github.com/codelibs/libdxfrw
libdxfrw是一個免費(fèi)的C++庫,可以讀取和寫入ascii和二進(jìn)制兩種格式的DXF文件。也可以讀取R14到V2015的DWG文件。
-
libredw https://github.com/LibreDWG/libredw
LibreDWG-免費(fèi)實(shí)現(xiàn)DWG文件格式 LibreDWG是一個用于讀寫DWG文件的免費(fèi)C庫。這個程序是
GNU項(xiàng)目的一部分,在GNU的支持下發(fā)布。 -
其它 github 解析、瀏覽CAD文件的一些項(xiàng)目,未驗(yàn)證是否有效:
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 -
GDAL中也部分支持dwg. https://gdal.org/drivers/vector/dwg.html
-
FreeCAD:開源,2D支持較好,對DXF支持較好。
需要使用 TeighaFileConverter(商業(yè)軟件)將 DWG格式轉(zhuǎn)換為 DXF格式。因?yàn)?FreeCAD 基本不支持DWG格式。
參考:https://www.freecadweb.org/wiki/index.php?title=FreeCAD_and_DWG_Import
WebGIS相關(guān)開源方案
后端開源GIS項(xiàng)目
- GeoServer https://github.com/geoserver/geoserver
GeoServer 是一個開源的地理信息系統(tǒng)服務(wù)器,用于分享和編輯空間數(shù)據(jù)。它支持多種地理數(shù)據(jù)格式和協(xié)議,如 WMS、WFS、WCS 等,可以將空間數(shù)據(jù)發(fā)布為地圖圖層或處理空間數(shù)據(jù)分析請求。
-
MapServer:https://github.com/mapserver/mapserver
MapServer 是一個開源的地理信息服務(wù) (GIS) 服務(wù)器,用于構(gòu)建和發(fā)布空間數(shù)據(jù)服務(wù)。
-
PostGIS: https://github.com/postgis/postgis
? PostGIS 是一個開源的空間數(shù)據(jù)庫擴(kuò)展,添加了空間對象支持和地理處理功能到 PostgreSQL 數(shù)據(jù)庫。
前端開源GIS項(xiàng)目
Leaflet 是一個輕量級的開源 JavaScript 庫,用于互動式地圖的構(gòu)建。它設(shè)計(jì)簡單、性能優(yōu)越,適用于移動設(shè)備和桌面瀏覽器,支持各種地圖圖層和數(shù)據(jù)格式的展示。Leaflet 提供了豐富的地圖功能,包括縮放、拖動、標(biāo)記、多種圖層控制等。它的插件生態(tài)系統(tǒng)豐富,支持與其他 GIS 和數(shù)據(jù)服務(wù)的集成,如 GeoJSON、WMS 等。
-
OpenLayers:https://github.com/openlayers/openlayers
OpenLayers 是一個高性能、功能豐富的 JavaScript 庫,用于構(gòu)建互動式地圖應(yīng)用程序。
Cesium 是一個基于 WebGL 的開源 JavaScript 庫,用于創(chuàng)建高性能的虛擬地球和地圖應(yīng)用程序。Cesium 支持全球高清地形、3D 模型、大規(guī)模點(diǎn)云等數(shù)據(jù)的渲染和可視化。它提供了強(qiáng)大的時間動態(tài)性能和插件系統(tǒng),適用于構(gòu)建虛擬地球、衛(wèi)星地圖、飛行模擬等復(fù)雜的地理信息應(yīng)用。
-
Mapbox GL JS https://github.com/mapbox/mapbox-gl-js
Mapbox GL JS 是一個基于 WebGL 的開源 JavaScript 庫,用于構(gòu)建交互式的地圖應(yīng)用程序。
threejs
Three.js是一款基于JavaScript的開源3D圖形庫,用于在Web瀏覽器中創(chuàng)建和顯示復(fù)雜的3D圖形和動畫。Three.js提供了豐富的功能,包括幾何體創(chuàng)建、材質(zhì)應(yīng)用、燈光效果、動畫控制、粒子系統(tǒng)等。開發(fā)者可以通過Three.js輕松地創(chuàng)建交互式3D模型、虛擬現(xiàn)實(shí)(VR)場景、游戲以及數(shù)據(jù)可視化應(yīng)用。Three.js的優(yōu)勢在于其易用性和強(qiáng)大的功能擴(kuò)展性,同時具有良好的社區(qū)支持和豐富的教程資源。
-
threejs官網(wǎng):https://threejs.org/
-
threejs官方文檔:https://threejs.org/docs/index.html#manual/zh/introduction/Creating-a-scene
-
threejs官方示例下載: https://github.com/mrdoob/three.js/archive/refs/heads/dev.zip
-
three.js標(biāo)準(zhǔn)網(wǎng)格材質(zhì)(MeshStandardMaterial)光照、粗糙度、金屬度、法線屬性介紹 three.js專欄
CAD 數(shù)據(jù)轉(zhuǎn) GIS 數(shù)據(jù)
可選擇合適的工具將 CAD 格式轉(zhuǎn)換為 GIS 支持的格式。常見的轉(zhuǎn)換工具包括:
- GDAL/OGR:這是一個強(qiáng)大的開源庫,支持多種地理數(shù)據(jù)格式之間的轉(zhuǎn)換。可以使用 OGR 的命令行工具或者在代碼中使用 GDAL 庫來進(jìn)行轉(zhuǎn)換。
- QGIS:QGIS 是一個免費(fèi)的開源 GIS 軟件,它提供了豐富的插件和工具,可以直接打開和轉(zhuǎn)換多種地理數(shù)據(jù)格式。
- FME:Safe Software 公司開發(fā)的 FME 是一個專業(yè)的空間數(shù)據(jù)轉(zhuǎn)換工具,支持多種 CAD 和 GIS 格式之間的數(shù)據(jù)轉(zhuǎn)換。
也可以用上面提到的開源工具解析cad圖紙,導(dǎo)出為gis中所需要的shp格式文件數(shù)據(jù),用mapserver或geoserver發(fā)布成gis服務(wù),通過前端gis庫如openlayers,leaflet來顯示數(shù)據(jù)。
CAD圖在threejs中加載
-
three-dxf https://github.com/gdsestimating/three-dxf
Three Dxf是一個用于Dxf文件的javascript查看器。它接收由dxf Parser生成的dxf對象,并使用three.js進(jìn)行渲染。
-
three-dxf-viewer https://github.com/ieskudero/three-dxf-viewer
使用DXF解析器和threejs制作的DXF查看器。它生成一個可以在任何場景中使用的threejs對象。
對于三維的CAD圖,需要導(dǎo)出為fxb或gltf的格式,通過threejs的 相對應(yīng)的加載器來進(jìn)行加載這些模型進(jìn)行顯示。
當(dāng)前開源方案或相關(guān)的不足
-
DWG 文件是 AutoCAD 的私有格式,這使得直接處理和解析這些文件變得困難。開源軟件和工具通常需要依賴第三方庫或者受限的解析方法來處理這些文件,這增加了集成的復(fù)雜性和限制了靈活性。
-
雖然有一些開源工具可以進(jìn)行 DXF 或部分 DWG 文件的轉(zhuǎn)換,但是轉(zhuǎn)換過程中可能會導(dǎo)致數(shù)據(jù)丟失或格式不兼容的問題。特別是在復(fù)雜的 CAD 數(shù)據(jù)結(jié)構(gòu)和地理數(shù)據(jù)之間進(jìn)行轉(zhuǎn)換時,可能需要手動調(diào)整或者進(jìn)行后處理。
-
某些開源方案可能缺乏特定功能或者插件支持。開源項(xiàng)目的長期支持和更新頻率可能會有所不足,特別是在涉及到新的 CAD 版本和標(biāo)準(zhǔn)變更時。這可能會導(dǎo)致軟件在功能和性能上的滯后。
-
架構(gòu)復(fù)雜。因?yàn)樯婕暗蕉鄠€方面,服務(wù)之間調(diào)用和使用將變成復(fù)雜。軟件的穩(wěn)定性和易用性不夠。
解決方案- 唯杰地圖將CAD、Three.js與GIS完美結(jié)合,實(shí)現(xiàn)2D與3D數(shù)據(jù)可視化的無限可能
唯杰地圖 https://vjmap.com/ 為CAD圖WebGIS可視化顯示開發(fā)提供的一站式解決方案、完全兼容dwg格式、23d效果完美切換、高性能webgl渲染、個性化地圖定制、矢量柵格瓦片全支持、跨平臺私有化部署。
唯杰地圖三維引擎 https://vjmap.com/map3d/ 是基于ThreeJS兼容VJMAP的三維地圖引擎, 能解析DWG圖中的三維實(shí)體在threejs中進(jìn)行加載顯示。該框架既可做為一個單獨(dú)的3D引擎用于數(shù)據(jù)可視化、產(chǎn)品展示、數(shù)字孿生、三維GIS等多個領(lǐng)域的可視化開發(fā), 也可以結(jié)合唯杰地圖VJMAP做為一個3D圖層,能夠在保留二維圖形信息的直觀性同時,融入三維空間的深度感知和交互性,為用戶帶來更豐富、立體和沉浸式的視覺體驗(yàn)及數(shù)據(jù)分析能力。
二維CAD圖與GIS結(jié)合
唯杰地圖能直接加載解析CAD圖紙(DWG或DXF格式),發(fā)布成GIS服務(wù)。提供柵格瓦片、矢量瓦片的WMS或WMTS服務(wù)。同時提供空間數(shù)據(jù)查詢功能、與互聯(lián)網(wǎng)地圖疊加功能。GIS服務(wù)提供的功能,可用 vjmap sdk進(jìn)行加載顯示。或用開源的 openlayers、leaflet、或 cesium 進(jìn)行加載顯示。
提供柵格瓦片、矢量瓦片的WMS或WMTS服務(wù)

與互聯(lián)網(wǎng)地圖疊加功能

利用openlayers、leaflet加載地圖服務(wù)

空間查詢功能

視頻介紹
https://www.bilibili.com/video/BV11M4y19788/
三維CAD圖與ThreeJS結(jié)合
唯杰地圖能解析CAD圖中的三維實(shí)體對象,獲取實(shí)體的顏色、圖層、頂點(diǎn)、頂點(diǎn)索引數(shù)據(jù),通過 通過 threejs進(jìn)行加載顯示。
解析CAD圖紙

用Threejs加載

唯杰地圖3D相關(guān)示例

加載3dtiles

相關(guān)案例代碼

視頻介紹
https://www.bilibili.com/video/BV1xZ421T7A4/
示例源碼
唯杰地圖[https://vjmap.com/] 在線體驗(yàn)地址 https://vjmap.com/demo/#/gallery/map
源碼 https://github.com/vjmap/vjmap-playground
唯杰地圖3D[https://vjmap.com/map3d/] 在線體驗(yàn)地址 https://vjmap.com/map3d/demo/#/gallery/map

浙公網(wǎng)安備 33010602011771號