劉 亞,段麗娟,亢曉琛,孫 鎮(zhèn),趙 捷
(1.北京中誠盛源技術(shù)發(fā)展有限公司,北京 100020;2.武漢大學(xué),湖北武漢 430079;3.中國測繪科學(xué)研究院,北京 100830;4.國家組織機構(gòu)代碼管理中心,北京 100026)
基于MongoDB的地名信息管理
劉 亞1,段麗娟1,亢曉琛2,3,孫 鎮(zhèn)4,趙 捷4
(1.北京中誠盛源技術(shù)發(fā)展有限公司,北京 100020;2.武漢大學(xué),湖北武漢 430079;3.中國測繪科學(xué)研究院,北京 100830;4.國家組織機構(gòu)代碼管理中心,北京 100026)
地名是人們對具有特定方位、地理范圍的地理實體賦予的專有名稱,其本質(zhì)屬性包括兩個方面:指位性與社會性。指位性指地名所代表的地理實體在地球表面上具有一定的空間位置;社會性是指地名的命名、更名、發(fā)展、演變始終受到社會因素制約。地名信息系統(tǒng)(geographic names information system,GNIS)是由美國地質(zhì)勘察局(U.S.Geological Survey)聯(lián)合地名委員會(U.S.Board on Geographic Names)建立的自然與文化中包含了地理位置與名稱的數(shù)據(jù)庫,其目的在于促進地名信息的標準化[1]。在地理信息系統(tǒng)中,實體的定位依據(jù)是實體所在的地理位置[2]。地理位置是一個抽象的概念,難以進行操作,因此在城市地名庫的建立過程中,地名成為人與計算機或者手持設(shè)備進行溝通的紐帶。Excite是全球領(lǐng)先的個性化門戶網(wǎng)站,提供頂級搜索功能、門戶網(wǎng)站,郵件服務(wù),即時通信等服務(wù),根據(jù)該網(wǎng)站統(tǒng)計,與地理位置相關(guān)的查詢約占所有查詢的1/5,而出現(xiàn)頻率最高的關(guān)鍵字是地名[3]。在二維空間與三維空間應(yīng)用中,地名數(shù)據(jù)可用于各類名稱檢索、空間范圍查詢,用于輔助空間信息可視化。在基于Web方式的地名標注應(yīng)用中,不同的地物點往往對應(yīng)不同類型、不同個數(shù)的字段。這種特殊的需求對傳統(tǒng)的模式化關(guān)系數(shù)據(jù)庫提出了極大的挑戰(zhàn)。在城市快速發(fā)展的背景下,城市地名表現(xiàn)出數(shù)量多、密度大、使用率極高等一系列特點[4]。因此,需要良好的數(shù)據(jù)組織模型與數(shù)據(jù)庫解決方案來支持地名的快速查詢。
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫,能夠為Web應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案,具有模式自由、支持二維地理空間索引、可存儲二進制數(shù)據(jù)對象、支持查詢和網(wǎng)絡(luò)訪問等一系列優(yōu)點[5]。MongoDB將關(guān)系型數(shù)據(jù)庫中“行”的概念轉(zhuǎn)換為“文檔”,支持文檔數(shù)據(jù)的內(nèi)嵌。由于無模式限制,MongoDB可為不同的地名提供多樣化的字段定義,而無須大量遷移數(shù)據(jù),從而使得數(shù)據(jù)模型具備靈活變更的能力。此外,MongoDB默認的存儲引擎中使用了內(nèi)存映射文件,將內(nèi)存管理交付操作系統(tǒng),其傳輸協(xié)議采用預(yù)分配策略,用空間換取性能穩(wěn)定,優(yōu)越的性能使其具備存儲管理大規(guī)模地名數(shù)據(jù)、應(yīng)對多樣化存儲需求的能力。
本文所設(shè)計的地名信息管理系統(tǒng)以MongoDB為底層存儲解決方案。在此基礎(chǔ)上,設(shè)計了基于K-means聚類算法的地名層次組織模型,并用文檔字段來表征不同地名之間的級別關(guān)系。為便于地名應(yīng)用訪問地名庫,設(shè)計與實現(xiàn)一系列地名文檔信息操作接口,用于支持地名入庫、建立空間索引、地名修改、地名查詢(范圍查詢、鄰近查詢及名稱查詢)等。
地名數(shù)據(jù)組織模型描述了整個地名信息庫的層次組織結(jié)構(gòu),而這種層次關(guān)系需要通過單個地名文檔的結(jié)構(gòu)字段來表達。具體定位一個位置時,還需要空間索引來輔助操作以提高地名檢索的效率。
1.基于K-means聚類算法的地名數(shù)據(jù)樹模型
在二維或三維可視化應(yīng)用中,為了確保顯示效率與地圖要素不過于擁擠,單次顯示地名不能過于密集。在城市地區(qū),即使很小的地理范圍,對應(yīng)的地名數(shù)據(jù)可能較眾多。而在農(nóng)村偏遠地區(qū),地名分布則可能較為稀疏。此外,地名具有行政歸屬,即不同地名節(jié)點之間可能具有從屬關(guān)系(如海淀區(qū)節(jié)點屬于北京市節(jié)點)。因此,必須采用分級的策略,同時兼顧地名密度。
K-means算法是經(jīng)典的基于劃分的聚類算法,其基本思想是:以空間中的k個點為中心進行聚類,對靠近他們的對象進行歸類。通過迭代方法,逐次更新聚類中心的值,直至得到理想的聚類結(jié)果。
為了同時兼顧地名行政歸屬與地名分布密度,首先將主要的地名按行政級別劃分為4個級別:0級(國家級)、1級(省、自治區(qū)、直轄市級)、2級(省會城市及地級市)、3級(區(qū)、縣、縣級市)。然后對從屬于3級的大量的低級地名進行聚類劃分,使得4級地名(聚類中心)與5級地名(村、鎮(zhèn))均保持有相對平衡的節(jié)點數(shù)目。地名的層次結(jié)構(gòu)如圖1所示。
圖1 地名層次結(jié)構(gòu)圖
2.地名結(jié)構(gòu)描述
為了在數(shù)據(jù)庫中表達以上的層次關(guān)系,所有地名節(jié)點必須需具備最基本的一系列字段,用于反映上下級地名之間的關(guān)系。通過基本字段描述,整個地名數(shù)據(jù)庫的邏輯結(jié)構(gòu)可得到有效表達。其他可選字段則是可根據(jù)需求動態(tài)進行添加、刪除、編輯。地名節(jié)點的字段列舉如下:
1)地名標識(必選):唯一值,不允許重復(fù),用于標識唯一一個節(jié)點。
2)地名名稱(必選):描述該節(jié)點的地理名稱。
3)地名位置(必選):以經(jīng)緯度方式表達的獨立坐標位置。
4)地名級別(必選):取0~5中的一個值。
5)子節(jié)點個數(shù)(必選):從屬于當前節(jié)點的子節(jié)點個數(shù)。
6)父節(jié)點標識(必選):所屬節(jié)點標識。
7)標注信息1(可選):如文字信息。
8)標注信息2(可選):如圖片信息。
9)標注信息3(可選):如視頻信息。
10)……
對于任意一個地名(假設(shè)標識為N,父節(jié)點標識為M,級別位L),可以獲取它的父節(jié)點及子節(jié)點列表。由于每個地名記錄存儲了父節(jié)點標識,根據(jù)標識M可直接訪問父節(jié)點的地名信息。由于子節(jié)的地名與父節(jié)點地名的級別差為1,聯(lián)合查詢級別與父節(jié)點標識兩項字段即可返回當前地名的下級地名信息,即查詢級別為L-1,且父節(jié)點為N的所有地名文檔。為了加速索引過程,需要對標識、父節(jié)點標識及地名級別建立索引。
在MongoDB數(shù)據(jù)庫中,采用了JSON(javascript object notation)格式來表述。單個地名的文本表達方式如下(以最低級的村莊地名文檔為例):
3.索 引
在進行空間檢索之前,需對空間范圍內(nèi)的地理要素構(gòu)建空間索引,以便于按范圍訪問。由于地名數(shù)據(jù)位置信息為空間點位置,對應(yīng)的空間索引也針對點集進行構(gòu)建。Mongodb將整個地理范圍劃分為坐標網(wǎng)格,并采用geohash方式對網(wǎng)格進行編碼,然后計算各個坐標位置對應(yīng)的geohash值。計算geohash需要將二維空間范圍迭代劃分為4個象限,然后為對每個象限進行雙位編碼。如圖2所示,一個4象限可以表達為4個兩位數(shù)字(如00,10,01,11)。每個兩位數(shù)對應(yīng)一個象限與所有位于對應(yīng)象限內(nèi)的坐標位置。這樣,所有位于左下角的點,均對應(yīng)的geohash值均為00,以此類推,左上為01,右下為10,右上為11。要提高檢索精度,可對每個象限作進一步劃分。這樣,每個坐標位置將對應(yīng)更長的檢索位。
圖2 空間劃分與空間索引
在將地名信息導(dǎo)入到數(shù)據(jù)庫后,選擇標識地理位置的字段(如經(jīng)度、緯度)創(chuàng)建空間索引。MongoDB已經(jīng)提供了空間范圍的默認劃分方式,并提供了對球面計算與平面幾何計算的支持,只需要調(diào)用相關(guān)命令創(chuàng)建即可。
地名數(shù)據(jù)管理系統(tǒng)需要實現(xiàn)基本的數(shù)據(jù)錄入、數(shù)據(jù)修改,空間索引建立、各種空間查詢接口,以便于外部應(yīng)用訪問。
數(shù)據(jù)錄入接口提供了按行讀取文本方式,字段的定義在首行。通過對首行文本的分析,可得到所有字段名稱及類型。其格式定義如下:
Field1(Type)Field2(Type)Field3(Type)……
讀取首行信息后,可得到基本的地名結(jié)構(gòu)描述定義,從而錄入各個字段。數(shù)據(jù)錄入接口的定義較為簡單,只需要提供文件路徑即可,其定義如下:
void ImportFromTxt(const char?filepathname)
空間索引是進行空間查詢的基礎(chǔ),必須在查詢之前進行構(gòu)建。構(gòu)建空間索引時,需要指定坐標對的具體字段。本系統(tǒng)支持二維空間坐標索引,需提供標識橫坐標與縱坐標的兩個字段。接口定義如下:
數(shù)據(jù)修改針對某個具體記錄進行,需提供對應(yīng)的記錄標識。為了快速定位修改對象,需要對所有記錄預(yù)先按照標識字段構(gòu)建索引。其接口定義如下:
空間查詢包括了按照范圍、空間臨近及按字段名稱查詢。其定義為:
其中,f定義了被查詢的字段,value定義了被查詢值。
地名管理引擎的實現(xiàn)基于MongoDB所提供的C++driver完成。通過封裝成動態(tài)鏈接庫或可執(zhí)行文件,以方便在二維與三維應(yīng)用中調(diào)用。在應(yīng)用中,往往需要組合調(diào)用多個接口來實現(xiàn)特定的數(shù)據(jù)更新需求。一般流程為:①選擇所需的查詢接口來定位需要更新的地名文檔;②根據(jù)定名標識逐個更新地名。
本系統(tǒng)已成功應(yīng)用于基于Web方式的地名標注地理信息系統(tǒng)與三維地名可視化系統(tǒng)平臺。在地名標注地理信息系統(tǒng)中,用戶可在地圖背景下動態(tài)添加點或線類型的地名標注。對于不同的標注項,用戶可以個性化地增加標注內(nèi)容,如文字,圖片及上傳的其他相關(guān)文件。不同標注項對標注內(nèi)容的個數(shù)沒有限制。Web端所標注的信息可動態(tài)插入到對應(yīng)地名文檔中,各地名文檔均不受模式約束。
在三維應(yīng)用中,地名數(shù)據(jù)以獨立的顯示圖層加載到三維引擎中。為確保地名渲染速度及解決圖面地名擁擠問題,地名的展示應(yīng)依尺度進行變化,即隨著可視化尺度的變化,地名數(shù)據(jù)可動態(tài)顯示或隱藏,以確保顯示調(diào)度的效率。圖3與圖4為同一地區(qū)兩個不同尺度的地名顯示狀態(tài)。在圖3對應(yīng)的尺度下,僅顯示了地級市級別的地名(如長沙市、南昌市)。在此基礎(chǔ)上,經(jīng)過地圖放大,縣級市的地名則全部顯示出來(如圖4所示)。通過地名層次組織結(jié)構(gòu),不同的層次細節(jié)信息得到調(diào)度顯示。
圖3 三維地名可視化―――尺度1
圖4 三維地名可視化―――尺度2
基于MongoDB的地名數(shù)據(jù)管理可支持大量地名信息存儲,查詢方式及自定義方式更新等需求。傳統(tǒng)關(guān)系型數(shù)據(jù)的模式化限制得到有效解決,從而支持多樣化地名標注。內(nèi)置的空間索引功能,使得基于關(guān)系數(shù)據(jù)庫開發(fā)地名信息系統(tǒng)的復(fù)雜度得到有效降低。通過在地名標注地理信息系統(tǒng)與三維地名可視化應(yīng)用中發(fā)現(xiàn),基于MongoDB的地名信息管理是可行的技術(shù)方案。
[1]HILL L L,F(xiàn)REW J,ZHENG Q.Geographic Name[J]. D-Lib Magazine,1999,5(1):17.
[2]江春發(fā).城市地名庫的建立[J].測繪通報,2000 (9):23-24.
[3]SANDERSON M,KOHLER J.Analyzing Geographic Queries[C]∥SIGIR Workshop on Geographic Information Retrieval.[S.l.]:[s.n.],2004,2.
[4]傅立憲.上海市地名管理信息系統(tǒng)設(shè)計思想[J].中國地名,1997(2):29-30.
[5]MEMBREY P,PLUGGE E,HAWKINS T.The Definitive Guide to MongoDB:the noSQL Database for Cloud and Desktop Computing[M].[S.l.]:Apress,2010.
Geographic Names Management Based on MongoDB
LIU Ya,DUAN Lijuan,KANG Xiaochen,SUN Zhen,ZHAO Jie
地名數(shù)據(jù)具有數(shù)據(jù)量大、數(shù)據(jù)結(jié)構(gòu)復(fù)雜、查詢方式多樣等一系列特征。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在存儲地名信息數(shù)據(jù)時,往往需要預(yù)先定義數(shù)據(jù)表結(jié)構(gòu),難以實現(xiàn)動態(tài)增加多樣化地名屬性信息的功能。此外,復(fù)雜的地理查詢需求也難以得到滿足。本文提出一種基于非關(guān)系型數(shù)據(jù)庫MongoDB的地名數(shù)據(jù)存儲管理方式,可滿足地名存儲的各種需求。同時,屬性查詢、空間鄰近查詢、空間范圍查詢均能得到有效支持。
MongoDB;地名數(shù)據(jù);地名存儲;地名查詢
P208
B
0494-0911(2014)10-0117-04
2013-10-08
國家科技支撐計劃(2012BAH24B 02;2013BAK07B03)
劉 亞(1977―),男,重慶巫山人,工程師,主要研究方向為信息系統(tǒng)架構(gòu)、商業(yè)智能及數(shù)據(jù)挖掘。
劉亞,段麗娟,亢曉琛.基于MongoDB的地名信息管理[J].測繪通報,2014(10):117-120.
10.13474/j.cnki.11-2246.2014.0346