牛建軍,胡 菡,陳 玲
(1.湖北省測(cè)繪工程院,湖北 武漢 430074)
目前,很多城市的管線數(shù)據(jù)是以圖形形式存儲(chǔ)的,多為*.dwg數(shù)據(jù)。管線入庫(kù)對(duì)數(shù)據(jù)有很多嚴(yán)格的要求:管線和管點(diǎn)之間需要嚴(yán)格的對(duì)應(yīng)關(guān)系;每個(gè)管點(diǎn)有必要的屬性與之關(guān)聯(lián);每個(gè)管段也有必要的屬性與之關(guān)聯(lián)等,而這些都是CAD圖形數(shù)據(jù)無(wú)法滿足的[1]。必須將圖形數(shù)據(jù)以自動(dòng)化的方式轉(zhuǎn)換成需要的形式以便于管線數(shù)據(jù)的入庫(kù),同時(shí)更好地保存管線、管點(diǎn)的連接關(guān)系以及管線和管點(diǎn)的屬性,使得管線數(shù)據(jù)存儲(chǔ)和獲取更便捷、利用率更高、空間分析更有效。
由于原始數(shù)據(jù)除包含管線相關(guān)數(shù)據(jù)外,還可能包含各類基礎(chǔ)要素,并且數(shù)據(jù)分層較混亂。為了將管線數(shù)據(jù)較好地分離、分類出來(lái),首先將不需要的數(shù)據(jù)剝離,保留下來(lái)的數(shù)據(jù)有管線、管點(diǎn)塊、管線注記、管點(diǎn)注記、全圖高程點(diǎn)及注記、其他可能用到的塊和注記。將管線數(shù)據(jù)分離出來(lái)后,查看管線、管點(diǎn)塊、全圖高程的完整性、正確性。將某些不合要求的塊重新插入,并盡量保證塊名稱的一致性。全圖高程方面,部分圖幅的高程點(diǎn)Z坐標(biāo)信息錯(cuò)誤,需要依賴其高程注記來(lái)讀取高程信息。最后,檢查全圖管線注記與管點(diǎn)的位置關(guān)系是否正確,檢查全圖的懸掛情況,并作相應(yīng)處理。
將CAD數(shù)據(jù)反演為探測(cè)數(shù)據(jù)表的步驟如下:①按照管線相關(guān)層分層讀取管線數(shù)據(jù)。②每條管段按節(jié)點(diǎn)讀取,每個(gè)節(jié)點(diǎn)為一個(gè)管點(diǎn)。③每個(gè)管點(diǎn)在其附近搜索三類實(shí)體:注記實(shí)體,用于讀取管點(diǎn)的說(shuō)明,其中可能包括管線類型、管徑、埋深、材質(zhì)等;管點(diǎn)塊,用于讀取管點(diǎn)類型,如消火栓、閥門、入地口等;高程點(diǎn)或高程注記,通過(guò)高程點(diǎn)信息讀取管點(diǎn)的地面標(biāo)高。④按探測(cè)表結(jié)構(gòu)逐條記錄CAD圖形中的管段、管點(diǎn)數(shù)據(jù)及其對(duì)應(yīng)屬性,生成探測(cè)數(shù)據(jù)表。
在不考慮“組分類型”、“埋深”、“管徑”等屬性的情況下,如果只轉(zhuǎn)換空間信息,則主要代碼如下:
string code_former = "";//用于保存“上點(diǎn)號(hào)”
for (int k = 0; k < pl.NumberOfVertices; k++)
{
double x1 = pl.GetPoint3dAt(k).X;
double y1 = pl.GetPoint3dAt(k).Y;
string node_code = "";
if (node_code == "")//如未找到同坐標(biāo)點(diǎn),則通過(guò)圖形重新獲得
{
node_code = GenerateCode(mapNum, name);//生成本點(diǎn)號(hào)
if (node_code != "")
{
ArrayList mainInfo = new ArrayList();
mainInfo.Add(node_code);
mainInfo.Add(y1.ToString());
mainInfo.Add(x1.ToString());
ArrayList head = new ArrayList();
head.Add("本點(diǎn)號(hào)");
head.Add("縱坐標(biāo)");
head.Add("橫坐標(biāo)");
string[]key = { "本點(diǎn)號(hào)" };
int[]index = { 0 };
AccessTool.SaveToAccess(name + "點(diǎn)表", head, key,index, mainInfo);
}
}
if (code_former != "" && node_code != "")//進(jìn)行線表的保存
{
ArrayList mainInfo1 = new ArrayList();
mainInfo1.Add(node_code);
mainInfo1.Add(code_former);
ArrayList head1 = new ArrayList();
head1.Add("本點(diǎn)號(hào)");
head1.Add("上點(diǎn)號(hào)");
string[]key1 = { "本點(diǎn)號(hào)", "上點(diǎn)號(hào)" };
int[]index1 = { 0, 1 };
AccessTool.SaveToAccess(name + "線 表", head1,key1, index1, mainInfo1);
}
code_former = node_code;//最后將“本點(diǎn)號(hào)”作為下一點(diǎn)的“上點(diǎn)號(hào)”
}
需要同時(shí)讀取“組分類型”、“埋深”、“管徑”等屬性時(shí),則在錄入每一個(gè)管點(diǎn)時(shí)對(duì)其周圍的塊參照、注記等進(jìn)行搜索,并通過(guò)塊參照獲取“組分類型”,通過(guò)注記獲取“埋深”、“管徑”等。
在湖北某地的管線數(shù)據(jù)入庫(kù)項(xiàng)目中,原始數(shù)據(jù)只有以*.dwg形式存儲(chǔ)的CAD管線圖。我們使用從AutoCAD圖形數(shù)據(jù)反演管線探測(cè)數(shù)據(jù)的方法,得到表1所示的探測(cè)數(shù)據(jù)表[2],然后直接入庫(kù)。實(shí)現(xiàn)了在整理管線圖形數(shù)據(jù)的同時(shí),將其屬性數(shù)據(jù)一并入庫(kù)。
表1 探測(cè)數(shù)據(jù)管點(diǎn)表
圖1所是某塊區(qū)域的原始CAD管線圖,其中包含一些管線相關(guān)的注記,用不同顏色表示不同類型的管線。圖2是將圖1的數(shù)據(jù)反演為管線探測(cè)數(shù)據(jù)表,而后用MapGIS導(dǎo)入探測(cè)數(shù)據(jù)表得到的管線數(shù)據(jù)圖[3]??梢悦黠@看到,兩個(gè)圖的圖形結(jié)構(gòu)完全一致,管線類型得到完好的保留,管點(diǎn)位置也完全一致。圖2擁有統(tǒng)一的圖示符號(hào),圖1中一些不明顯的管點(diǎn)在圖2中也能得到體現(xiàn),使管線圖更易讀。同時(shí),圖2中的管點(diǎn)和管段還保存了屬性信息,具備了參與空間分析的能力。
圖1 管線原始CAD圖
圖2 反演后入庫(kù)管線圖
本文研究了一種將管線從CAD圖形轉(zhuǎn)換成探測(cè)數(shù)據(jù)表的方法。該方法實(shí)現(xiàn)了屬性信息一并入庫(kù),能滿足管線數(shù)據(jù)的管理、使用和分析需要。不足之處在于,轉(zhuǎn)換前需要對(duì)圖形數(shù)據(jù)進(jìn)行預(yù)處理,否則可能出現(xiàn)屬性信息錄入不準(zhǔn)確的情況。另外,某些管段屬性由于注記標(biāo)識(shí)位置沿線分布,需要人工干預(yù)。如何能更智能地對(duì)管點(diǎn)、管段屬性進(jìn)行識(shí)別將是該方法以后的改進(jìn)方向。
[1]陳小航,張亦工.地下管線普查、建庫(kù)、管理系統(tǒng)一體化構(gòu)想[J].現(xiàn)代測(cè)繪,2003,26(2):41-44
[2]李黎,李劍.基于空間數(shù)據(jù)引擎的綜合地下管線數(shù)據(jù)組織[J].測(cè)繪科學(xué),2007,32(2):133-134
[3]鄭貴洲,姚昳昕,彭俊芳.AutoCAD與MapGIS K9數(shù)據(jù)轉(zhuǎn)換[J].測(cè)繪地理信息,2013,38(2):39-41
[4]劉钅泉,王炳偉,徐德軍.綜合管網(wǎng)地理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].地理空間信息,2007,5(2):69-70
[5]洪中華,陳紹杰,徐志剛.地下管線建庫(kù)的關(guān)鍵技術(shù)及應(yīng)用[J].龍巖學(xué)院學(xué)報(bào),2009,27(5):44-46
[6]趙春燕,施建昭,于海乾.基于ObjectARX的CAD二次開(kāi)發(fā)技術(shù)實(shí)現(xiàn)管線數(shù)據(jù)的入庫(kù)和編輯[J].現(xiàn)代測(cè)繪,2010,33(5):58-60
[7]張衛(wèi),孔令遂,張書(shū)生,等.基于VBA的AutoCAD管線圖形的屬性數(shù)據(jù)入庫(kù)[J].北京測(cè)繪,2011(4):39-42