邱儒瓊,何保國(guó)
(1.湖北省基礎(chǔ)地理信息中心,湖北武漢430071;2.湖北省測(cè)繪局,湖北武漢430071)
3S技術(shù)是目前IT領(lǐng)域的熱門話題,GIS也隨著Google Earth的流行而被越來(lái)越多的人所熟知。在GIS流行的背后,它關(guān)聯(lián)著人們?nèi)粘I畹姆椒矫婷?,也有越?lái)越多的開(kāi)源GIS在默默貢獻(xiàn)自己的力量。在眾多的開(kāi)源桌面GIS軟件中,QGIS以其用戶界面友好、廣泛支持操作系統(tǒng)等特點(diǎn),擁有廣大的用戶群[1]。由于QGIS是基于Qt跨平臺(tái)類庫(kù)開(kāi)發(fā),因此支持目前最為廣泛的操作系統(tǒng)如Linux、Unix、Mac OSX和Windows等,這一點(diǎn)是其他很多桌面GIS軟件所不可企及的。而最為重要的是,其重構(gòu)了QGIS的API庫(kù),方便用戶進(jìn)行二次開(kāi)發(fā)。通常GIS需要回答“我們?cè)谀膬骸被颉拔覀兊侥膬骸钡冗@類與地理位置相關(guān)的問(wèn)題,但目前QGIS還只支持針對(duì)空間數(shù)據(jù)的屬性搜索功能,而不具備針對(duì)用戶自定義的關(guān)系型數(shù)據(jù)表格的屬性搜索功能。由于QGIS具有支持插件模式的優(yōu)點(diǎn),因此可以通過(guò)地名搜索插件來(lái)擴(kuò)展QGIS在地名搜索方面的功能。本文將利用常見(jiàn)地名數(shù)據(jù)庫(kù),闡述在PyQt環(huán)境下利用Python語(yǔ)言來(lái)開(kāi)發(fā)QGIS地名搜索插件的方法。
近年來(lái),信息技術(shù)發(fā)展迅猛,信息網(wǎng)絡(luò)廣泛普及,傳統(tǒng)的地名服務(wù)管理模式已不能滿足社會(huì)需求。建立和完善地名數(shù)據(jù)庫(kù),開(kāi)展地名信息化服務(wù),已成為地名工作的必然選擇和發(fā)展方向。一般而言,地名地址數(shù)據(jù)庫(kù)包括水系、陸地地形、行政區(qū)域及其他區(qū)域、居民點(diǎn),以及具有地名意義的交通運(yùn)輸設(shè)施,具有地名意義的水利、電力、電信設(shè)施,具有地名意義的紀(jì)念地、旅游勝地,具有地名意義的建筑物、構(gòu)筑物,具有地名意義的單位9大類數(shù)據(jù)。其數(shù)據(jù)庫(kù)表結(jié)構(gòu)含有地名地址名稱、地理坐標(biāo)X值、地理坐標(biāo)Y值、地名地址類型、所屬行政區(qū)劃等基本字段和其他擴(kuò)充信息。
隨著社會(huì)各部門信息化水平的提高,各種業(yè)務(wù)數(shù)據(jù)、統(tǒng)計(jì)數(shù)據(jù)及其他數(shù)據(jù)急劇增加,大多數(shù)的業(yè)務(wù)數(shù)據(jù)與地理位置都有著緊密的聯(lián)系,而通過(guò)GIS實(shí)現(xiàn)對(duì)業(yè)務(wù)數(shù)據(jù)的管理也逐漸成為一種被大家認(rèn)同的趨勢(shì)。地名查詢定位是GIS應(yīng)用中的一個(gè)常用功能,它借助于基礎(chǔ)地名地址庫(kù)中的位置信息,采用模糊匹配的地名查詢方法,實(shí)現(xiàn)地名數(shù)據(jù)空間位置與業(yè)務(wù)數(shù)據(jù)的關(guān)聯(lián)。因此,本文的地名搜索插件主要包括兩大功能:
1)根據(jù)給定的地名查詢條件,從地名地址數(shù)據(jù)庫(kù)中篩選出符合條件的地名并顯示輸出。
2)根據(jù)所查詢地名所對(duì)應(yīng)的地理坐標(biāo)實(shí)現(xiàn)在地圖上的定位。
QGIS是開(kāi)源桌面 GIS,除了核心功能以外,QGIS還支持插件擴(kuò)展。核心插件(core plugins)由QGIS開(kāi)發(fā)組維護(hù),包含在所有的QGIS發(fā)行版中;外部插件(external plugins)由愛(ài)好者們開(kāi)發(fā),由核心插件plugin installer加載。QGIS支持C++和Python兩種語(yǔ)言進(jìn)行插件開(kāi)發(fā)。由于Python是一種簡(jiǎn)單易學(xué)、功能強(qiáng)大的編程語(yǔ)言,有高效率的高層數(shù)據(jù)結(jié)構(gòu),能簡(jiǎn)單而有效地實(shí)現(xiàn)面向?qū)ο缶幊?,且Python簡(jiǎn)潔的語(yǔ)法和對(duì)動(dòng)態(tài)輸入的支持,再加上解釋性語(yǔ)言的本質(zhì),使得它在大多數(shù)平臺(tái)上的很多領(lǐng)域都是一個(gè)理想的腳本語(yǔ)言,特別適用于快速的應(yīng)用程序開(kāi)發(fā)[2],所以本文選擇采用 Python和 PyQt進(jìn)行地名搜索插件的開(kāi)發(fā)。
QGIS的插件開(kāi)發(fā)通常需要經(jīng)過(guò)環(huán)境配置、Qt GUI資源準(zhǔn)備、代碼編寫(xiě)和插件測(cè)試4個(gè)環(huán)節(jié),本文將詳細(xì)介紹各環(huán)節(jié)的具體內(nèi)容。
首先,為創(chuàng)建GUI做好準(zhǔn)備工作,即先進(jìn)行開(kāi)發(fā)環(huán)境的配置工作,包括在Windows操作系統(tǒng)下安裝Python2.5.1、Pywin32-216.win32-Py2.5、PyQt-Py2.5-gpl-4.7.3-1、QGIS-OSGeo4W-1.7.0-b55a00e73-Setup等QGIS、Python、Qt、PyQt開(kāi)發(fā)工具;然后準(zhǔn)備測(cè)試地名地址數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)名為allpoint.mdb,地名地址表含地名、Coor_X、Coor_Y)和相應(yīng)的測(cè)試數(shù)據(jù)。
1)編譯工具圖標(biāo)。根據(jù)工具圖標(biāo),使用PyQt的資源編譯器pyrrc4命令行pyrcc4-o resources.py resource.qrc,生成描述資源的 Python文件(resources.py)。
2)設(shè)計(jì)對(duì)話框。使用Qt Designer創(chuàng)建對(duì)話框和主窗口中的輸入框、文字標(biāo)簽、表格及命令按鈕等部件,并定義它們的大小、位置等屬性,最后使用PyQt的pyuic4命令行將對(duì)話框轉(zhuǎn)換到Python文件(ui_searchbypoi.py)。
3)創(chuàng)建初始化文件(__init__.py)和實(shí)現(xiàn)類文件(searchbypoidialog.py,searchbypoi_gui.py,searchbypoi.py)。所有文件結(jié)構(gòu)如圖1所示。
圖1 開(kāi)發(fā)文件列表
4)設(shè)置插件存放路徑。在Window的C:Program FilesQuantum GISWroclawappsqgispythonplugins或 C:Documents and Settings(user).qgispythonplugins路徑下創(chuàng)建一個(gè)子目錄(searchbypoi),將上述所有創(chuàng)建的文件拷貝至所創(chuàng)建的子目錄下。QGIS將Python插件和C++插件一同列在插件管理器中,方便QGIS啟動(dòng)后由核心插件Plugin Installer自動(dòng)加載。
在各實(shí)現(xiàn)類文件中編寫(xiě)代碼,其中主要功能由searchbypoi_gui.py的兩個(gè)內(nèi)部函數(shù)(SearchFromDB和LocateMap)實(shí)現(xiàn)。示例代碼如下
完成代碼編寫(xiě)后,可以關(guān)閉并重新啟動(dòng)QGIS,導(dǎo)入筆者開(kāi)發(fā)的插件,并輸入查詢字符串進(jìn)行測(cè)試,查詢定位效果截屏如圖2所示。同時(shí),也可以將開(kāi)發(fā)好的插件發(fā)布到QGIS插件庫(kù)中,使其成為QGIS資源庫(kù)的一部分,為開(kāi)源GIS貢獻(xiàn)自己的一部分力量。
圖2 地名搜索與定位
不同于商業(yè)GIS軟件,開(kāi)源GIS軟件無(wú)需背負(fù)數(shù)據(jù)兼容、易用性、軟件成本等問(wèn)題的包袱,開(kāi)發(fā)者能夠?qū)⒕杏诠δ艿拈_(kāi)發(fā)。因此,開(kāi)源GIS軟件功能普遍很強(qiáng),技術(shù)也非常先進(jìn),其背后是來(lái)自技術(shù)狂熱者和學(xué)院研究者的大力支持。QGIS以其擁有的幾十個(gè)核心插件和大量的外部插件,為各個(gè)領(lǐng)域的地理信息應(yīng)用提供了強(qiáng)大的支持。本文在PyQt環(huán)境下,利用Python作為開(kāi)發(fā)語(yǔ)言,通過(guò)訪問(wèn)地名地址數(shù)據(jù)庫(kù),開(kāi)發(fā)了一個(gè)簡(jiǎn)單實(shí)用的地名搜索插件,是對(duì)我國(guó)開(kāi)源GIS開(kāi)發(fā)應(yīng)用層次與國(guó)際接軌的一次探索,同時(shí)也對(duì)開(kāi)發(fā)人員采用此技術(shù)路線,改進(jìn)地名搜索算法或利用地名搜索服務(wù)來(lái)實(shí)現(xiàn)類似功能提供了參考解決方案。
[1]SHERMAN G E.Desktop GIS:Mapping the Planet with Open Source Tools[M].USA:Pragmatic Bookshelf,2008.
[2]SUMMERFIELD M.Rapid GUI Programming with Python and Qt[M].USA:Prentice Hall,2007.
[3]陳杰.GIS的開(kāi)源夜宴[J].軟件世界,2006(20):38.