俞志強,許大璐,趙志強,李學錫
(1. 浙江省地理信息中心,浙江 杭州 310012; 2. 江蘇易圖地理信息工程有限公司,江蘇 揚州 225009)
數字城市的建設是一個漫長的過程,在完成整個城市的建設工作之前,基礎數據庫建設是非常重要的一部分,它可以很大程度上反映城市的基礎地理信息形態。國內有些城市在將數據規整入庫后,實現了日常辦公管理,運行效果很好。而根據現有各類基礎數據進行規整入庫及更新,完成基礎數據庫的更新管理,與通常的數據入庫不同,該方法盡量利用現有數據特點進行統一要素提取和轉換,并采用統一編碼來實現數據的統一入庫和更新。以此建設的數據庫,不僅數據庫完整、成本低,而且效率高、效果好,在規劃、房產、城市應急管理等行業有很好的應用前景。
鑒于AutoCAD在地理信息數據的廣泛應用,本文提出了基于AutoCAD異構數據的面向對象化智能識別方法,并開發了相應的數據整理軟件。軟件基于AutoCAD強大的區域搜索能力,在算法的移植過程中重寫了區域搜索算法,提高了運算速度,主要解決了外形相似、結構不同的數據實體對象化提取問題。此軟件代替了通過人眼識別作業的操作過程,通過快速準確的運算,解決了建庫過程中人工提取大量異構數據的復雜問題,與常規生產方法相比,提高生產效率幾十倍,極大地降低了生產成本。
數據整理軟件主要包含3個模塊:規則庫建立、智能識別及對象化圖形、識別統計及結果分析,如圖1所示。

圖1 數據整理軟件流程
以上3個模塊是層層遞進的,作為關鍵模塊,“規則庫建立”是整個算法的核心。該模塊主要是根據不同數據對象建立不同規則,主要包括4個規則:預處理規則、點規則、文字規則、線規則,這4個規則包括了目前所有的數據類型。主要是根據數據不同類型及需要結果進行樣本圖的采樣和提取,當樣本圖提取并驗證成功后,則利用 “智能識別與圖形對象化”模塊根據樣本圖規則建立識別機制,對類似數據實體進行批量智能識別和對象化。最后將對象化的結果提交給 “識別統計及結果分析”模塊進行分析,以進一步對結果進行驗證。
規則庫主要包含四大規則:預處理規則、點規則、文字規則、線規則。為了更好地闡述“規則庫建立”模塊的算法及應用,從以下幾個方面進行設計。
AutoCAD異構數據文件中往往存在著大量的冗余數據,與數據對象化無關。這些數據的存在直接影響算法的準確性,進而降低了工作效率。采用的預處理規則就是用與、或、非等算法計算冗余數據,主要分為如下幾個方面。
1) 非結構線數據過濾:過濾規則包括基本的實體、空間關系等方法過濾。如陡坎的方向短線長度固定且一端與多段線相連,通過這樣的規則可以過濾掉方向短線。
2) 重疊實體過濾:對于相同空間結構的點、線、文字,進行預刪除。
3) 偽節點及懸掛修復。
點規則的建立是將多個數據實體組成的非對象化數據進行結構化的建立過程。主要內容如下:
(1) 數據實體匹配
用于識別實體集對象化后無旋轉的數據匹配,主要通過計算每個數據的長度、結構類型、角度信息、給定容差,并嚴格設置匹配參數(如圖2所示)。

圖2 數據實體匹配
為了提高匹配效率,制定了嚴格匹配和非嚴格匹配兩種方案。根據實體尺度、角度和相對尺度去匹配拾取范圍中的信息,如果全部匹配則作為匹配數據,否則按匹配率結果反饋到“識別統計及結果分析”模塊。
(2) 定位和角度
當匹配完成后需要用目標數據提取定位點及角度信息:
1) 無旋轉:對于零角度的點狀塊提取,只需要知道其定位點,因為沒有旋轉角度,所以其外包面是相同的,可以通過外包面的任何一個位置定位,然后加上一個常量就可以得到定位信息。
2) 有旋轉:對于已經成功匹配的有角度數據集,其外包面不相同,給出有角度數據集的定位點和角度獲取。其算法為:由于數據實體集整體旋轉相對于幾何中心相對位置不變,即可以通過幾何中心定位和旋轉的角度計算塊的角度,其算法包含3種情況:①中心對稱:此時相對尺度信息中的長度要么為零,要么為相同的值。這時候角度為任意長度不為零的點與幾何中心組成的角度固定,通過塊的角度的值加上一個常量即可計算實際的角度。②軸對稱:相對尺度信息中的不為零的數均為偶數多值,通過其中一組偶數多值的點計算其平均值得到的點與幾何中心的角度固定,通過塊角度的值加上一個常量即可計算實際的角度。③非對稱圖形:相對尺度信息中存在至少一個長度值和其他長度不一樣的值的點,通過該點和幾何中心組成的角度固定,通過塊的角度的值加上一個常量計算實際的角度。
以上3種方法解決了符號庫中所有的定位和角度問題,樣圖如圖3所示。

