牛建軍,胡 菡,陳 玲
(1.湖北省測繪工程院,湖北 武漢 430074)
目前,很多城市的管線數據是以圖形形式存儲的,多為*.dwg數據。管線入庫對數據有很多嚴格的要求:管線和管點之間需要嚴格的對應關系;每個管點有必要的屬性與之關聯;每個管段也有必要的屬性與之關聯等,而這些都是CAD圖形數據無法滿足的[1]。必須將圖形數據以自動化的方式轉換成需要的形式以便于管線數據的入庫,同時更好地保存管線、管點的連接關系以及管線和管點的屬性,使得管線數據存儲和獲取更便捷、利用率更高、空間分析更有效。
由于原始數據除包含管線相關數據外,還可能包含各類基礎要素,并且數據分層較混亂。為了將管線數據較好地分離、分類出來,首先將不需要的數據剝離,保留下來的數據有管線、管點塊、管線注記、管點注記、全圖高程點及注記、其他可能用到的塊和注記。將管線數據分離出來后,查看管線、管點塊、全圖高程的完整性、正確性。將某些不合要求的塊重新插入,并盡量保證塊名稱的一致性。全圖高程方面,部分圖幅的高程點Z坐標信息錯誤,需要依賴其高程注記來讀取高程信息。最后,檢查全圖管線注記與管點的位置關系是否正確,檢查全圖的懸掛情況,并作相應處理。
將CAD數據反演為探測數據表的步驟如下:①按照管線相關層分層讀取管線數據。②每條管段按節點讀取,每個節點為一個管點。③每個管點在其附近搜索三類實體:注記實體,用于讀取管點的說明,其中可能包括管線類型、管徑、埋深、材質等;管點塊,用于讀取管點類型,如消火栓、閥門、入地口等;高程點或高程注記,通過高程點信息讀取管點的地面標高。④按探測表結構逐條記錄CAD圖形中的管段、管點數據及其對應屬性,生成探測數據表。
在不考慮“組分類型”、“埋深”、“管徑”等屬性的情況下,如果只轉換空間信息,則主要代碼如下:
string code_former = "";//用于保存“上點號”
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 == "")//如未找到同坐標點,則通過圖形重新獲得
{
node_code = GenerateCode(mapNum, name);//生成本點號
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("本點號");
head.Add("縱坐標");
head.Add("橫坐標");
string[]key = { "本點號" };
int[]index = { 0 };
AccessTool.SaveToAccess(name + "點表", head, key,index, mainInfo);
}
}
if (code_former != "" && node_code != "")//進行線表的保存
{
ArrayList mainInfo1 = new ArrayList();
mainInfo1.Add(node_code);
mainInfo1.Add(code_former);
ArrayList head1 = new ArrayList();
head1.Add("本點號");
head1.Add("上點號");
string[]key1 = { "本點號", "上點號" };
int[]index1 = { 0, 1 };
AccessTool.SaveToAccess(name + "線 表", head1,key1, index1, mainInfo1);
}
code_former = node_code;//最后將“本點號”作為下一點的“上點號”
}
需要同時讀取“組分類型”、“埋深”、“管徑”等屬性時,則在錄入每一個管點時對其周圍的塊參照、注記等進行搜索,并通過塊參照獲取“組分類型”,通過注記獲取“埋深”、“管徑”等。
在湖北某地的管線數據入庫項目中,原始數據只有以*.dwg形式存儲的CAD管線圖。我們使用從AutoCAD圖形數據反演管線探測數據的方法,得到表1所示的探測數據表[2],然后直接入庫。實現了在整理管線圖形數據的同時,將其屬性數據一并入庫。

表1 探測數據管點表
圖1所是某塊區域的原始CAD管線圖,其中包含一些管線相關的注記,用不同顏色表示不同類型的管線。圖2是將圖1的數據反演為管線探測數據表,而后用MapGIS導入探測數據表得到的管線數據圖[3]。可以明顯看到,兩個圖的圖形結構完全一致,管線類型得到完好的保留,管點位置也完全一致。圖2擁有統一的圖示符號,圖1中一些不明顯的管點在圖2中也能得到體現,使管線圖更易讀。同時,圖2中的管點和管段還保存了屬性信息,具備了參與空間分析的能力。

圖1 管線原始CAD圖

圖2 反演后入庫管線圖
本文研究了一種將管線從CAD圖形轉換成探測數據表的方法。該方法實現了屬性信息一并入庫,能滿足管線數據的管理、使用和分析需要。不足之處在于,轉換前需要對圖形數據進行預處理,否則可能出現屬性信息錄入不準確的情況。另外,某些管段屬性由于注記標識位置沿線分布,需要人工干預。如何能更智能地對管點、管段屬性進行識別將是該方法以后的改進方向。
[1]陳小航,張亦工.地下管線普查、建庫、管理系統一體化構想[J].現代測繪,2003,26(2):41-44
[2]李黎,李劍.基于空間數據引擎的綜合地下管線數據組織[J].測繪科學,2007,32(2):133-134
[3]鄭貴洲,姚昳昕,彭俊芳.AutoCAD與MapGIS K9數據轉換[J].測繪地理信息,2013,38(2):39-41
[4]劉钅泉,王炳偉,徐德軍.綜合管網地理信息系統的設計與實現[J].地理空間信息,2007,5(2):69-70
[5]洪中華,陳紹杰,徐志剛.地下管線建庫的關鍵技術及應用[J].龍巖學院學報,2009,27(5):44-46
[6]趙春燕,施建昭,于海乾.基于ObjectARX的CAD二次開發技術實現管線數據的入庫和編輯[J].現代測繪,2010,33(5):58-60
[7]張衛,孔令遂,張書生,等.基于VBA的AutoCAD管線圖形的屬性數據入庫[J].北京測繪,2011(4):39-42