国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

MicroStation三維模型導(dǎo)出ArcGIS SLPK格式探討

2020-10-20 05:54金波
中國信息化周報(bào) 2020年36期
關(guān)鍵詞:樣式坐標(biāo)系實(shí)體

金波

Bentley公司基于MicroStation平臺(tái)的系列軟件能進(jìn)行多專業(yè)、多行業(yè)三維建模,但其模型不能直接地導(dǎo)出到ArcGIS平臺(tái)中使用。SceneLayer Package(SLPK)是ArcGIS支持的基于OGC I3S規(guī)范的國際三維標(biāo)準(zhǔn)格式,筆者通過研究SLPK格式和MicroStation三維模型,基于MicroStation進(jìn)行MDL二次開發(fā),實(shí)現(xiàn)了在MicroStation中三維模型直接導(dǎo)出成SLPK格式,以便在GIS平臺(tái)中更好地應(yīng)用和展示BIM模型。

MicroStation三維模型簡介

MicroStation是一款工程領(lǐng)域常用的二三維一體化計(jì)算機(jī)輔助設(shè)計(jì)軟件,Bentley公司基于MicroStation研發(fā)了一系列軟件用于土木、工廠、建筑和地理信息行業(yè),可用于創(chuàng)建各個(gè)專業(yè)和行業(yè)的三維模型,并附加屬性信息,提供了一套廣泛應(yīng)用的BIM解決方案。另外MicroStation提供了SDK,用于用戶二次開發(fā)以實(shí)現(xiàn)更多的功能。

為了更好地將BIM三維模型與GIS結(jié)合起來,ESRI公司發(fā)起了I3S規(guī)范;該規(guī)范被開放地理空間聯(lián)盟(OGC)采納為新的國際三維標(biāo)準(zhǔn)?;贗3S規(guī)范ESRI提出了三維數(shù)據(jù)格式SLPK(場(chǎng)景圖層包)。SLPK格式能夠在ESRI公司的ArcGIS Pro以及ArcGIS online中使用,發(fā)布為服務(wù)后可用ArcGIS API for JavaScript調(diào)用應(yīng)用于Web。

MicroStation三維模型目前不支持直接導(dǎo)出SLPK格式供ArcGIS使用,筆者通過研究SLPK格式和MicroStation模型,基于MicroStation MDL二次開發(fā),實(shí)現(xiàn)了在MicroStation中將模型直接導(dǎo)出為SLPK格式;同時(shí)為了更方便地在GIS系統(tǒng)中使用SLPK,在導(dǎo)出時(shí)添加了坐標(biāo)系轉(zhuǎn)換的功能,可以將模型導(dǎo)出為經(jīng)緯度坐標(biāo)或者Web墨卡托坐標(biāo)等。

在MicroStation中,元素種類很多,主要分為線、面和體幾類。三維模型通常屬于體,極少數(shù)屬于網(wǎng)格面。針對(duì)不同類型的三維模型,需要進(jìn)行不同類型的處理。在程序中,首先需要判斷三維模型的類型,主要用到不同函數(shù)。

mdlElement_getType()可用于判斷三維模型是否是網(wǎng)格或?qū)嶓w。mdlKISolid_isSolidElement()可用于判斷三維模型是否是實(shí)體或智能實(shí)體。mdlTFElmdscr_getApplicationType()可用于判斷三維模型是否屬于建筑模型單元或者復(fù)合單元。

模型面三角形化

三維模型幾何信息由若干個(gè)面組成,MicroStation中三維模型可能包含曲面、含圓弧的面或者多邊形面,但是在SLPK格式中,三維模型目前只支持三角形面,因此,需要將MicroStation中三維模型進(jìn)行三角形化,這樣就能滿足SLPK的要求。針對(duì)不同類型的三維模型需要進(jìn)行不同的處理。

網(wǎng)格三角形化:網(wǎng)格可能全部由三角形面組成,也可能包含四邊形面或多邊形面,可以使用mdlMesh_copyTriangulated()函數(shù)將網(wǎng)格復(fù)制并三角形化,得到的新網(wǎng)格中只包含三角形面。接著使用mdlMesh_getPolyfaceArrays()函數(shù)即可獲得網(wǎng)格各個(gè)三角形面的頂點(diǎn)坐標(biāo)。