圖3 點狀符號定位示意圖
對于散狀分布的文字,根據其具有字體信息、角度信息、分布信息相同的規律,做出如下定義:文字過濾信息通過單個文字實體拾取其角度、屬性信息。
通過這些規則建立了文字規則,主要包括3個方面:
1) 信息提取:選擇單個文字實體拾取“文字過濾信息”。
2) 文字的屬性過濾及文字內容條件過濾,將過濾條件加入“文字過濾信息”。
3) 根據設定距離及容差范圍拾?。涸O置距離及和距離相關的容差信息,通過該文字的定位點分別向兩端查找相應滿足“文字過濾信息”的文字,直至結束;并通過坐標信息和角度按正序排序得到文字的排序內容,將得到的第一個文字的定位點和角度生成一個完整的文字,插入到當前位置(如圖4所示)。

圖4 文字過濾效果圖
對于散狀分布的線主要分為以點類型為單元和以兩端端點為單元的數據組成,為此將其分成兩種類型:①點類型:圓、弧、點、塊、線的結構中心等;②線類型:線的首末點類型,把離目標點距離比較近的為近端點,比較遠的為遠端點,分別定義為“近搜索點”和“遠搜索點”;如果存在多條則按照設定要求,進行停止搜索、最短距離搜索、最小角度變化搜索。為此定義了3種類型規則。
(1) 點類型
通過拾取點類型信息,類似于文字搜索的方法,將設定的距離及容差作為搜索條件,按相鄰關系遍歷拾取所有的點并組合成一條直線,如圖5所示。

圖5 點拾取示意圖
(2) 線類型
通過拾取一條線,根據設定線的設定要求,根據線的兩端搜索“近搜索點”,然后通過“遠搜索點”搜索下一個滿足“搜索條件”的“遠搜索點”的“近搜索點”,如此直至完成,然后將結果合并成一條直線,如圖6所示。

圖6 線拾取示意圖
(3) 組合類型
組合類型中的搜索可能包含多種點類型、多種線類型或點和線交織的類型,本文通過拾取一個周期的類型集合進行搜索,方法也是以上兩種搜索的組合類型。組合類型拾取及參數設置建庫時,將類型和設置的參數成對建模,按照搜索的順序組合成一個搜索序列,如圖7所示。

圖7 點線交叉拾取示意圖
以AutoCAD平臺作為載體開發了數據整理軟件,以下代碼為載入AutoCAD ObjectArx線程,載入成功后,可以直接訪問AutoCAD數據。
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{
switch (msg) {
case AcRx::kInitAppMsg:
∥Comment out the following line if your
∥application should be locked into memory
acrxDynamicLinker->unlockApplication(pkt);
acrxDynamicLinker->registerAppMDIAware(pkt);
InitApplication();
break;
case AcRx::kUnloadAppMsg:
UnloadApplication();
break;
}
return AcRx::kRetOK;
}
void InitApplication()
{
∥NOTE: DO NOT edit the following lines.
∥{{AFX_ARX_INIT
AddCommand("WSK", "XF", "XF", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, wskxf);
AddCommand("WSK", "MDL", "MDL", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, wskmdl);
AddCommand("WSK", "RML", "RML", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, wskrml);
AddCommand("WSK", "PJ", "PJ", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, wskPJ);
AddCommand("WSK", "WQL", "WQL", ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET, wskwql);
∥}}AFX_ARX_INIT
∥TODO: add your initialization functions
if (g_pBlockDialog == NULL)
{
g_pBlockDialog = new CBlockRepairDialog;
g_pBlockDialog->Create(IDD_DIALOG1, NULL);
g_pBlockDialog->SetWindowText("數據規整");
g_pBlockDialog->ShowWindow(SW_SHOW);
}
}
void UnloadApplication()
{
∥NOTE: DO NOT edit the following lines.
∥{{AFX_ARX_EXIT
acedRegCmds->removeGroup("WSK");
∥}}AFX_ARX_EXIT
if (g_pBlockDialog != NULL)
{
g_pBlockDialog->DestroyWindow();
delete g_pBlockDialog;
g_pBlockDialog = NULL;
}
∥TODO: clean up your application
}
…
軟件界面及提取結果如圖8—圖10所示。

圖8 數據規整主界面 圖9 文字和線型入庫工具

圖10 對象化提取結果示意圖
本文詳細介紹了基于AutoCAD異構數據對象化智能識別方法的研究及應用,使得AutoCAD數據入庫更為方便、快捷,為基礎地理信息數據庫建設提供支撐。今后將對本文的算法進一步優化,同時將在MicroStation、ArcGIS等不同平臺下進行開發和推廣,為地理信息產業貢獻自己的一份力量。
參考文獻:
[1] 劉良華,朱東海.AutoCAD 2000 ARX開發技術[M].北京:清華大學出版社,2000.
[2] Sergios Theodoridis,Konstantinos Koutroumbas. 模式識別[M]. 4版.李晶皎,王愛俠,王驕,等,譯.北京:電子工業出版社,2010.
[3] 王文波,鄒清源,張斯珩,等.AutoCAD2010二次開發實例教程(ObjectARX)[M].北京:機械工業出版社,2013.