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