單元、實(shí)體和智能實(shí)體三角形化:單元、實(shí)體和智能實(shí)體都只包含單個(gè)的體,首先使用mdlKISolid_elementToBody2()函數(shù)將元素轉(zhuǎn)換成內(nèi)部KISolid,再使用mdlKISolid_facetBody()函數(shù)進(jìn)行三角形化。將含曲線和圓弧的面轉(zhuǎn)換成三角形面會(huì)有精度丟失,主要依據(jù)弦公差和角度公差兩個(gè)參數(shù)來保證精度。

復(fù)合單元:復(fù)合單元由多個(gè)單元或智能實(shí)體組成,應(yīng)使用mdlKISolid_elementToBodyList()來將元素轉(zhuǎn)換成多個(gè)KISolid,對(duì)于每個(gè)KISolid使用單元、實(shí)體和智能實(shí)體的方法來進(jìn)行三角形化,最后把三角形化的面合并起來存儲(chǔ)即可。在完成三角形化的同時(shí),也獲得了模型在當(dāng)前坐標(biāo)系的頂點(diǎn)坐標(biāo)。

坐標(biāo)轉(zhuǎn)換、法線計(jì)算

SLPK的主要使用場(chǎng)合是Web,WebGIS系統(tǒng)常用的坐標(biāo)系是網(wǎng)絡(luò)墨卡托坐標(biāo)系(EPSG:3857)和WGS84經(jīng)緯度坐標(biāo)系(EPSG:4326),而MicroStation建模結(jié)合地形模型總裝后的坐標(biāo)系通常為Beijing54、Xian80或CGCS2000的三度分帶投影坐標(biāo)系,因此在模型輸出成SLPK格式時(shí)提供坐標(biāo)系轉(zhuǎn)換功能很有必要。

基于GDAL和Proj.4開源庫,根據(jù)源坐標(biāo)系和目標(biāo)坐標(biāo)系的EPSG代碼,實(shí)現(xiàn)對(duì)坐標(biāo)進(jìn)行批量轉(zhuǎn)換。當(dāng)輸入或者輸出坐標(biāo)系為網(wǎng)絡(luò)墨卡托坐標(biāo)系時(shí),所使用的Porj.4版本尚不支持,需要先將坐標(biāo)轉(zhuǎn)換成WGS84經(jīng)緯度再進(jìn)行轉(zhuǎn)換。當(dāng)輸入坐標(biāo)系和輸出坐標(biāo)系橢球不一樣時(shí),通常坐標(biāo)轉(zhuǎn)換需要七參數(shù)或四參數(shù)等才能精確轉(zhuǎn)換,否則轉(zhuǎn)換結(jié)果平面誤差可達(dá)數(shù)十米甚至上百米。但在實(shí)際試驗(yàn)中發(fā)現(xiàn),proj.4和GDAL中已內(nèi)置了相關(guān)轉(zhuǎn)換參數(shù),不同橢球的坐標(biāo)轉(zhuǎn)換后的結(jié)果精度較高,與網(wǎng)絡(luò)地圖套和較好,故可直接使用。假如出現(xiàn)了偏差較大的情況,只需對(duì)模型進(jìn)行相應(yīng)的移動(dòng)即可。除了頂點(diǎn)坐標(biāo)外,三維模型的顯示和渲染還需要每個(gè)面的法線向量,法線的計(jì)算方式為向量叉乘。

模型屬性提取

BIM模型除了幾何信息之外屬性信息也非常重要,基于MicroStation的建筑建模相關(guān)軟件的SDK中提供了一些提取屬性信息的方法。

首先設(shè)計(jì)了相應(yīng)數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)屬性。再列出面積、體積、位置、圖層、顏色、樣式類別等一些常見屬性的提取。以面積為例,模型的表面積,類型為雙精度浮點(diǎn)數(shù),直接使用mdlMeasure_AreaProperties()函數(shù)獲得。再例如類別和樣式,類別和樣式是MicroStation建筑模型最重要的屬性之一,類型為字符串,涵蓋模型材料、圖紙、工程量、渲染特性、切圖、結(jié)構(gòu)分析等一系列屬性的定義,知道了樣式名稱,即可在庫中查詢到該樣式的這些屬性,如磚外墻的類別為“Wall_Ext”,樣式為“Brick wall”。使用mdlTFPartRef_getPart()函數(shù)獲得樣式,再使用mdlTFPartRef_getPartName()函數(shù)和mdlTFPartRef_getPartFamilyName()函數(shù)即可分別獲得樣式和類別。材質(zhì):建筑模型的材質(zhì)定義了模型的紋理和貼圖信息,從樣式定義中能獲取到材質(zhì)信息的定義,如“Concrete_3”表示貼圖為混凝土。

