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