俞志強,許大璐,趙志強,李學(xué)錫
(1. 浙江省地理信息中心,浙江 杭州 310012; 2. 江蘇易圖地理信息工程有限公司,江蘇 揚州 225009)
數(shù)字城市的建設(shè)是一個漫長的過程,在完成整個城市的建設(shè)工作之前,基礎(chǔ)數(shù)據(jù)庫建設(shè)是非常重要的一部分,它可以很大程度上反映城市的基礎(chǔ)地理信息形態(tài)。國內(nèi)有些城市在將數(shù)據(jù)規(guī)整入庫后,實現(xiàn)了日常辦公管理,運行效果很好。而根據(jù)現(xiàn)有各類基礎(chǔ)數(shù)據(jù)進行規(guī)整入庫及更新,完成基礎(chǔ)數(shù)據(jù)庫的更新管理,與通常的數(shù)據(jù)入庫不同,該方法盡量利用現(xiàn)有數(shù)據(jù)特點進行統(tǒng)一要素提取和轉(zhuǎn)換,并采用統(tǒng)一編碼來實現(xiàn)數(shù)據(jù)的統(tǒng)一入庫和更新。以此建設(shè)的數(shù)據(jù)庫,不僅數(shù)據(jù)庫完整、成本低,而且效率高、效果好,在規(guī)劃、房產(chǎn)、城市應(yīng)急管理等行業(yè)有很好的應(yīng)用前景。
鑒于AutoCAD在地理信息數(shù)據(jù)的廣泛應(yīng)用,本文提出了基于AutoCAD異構(gòu)數(shù)據(jù)的面向?qū)ο蠡悄茏R別方法,并開發(fā)了相應(yīng)的數(shù)據(jù)整理軟件。軟件基于AutoCAD強大的區(qū)域搜索能力,在算法的移植過程中重寫了區(qū)域搜索算法,提高了運算速度,主要解決了外形相似、結(jié)構(gòu)不同的數(shù)據(jù)實體對象化提取問題。此軟件代替了通過人眼識別作業(yè)的操作過程,通過快速準(zhǔn)確的運算,解決了建庫過程中人工提取大量異構(gòu)數(shù)據(jù)的復(fù)雜問題,與常規(guī)生產(chǎn)方法相比,提高生產(chǎn)效率幾十倍,極大地降低了生產(chǎn)成本。
數(shù)據(jù)整理軟件主要包含3個模塊:規(guī)則庫建立、智能識別及對象化圖形、識別統(tǒng)計及結(jié)果分析,如圖1所示。
圖1 數(shù)據(jù)整理軟件流程
以上3個模塊是層層遞進的,作為關(guān)鍵模塊,“規(guī)則庫建立”是整個算法的核心。該模塊主要是根據(jù)不同數(shù)據(jù)對象建立不同規(guī)則,主要包括4個規(guī)則:預(yù)處理規(guī)則、點規(guī)則、文字規(guī)則、線規(guī)則,這4個規(guī)則包括了目前所有的數(shù)據(jù)類型。主要是根據(jù)數(shù)據(jù)不同類型及需要結(jié)果進行樣本圖的采樣和提取,當(dāng)樣本圖提取并驗證成功后,則利用 “智能識別與圖形對象化”模塊根據(jù)樣本圖規(guī)則建立識別機制,對類似數(shù)據(jù)實體進行批量智能識別和對象化。最后將對象化的結(jié)果提交給 “識別統(tǒng)計及結(jié)果分析”模塊進行分析,以進一步對結(jié)果進行驗證。
規(guī)則庫主要包含四大規(guī)則:預(yù)處理規(guī)則、點規(guī)則、文字規(guī)則、線規(guī)則。為了更好地闡述“規(guī)則庫建立”模塊的算法及應(yīng)用,從以下幾個方面進行設(shè)計。
AutoCAD異構(gòu)數(shù)據(jù)文件中往往存在著大量的冗余數(shù)據(jù),與數(shù)據(jù)對象化無關(guān)。這些數(shù)據(jù)的存在直接影響算法的準(zhǔn)確性,進而降低了工作效率。采用的預(yù)處理規(guī)則就是用與、或、非等算法計算冗余數(shù)據(jù),主要分為如下幾個方面。
1) 非結(jié)構(gòu)線數(shù)據(jù)過濾:過濾規(guī)則包括基本的實體、空間關(guān)系等方法過濾。如陡坎的方向短線長度固定且一端與多段線相連,通過這樣的規(guī)則可以過濾掉方向短線。
2) 重疊實體過濾:對于相同空間結(jié)構(gòu)的點、線、文字,進行預(yù)刪除。
3) 偽節(jié)點及懸掛修復(fù)。
點規(guī)則的建立是將多個數(shù)據(jù)實體組成的非對象化數(shù)據(jù)進行結(jié)構(gòu)化的建立過程。主要內(nèi)容如下:
(1) 數(shù)據(jù)實體匹配
用于識別實體集對象化后無旋轉(zhuǎn)的數(shù)據(jù)匹配,主要通過計算每個數(shù)據(jù)的長度、結(jié)構(gòu)類型、角度信息、給定容差,并嚴(yán)格設(shè)置匹配參數(shù)(如圖2所示)。
圖2 數(shù)據(jù)實體匹配
為了提高匹配效率,制定了嚴(yán)格匹配和非嚴(yán)格匹配兩種方案。根據(jù)實體尺度、角度和相對尺度去匹配拾取范圍中的信息,如果全部匹配則作為匹配數(shù)據(jù),否則按匹配率結(jié)果反饋到“識別統(tǒng)計及結(jié)果分析”模塊。
(2) 定位和角度
當(dāng)匹配完成后需要用目標(biāo)數(shù)據(jù)提取定位點及角度信息:
1) 無旋轉(zhuǎn):對于零角度的點狀塊提取,只需要知道其定位點,因為沒有旋轉(zhuǎn)角度,所以其外包面是相同的,可以通過外包面的任何一個位置定位,然后加上一個常量就可以得到定位信息。
2) 有旋轉(zhuǎn):對于已經(jīng)成功匹配的有角度數(shù)據(jù)集,其外包面不相同,給出有角度數(shù)據(jù)集的定位點和角度獲取。其算法為:由于數(shù)據(jù)實體集整體旋轉(zhuǎn)相對于幾何中心相對位置不變,即可以通過幾何中心定位和旋轉(zhuǎn)的角度計算塊的角度,其算法包含3種情況:①中心對稱:此時相對尺度信息中的長度要么為零,要么為相同的值。這時候角度為任意長度不為零的點與幾何中心組成的角度固定,通過塊的角度的值加上一個常量即可計算實際的角度。②軸對稱:相對尺度信息中的不為零的數(shù)均為偶數(shù)多值,通過其中一組偶數(shù)多值的點計算其平均值得到的點與幾何中心的角度固定,通過塊角度的值加上一個常量即可計算實際的角度。③非對稱圖形:相對尺度信息中存在至少一個長度值和其他長度不一樣的值的點,通過該點和幾何中心組成的角度固定,通過塊的角度的值加上一個常量計算實際的角度。
以上3種方法解決了符號庫中所有的定位和角度問題,樣圖如圖3所示。
圖3 點狀符號定位示意圖
對于散狀分布的文字,根據(jù)其具有字體信息、角度信息、分布信息相同的規(guī)律,做出如下定義:文字過濾信息通過單個文字實體拾取其角度、屬性信息。
通過這些規(guī)則建立了文字規(guī)則,主要包括3個方面:
1) 信息提?。哼x擇單個文字實體拾取“文字過濾信息”。
2) 文字的屬性過濾及文字內(nèi)容條件過濾,將過濾條件加入“文字過濾信息”。
3) 根據(jù)設(shè)定距離及容差范圍拾?。涸O(shè)置距離及和距離相關(guān)的容差信息,通過該文字的定位點分別向兩端查找相應(yīng)滿足“文字過濾信息”的文字,直至結(jié)束;并通過坐標(biāo)信息和角度按正序排序得到文字的排序內(nèi)容,將得到的第一個文字的定位點和角度生成一個完整的文字,插入到當(dāng)前位置(如圖4所示)。
圖4 文字過濾效果圖
對于散狀分布的線主要分為以點類型為單元和以兩端端點為單元的數(shù)據(jù)組成,為此將其分成兩種類型:①點類型:圓、弧、點、塊、線的結(jié)構(gòu)中心等;②線類型:線的首末點類型,把離目標(biāo)點距離比較近的為近端點,比較遠的為遠端點,分別定義為“近搜索點”和“遠搜索點”;如果存在多條則按照設(shè)定要求,進行停止搜索、最短距離搜索、最小角度變化搜索。為此定義了3種類型規(guī)則。
(1) 點類型
通過拾取點類型信息,類似于文字搜索的方法,將設(shè)定的距離及容差作為搜索條件,按相鄰關(guān)系遍歷拾取所有的點并組合成一條直線,如圖5所示。
圖5 點拾取示意圖
(2) 線類型
通過拾取一條線,根據(jù)設(shè)定線的設(shè)定要求,根據(jù)線的兩端搜索“近搜索點”,然后通過“遠搜索點”搜索下一個滿足“搜索條件”的“遠搜索點”的“近搜索點”,如此直至完成,然后將結(jié)果合并成一條直線,如圖6所示。
圖6 線拾取示意圖
(3) 組合類型
組合類型中的搜索可能包含多種點類型、多種線類型或點和線交織的類型,本文通過拾取一個周期的類型集合進行搜索,方法也是以上兩種搜索的組合類型。組合類型拾取及參數(shù)設(shè)置建庫時,將類型和設(shè)置的參數(shù)成對建模,按照搜索的順序組合成一個搜索序列,如圖7所示。
圖7 點線交叉拾取示意圖
以AutoCAD平臺作為載體開發(fā)了數(shù)據(jù)整理軟件,以下代碼為載入AutoCAD ObjectArx線程,載入成功后,可以直接訪問AutoCAD數(shù)據(jù)。
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("數(shù)據(jù)規(guī)整");
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
}
…
軟件界面及提取結(jié)果如圖8—圖10所示。
圖8 數(shù)據(jù)規(guī)整主界面 圖9 文字和線型入庫工具
圖10 對象化提取結(jié)果示意圖
本文詳細介紹了基于AutoCAD異構(gòu)數(shù)據(jù)對象化智能識別方法的研究及應(yīng)用,使得AutoCAD數(shù)據(jù)入庫更為方便、快捷,為基礎(chǔ)地理信息數(shù)據(jù)庫建設(shè)提供支撐。今后將對本文的算法進一步優(yōu)化,同時將在MicroStation、ArcGIS等不同平臺下進行開發(fā)和推廣,為地理信息產(chǎn)業(yè)貢獻自己的一份力量。
參考文獻:
[1] 劉良華,朱東海.AutoCAD 2000 ARX開發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2000.
[2] Sergios Theodoridis,Konstantinos Koutroumbas. 模式識別[M]. 4版.李晶皎,王愛俠,王驕,等,譯.北京:電子工業(yè)出版社,2010.
[3] 王文波,鄒清源,張斯珩,等.AutoCAD2010二次開發(fā)實例教程(ObjectARX)[M].北京:機械工業(yè)出版社,2013.