除了這些屬性,還能夠根據(jù)不同專業(yè)和行業(yè)來獲取所需的屬性,但是具體需要配置各專業(yè)的工作環(huán)境和約定相應(yīng)的標(biāo)準(zhǔn),目前還未深入研究。

輸出SLPK

完成了上述處理后,即可開始創(chuàng)建SLPK格式的場(chǎng)景圖層包了。

格式簡介:SLPK文件是由一系列JSON文件和二進(jìn)制文件按照嚴(yán)格的文件組織再打包成ZIP格式的壓縮包。

創(chuàng)建JSON文件:JSON文件是JavaScript Object Notation的縮寫,是一種用來存儲(chǔ)和表示數(shù)據(jù)的文本格式,使用cJson庫能夠很方便地進(jìn)行JSON文件的讀寫。對(duì)于SLPK包內(nèi)的所有JSON格式的文件,都可以用cJson庫進(jìn)行創(chuàng)建,各個(gè)文件具體內(nèi)容參見OGC SLPK官方文檔。

創(chuàng)建幾何和屬性文件:幾何信息0.bin詳細(xì)格式參見官方文檔。在0.bin中依次存儲(chǔ)的是頂點(diǎn)數(shù)組、法線數(shù)組、紋理坐標(biāo)數(shù)據(jù)和顏色數(shù)組,寫入文件可使用ofstream,ofstream::write()函數(shù)能夠快速批量將數(shù)組寫入到文件中。

文件壓縮:完成創(chuàng)建所有文件后,需要將除了metaData.json外的所有文件先壓縮成gz格式,在程序中使用ShellExecute()函數(shù)調(diào)用開源的壓縮軟件7z.exe,給定參數(shù)“a? <文件名>.gz? <文件名>”即可完成壓縮,壓縮的同時(shí)刪除掉原文件;接著使用ShellExecute()調(diào)用7z.exe,給定參數(shù)“a? <模型文件夾><模型名>.zip? ?-ir!<模型文件夾>*.*? -mx0”,即可將所有文件打包成zip格式;最后將zip文件名稱中后綴名“.zip”修改成“.slpk”即完成的場(chǎng)景圖層包的創(chuàng)建。

在MicroStation中運(yùn)行MDL程序。選中要導(dǎo)出的一個(gè)或者多個(gè)模型,設(shè)置相應(yīng)路徑、名稱和坐標(biāo)系等參數(shù),在視圖中單擊左鍵即開始導(dǎo)出。導(dǎo)出完成后,在ArcGIS online中,直接即可將SLPK文件上傳并發(fā)布成Scene Layer。

通過研發(fā)和實(shí)踐,解決了MicroStation三維建筑模型直接導(dǎo)出成SLPK場(chǎng)景圖層包的問題,為BIM模型和GIS系統(tǒng)的應(yīng)用結(jié)合打下了一些基礎(chǔ)。

猜你喜歡
樣式坐標(biāo)系實(shí)體
CPMF-I 取樣式多相流分離計(jì)量裝置
CPMF-I 取樣式多相流分離計(jì)量裝置
取樣式多相流分離計(jì)量裝置
前海自貿(mào)區(qū):金融服務(wù)實(shí)體
解密坐標(biāo)系中的平移變換
坐標(biāo)系背后的故事
實(shí)體的可感部分與實(shí)體——兼論亞里士多德分析實(shí)體的兩種模式
基于重心坐標(biāo)系的平面幾何證明的探討
兩會(huì)進(jìn)行時(shí):緊扣實(shí)體經(jīng)濟(jì)“釘釘子”
振興實(shí)體經(jīng)濟(jì)地方如何“釘釘子”
正蓝旗| 团风县| 高台县| 朝阳县| 维西| 凤山县| 浦东新区| 图们市| 陆河县| 盐山县| 高淳县| 大厂| 光泽县| 兴宁市| 小金县| 凉山| 凤山市| 苗栗市| 龙陵县| 富源县| 万山特区| 万盛区| 奉新县| 濉溪县| 嘉善县| 定州市| 裕民县| 化州市| 大同县| 安岳县| 当阳市| 定州市| 来安县| 万山特区| 溧阳市| 安多县| 额尔古纳市| 青河县| 唐海县| 容城县| 绥化市|