何琳++馬犇++李亞龍++張潔++李英杰
摘要:該研究基于Google Maps API的地址解析接口,通過導(dǎo)入地震應(yīng)急基礎(chǔ)數(shù)據(jù)庫屬性表中的名稱或地址字段,自動(dòng)匹配相應(yīng)空間位置,重點(diǎn)對(duì)同屬性數(shù)據(jù)對(duì)應(yīng)多個(gè)空間位置的篩選該技術(shù)難點(diǎn)進(jìn)行研究并開發(fā)軟件給予解決,從而實(shí)現(xiàn)應(yīng)急基礎(chǔ)數(shù)據(jù)庫屬性數(shù)據(jù)快速空間化的功能,同時(shí)提出基于Google Maps API的地址解析持久化方案,對(duì)生成空間數(shù)據(jù)的匹配度與精確性進(jìn)行研究,在數(shù)據(jù)的空間化應(yīng)用中取得了較好的效果。
關(guān)鍵詞:Google Maps API;地址解析;空間化
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)30-0010-03
Research and Implementation of Database Attributes Spatialization Based on Google Maps API
HE Lin, MA Ben, LI Ya-long, ZHANG Jie, LI Ying-jie
(Anhui Seismological Bureau, Hefei 230031, China)
Abstract: The research Based on the address parsing interface of Google Maps API. By importing the name or the address field of the attribute table in the earthquake emergency database, the attribute table can automatically match the corresponding spatial location. The research focused on the technical difficulties screening the same attribute table match the multiple spatial location to be solved through software development. And attribute table of emergency database can be quickly spatialized. It proposed the persistent program Based on the address parsing of Google Maps API, by researching the matching and accuracy, and achieved good results in the application.
Key words: Google Maps API; address parsing; spatialization
空間數(shù)據(jù)是地理信息系統(tǒng)的血液,GIS技術(shù)最重要的作用就是將屬性數(shù)據(jù)轉(zhuǎn)化成空間數(shù)據(jù),實(shí)現(xiàn)屬性數(shù)據(jù)的空間化表達(dá)。屬性數(shù)據(jù)空間化作為地學(xué)數(shù)據(jù)處理和地學(xué)數(shù)據(jù)產(chǎn)品加工的一種重要手段,已經(jīng)成為GIS領(lǐng)域的研究熱點(diǎn)之一。而對(duì)屬性數(shù)據(jù)的空間化也是一項(xiàng)比較艱巨的任務(wù),數(shù)據(jù)的空間化需要大量的人力和物力以及時(shí)間上的投資,地震應(yīng)急基礎(chǔ)數(shù)據(jù)庫數(shù)據(jù)更新任務(wù)量大,耗時(shí)耗力。本研究基于Google Maps API技術(shù)對(duì)Google Maps的地圖信息進(jìn)行地址解析,通過查找屬性數(shù)據(jù)來解析坐標(biāo)信息,從而實(shí)現(xiàn)屬性數(shù)據(jù)的空間化,更形象更直觀的表達(dá)出數(shù)據(jù)的位置和屬性,屬性數(shù)據(jù)的空間化將大大增強(qiáng)數(shù)據(jù)的使用效果。
1 Google Maps API技術(shù)介紹
API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),是軟件系統(tǒng)之間不同組成部分銜接的約定,目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件的用以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。API 的一個(gè)主要功能是提供通用功能集,程序員通過使用 API 函數(shù)開發(fā)應(yīng)用程序,從而可以避免編寫無用程序,以減輕編程任務(wù)。 API 同時(shí)也是一種中間件,為各種不同平臺(tái)提供數(shù)據(jù)共享。由于近年來軟件的規(guī)模日益龐大,常常需要把復(fù)雜的系統(tǒng)劃分成小的組成部分,因此應(yīng)用程序編程接口API的設(shè)計(jì)十分重要。
地圖API是一種通過JavaScript(或者其他編程語言)將網(wǎng)站上的地圖嵌入到自己網(wǎng)頁的應(yīng)用程序接口。它基于標(biāo)準(zhǔn)的Internet協(xié)議提供功能服務(wù),應(yīng)用系統(tǒng)可以很容易地通過標(biāo)準(zhǔn)協(xié)議訪問該功能。它提供了處理地圖和向地圖添加內(nèi)容的功能服務(wù),讓人們能夠在自己的網(wǎng)站上創(chuàng)建功能全面的地圖應(yīng)用。一般常用的地圖API主要有:Google地圖API、百度地圖API、51地圖API等等。
Google maps API是一種地圖API,可用于構(gòu)建完整、獨(dú)立的基于位置(Position)服務(wù)的應(yīng)用,包括與地圖(Map)相關(guān)的操控接口及與地理(Geo)相關(guān)的數(shù)據(jù)服務(wù)接口。
2 技術(shù)路線
通過Google Maps API,即Google Maps應(yīng)用程序編程接口,研制一套相關(guān)軟件對(duì)屬性數(shù)據(jù)進(jìn)行批量地址解析,實(shí)現(xiàn)通過導(dǎo)入屬性表自動(dòng)匹配空間屬性,并對(duì)生成相應(yīng)的空間數(shù)據(jù)進(jìn)行判斷、篩選處理,實(shí)現(xiàn)展示及入庫的功能。
3 地址解析功能
通過對(duì)Google Maps API接口技術(shù)的研究,我們了解到解析過程分為兩類:地址解析和地址反解析,兩者互為相對(duì)相反的過程。所謂地址解析,即地理編碼,是將地址(如“國家地震局”或“中國北京市海淀區(qū)復(fù)興路63號(hào)”)轉(zhuǎn)換為地理坐標(biāo)(如緯度39.90796和經(jīng)度 116.291027)的過程,我們也可以根據(jù)該地理坐標(biāo)放置標(biāo)記或定位地圖等。而地址反解析,即反向地理編碼(經(jīng)緯度地址查詢),是將地理坐標(biāo)(如緯度39.90796和經(jīng)度 116.291027)轉(zhuǎn)換為地址(如“中國北京市海淀區(qū)復(fù)興路63號(hào)”)的過程。endprint
Google Maps API 提供了地理編碼器類,用于動(dòng)態(tài)地對(duì)用戶輸入的地址或名稱進(jìn)行地理編碼,我們主要使用 google.maps.Geocoder 對(duì)象來訪問 Google Maps API 地理編碼服務(wù)。由于 Google Maps API 需要調(diào)用外部服務(wù)器,因此對(duì)地理編碼服務(wù)的訪問是異步進(jìn)行的。為此,需要傳遞一個(gè)回調(diào)方法,以便在請(qǐng)求完成時(shí)執(zhí)行,此回調(diào)方法將會(huì)對(duì)結(jié)果進(jìn)行處理。在實(shí)際過程中,地理編碼器可能返回多個(gè)結(jié)果,我們可以自行選擇返回的結(jié)果。地理編碼服務(wù)要求一個(gè)用于在檢索到地理編碼器的返回結(jié)果后執(zhí)行的回調(diào)方法,此回調(diào)應(yīng)依次傳遞兩個(gè)參數(shù),以分別存儲(chǔ) results 和 status 代碼。由于地理編碼器可能會(huì)返回多個(gè)條目,因此 GeocoderResults 對(duì)象常量是一個(gè)數(shù)組,里面包含有我們所需要的location(經(jīng)過地理編碼的緯度值和經(jīng)度值),我們會(huì)以 LatLng 對(duì)象(而非某種格式的字符串)的形式返回此位置。
通常Google Maps API的Geocoder對(duì)象并不只返回一個(gè)值,同時(shí)我們可以調(diào)用所有的返回值以及相關(guān)信息。但是通過研究我們發(fā)現(xiàn),在諸多返回值中,首選項(xiàng)的解析準(zhǔn)確度最高,且遠(yuǎn)遠(yuǎn)超過其他選項(xiàng)。因此,在進(jìn)行地址批量解析時(shí),我們?cè)O(shè)置首個(gè)返回值及其相關(guān)信息為地址解析結(jié)果。
4 地址批量解析
在實(shí)際過程中,通常會(huì)出現(xiàn)大批屬性數(shù)據(jù)需要同時(shí)轉(zhuǎn)換成空間數(shù)據(jù)的現(xiàn)象。在通過軟件來實(shí)現(xiàn)屬性數(shù)據(jù)解析經(jīng)緯度坐標(biāo)時(shí),單條數(shù)據(jù)的查找會(huì)消耗大量時(shí)間,效果等同于直接搜索地名點(diǎn)查詢經(jīng)緯度,效率大幅降低。如果能通過大量屬性數(shù)據(jù)的導(dǎo)入,依次處理這些數(shù)據(jù),得到其空間坐標(biāo)信息,會(huì)大大減少工作量,為工作人員提供方便。為此我們?cè)趩螚l數(shù)據(jù)導(dǎo)入獲取經(jīng)緯度的基礎(chǔ)上,引入批量解析,將屬性數(shù)據(jù)以數(shù)據(jù)表的形式導(dǎo)入到軟件,解析后再以txt文件方式顯示出需查詢屬性數(shù)據(jù)的經(jīng)緯度,并通過excel工具實(shí)現(xiàn)文件格式轉(zhuǎn)換,從而實(shí)現(xiàn)批量數(shù)據(jù)的屬性到空間的轉(zhuǎn)換,讓解析后的經(jīng)緯度信息滿足入庫的要求。
5 解析準(zhǔn)確度研究
在地址解析前,我們還得對(duì)數(shù)據(jù)進(jìn)行一定的研究和規(guī)范處理。一般情況下,我們對(duì)地址解析所使用的字段主要選取屬性數(shù)據(jù)的位置(location)和名稱(name)兩個(gè)字段,通過反復(fù)嘗試我們發(fā)現(xiàn),Google 地圖可供解析的名稱一般都是對(duì)需求的數(shù)據(jù)名稱有一定的要求。比如“合肥市第五十初級(jí)中學(xué)”,如果直接對(duì)其進(jìn)行解析,就會(huì)出現(xiàn)所定位的位置會(huì)由于找不到同地名點(diǎn),而被定位在合肥市政府所在區(qū)域 “中國安徽省合肥市蜀山區(qū)龍泉路”,位置和經(jīng)緯度都會(huì)出現(xiàn)不同程度的偏差,數(shù)據(jù)的準(zhǔn)確性得不到保證。如果我們對(duì)其名稱進(jìn)行規(guī)范化處理,命名改成更符合Google地圖能夠識(shí)別的“合肥市第五十中學(xué)”,則得出的解析結(jié)果是“中國安徽省合肥市蜀山區(qū)肥西路57號(hào)”,相應(yīng)的經(jīng)緯度也會(huì)發(fā)生較大的變化,通過驗(yàn)證發(fā)現(xiàn)后者結(jié)果是真實(shí)可靠的。同樣的情況下,對(duì)醫(yī)院數(shù)據(jù)進(jìn)行解析,如果“合肥市第三人民醫(yī)院”在收集數(shù)據(jù)時(shí)命名為“合肥市三院”,其實(shí)際位置“中國安徽省合肥市包河區(qū)望江東路76號(hào)-86號(hào)”則會(huì)被錯(cuò)誤的定位到“中國安徽省合肥市廬江縣103省道”,同樣得不到正確的結(jié)果。所以,我們?cè)趯?duì)其他類似數(shù)據(jù)進(jìn)行解析時(shí),應(yīng)避免Google地圖的錯(cuò)誤判斷,盡可能地使數(shù)據(jù)能夠被其識(shí)別,做到名稱完整且便于理解。對(duì)于位置(location)屬性,在地址很準(zhǔn)確的情況下,能直接定位到相關(guān)位置的門牌號(hào),但是位置在經(jīng)緯度上有所偏差,比如說在軟件中輸入“合肥市長江西路558號(hào)”,地址就會(huì)直接定位到安徽省地震局附近的長江西路主干道上,但是如果地址不準(zhǔn)確,比如地址“合肥市長潛路口”就會(huì)出現(xiàn)定位出現(xiàn)很大偏差,會(huì)直接定位到“中國合肥市蜀山區(qū)貴潛路口”,相應(yīng)的經(jīng)緯度也會(huì)出現(xiàn)很大的偏差。因此在對(duì)地址(location)進(jìn)行解析時(shí),要求數(shù)據(jù)準(zhǔn)確而又詳細(xì),這在數(shù)據(jù)收集時(shí)是不太可能的。在一般情況下,我們應(yīng)以名稱(name)解析為主,加以位置(location)解析作為輔助。
在不同區(qū)域范圍內(nèi)出現(xiàn)相同地名點(diǎn)的現(xiàn)象時(shí),可以通過限定區(qū)域的方法來實(shí)現(xiàn)區(qū)分,例如杏花村,可以通過限定池州市青陽縣,再對(duì)杏花村進(jìn)行地址解析;在同一區(qū)域內(nèi)出現(xiàn)相同地名點(diǎn)的情況時(shí),在數(shù)據(jù)錄入時(shí)對(duì)地區(qū)所屬ID以及所在地址進(jìn)行規(guī)范化處理,通過ID和地址匹配的方式來對(duì)同地名點(diǎn)的信息進(jìn)行解析和區(qū)分;另外,考慮引入其他方法收集數(shù)據(jù)的準(zhǔn)確信息,從而實(shí)現(xiàn)人機(jī)交互的方式進(jìn)行校正和更改。
在簡(jiǎn)化地名問題上,例如青龍滿族自治縣,簡(jiǎn)稱青龍縣,在兩者的匹配問題上,首先考慮在數(shù)據(jù)的規(guī)范上需要標(biāo)準(zhǔn)化,通過建立基礎(chǔ)數(shù)據(jù)地名庫和簡(jiǎn)稱庫的對(duì)應(yīng),實(shí)現(xiàn)基礎(chǔ)地名和簡(jiǎn)稱地名的相互對(duì)應(yīng),以便解決在同一地名點(diǎn)出現(xiàn)全稱和簡(jiǎn)稱的問題。
6 數(shù)據(jù)準(zhǔn)確性檢查
數(shù)據(jù)是技術(shù)系統(tǒng)的核心,是系統(tǒng)評(píng)估、決策、指揮功能得以實(shí)現(xiàn)的基礎(chǔ)。而數(shù)據(jù)質(zhì)量是數(shù)據(jù)之根本,決定數(shù)據(jù)是否發(fā)揮重要作用的關(guān)鍵,通常主要包括兩方面的內(nèi)容:數(shù)據(jù)的時(shí)效性和準(zhǔn)確性。由于本任務(wù)的地址解析基于即時(shí)調(diào)用Google服務(wù)器的數(shù)據(jù),與Google地圖數(shù)據(jù)是同步更新的。Google地圖一般的更新周期在18個(gè)月左右,大城市的數(shù)據(jù)將更新的更頻繁一些,能達(dá)到幾個(gè)月一次,并且地圖更新的時(shí)候會(huì)即時(shí)公布信息,這在一定程度上保證了解析數(shù)據(jù)的時(shí)效性,為數(shù)據(jù)充分發(fā)揮作用奠定了堅(jiān)實(shí)的基礎(chǔ)。
數(shù)據(jù)的準(zhǔn)確性是數(shù)據(jù)質(zhì)量在客觀真實(shí)性方面的體現(xiàn),地震應(yīng)急基礎(chǔ)數(shù)據(jù)的準(zhǔn)確性更是決定著震后災(zāi)害評(píng)估結(jié)果和指揮決策的正確性。在解析過程中我們進(jìn)行過抽樣數(shù)據(jù)的測(cè)試,通過名稱解析數(shù)據(jù)的準(zhǔn)確性在70%以上,通過精確地址解析數(shù)據(jù)的準(zhǔn)確性在90%以上,而解析不準(zhǔn)確的數(shù)據(jù)通常是由于解析名稱或地址與Google數(shù)據(jù)庫中數(shù)據(jù)匹配度不高造成的。地址批量解析技術(shù)實(shí)現(xiàn)了屬性數(shù)據(jù)快速空間化,但是如何判斷解析后的空間數(shù)據(jù)是否準(zhǔn)確,如何提高數(shù)據(jù)的準(zhǔn)確性,保證解析數(shù)據(jù)的真實(shí)可靠,一直是我們研究的重點(diǎn)。經(jīng)過多方面的研究和嘗試,我們覺得通過地圖定位結(jié)合返回地址值進(jìn)行核對(duì)的方式來保證解析數(shù)據(jù)準(zhǔn)確性更為簡(jiǎn)單有效、切實(shí)可行。endprint
在地址解析,即地理編碼的過程中,我們可以根據(jù)解析后的經(jīng)緯度坐標(biāo)放置標(biāo)記或定位地圖等。在軟件設(shè)計(jì)時(shí),任務(wù)組加入地圖定位模塊,并在主界面上得以直接顯示。通過點(diǎn)擊解析結(jié)果欄中的數(shù)據(jù),地圖將自動(dòng)定位到解析結(jié)果所在位置,我們則可通過縮放圖層來查看解析數(shù)據(jù)是否存在于所在位置,若存在,則認(rèn)為解析數(shù)據(jù)正確?;蚴峭ㄟ^地址進(jìn)行確認(rèn)位置,地址范圍內(nèi)有目標(biāo)地名點(diǎn),則認(rèn)為解析數(shù)據(jù)正確。比如解析“合肥和平創(chuàng)傷骨科醫(yī)院”,解析結(jié)果欄解析出經(jīng)緯度及地址等信息,點(diǎn)擊該條結(jié)果,右側(cè)小地圖則會(huì)自動(dòng)定位到該點(diǎn),我們通過放大圖層在定位坐標(biāo)附近顯示出目標(biāo)地名點(diǎn) “合肥和平創(chuàng)傷骨科醫(yī)院”。則我們判定該條解析結(jié)果正確。
同時(shí),我們?cè)趯?duì)屬性數(shù)據(jù)進(jìn)行地址解析的時(shí)候,通過解析后的經(jīng)緯度坐標(biāo)可以直接進(jìn)行地址反解析,并把解析后的相關(guān)信息返回,比如地址、郵編等,通過與屬性數(shù)據(jù)中的相關(guān)信息進(jìn)行核對(duì),進(jìn)而也可判斷解析數(shù)據(jù)的正確性。
地圖定位模塊的實(shí)現(xiàn),為數(shù)據(jù)地址解析過程中準(zhǔn)確性的判斷提供了一個(gè)切實(shí)有效的方法,顯著地提高了工作效率與工作質(zhì)量,確保了解析數(shù)據(jù)的真實(shí)可靠,為地震應(yīng)急基礎(chǔ)數(shù)據(jù)庫及其他相關(guān)數(shù)據(jù)庫建設(shè)的可靠性與準(zhǔn)確性提供幫助,為指揮技術(shù)系統(tǒng)的評(píng)估、決策、指揮功能方面起著重要的保障作用。但是,數(shù)據(jù)檢查又是一項(xiàng)復(fù)雜而又繁瑣的工作,目前只能通過地圖定位模塊對(duì)數(shù)據(jù)進(jìn)行逐條檢查,來判斷數(shù)據(jù)的正確性。
7 結(jié)束語
基于上述研究結(jié)果,我們基于Google Maps API接口開發(fā)了Google地圖經(jīng)緯度地址批量查詢軟件,該平臺(tái)使用簡(jiǎn)單方便,也便于后續(xù)相關(guān)應(yīng)用的拓展。
該軟件平臺(tái)實(shí)現(xiàn)的主要功能包括:通過輸入GPS/Google地圖經(jīng)緯度信息對(duì)解析地址進(jìn)行精確定位;通過輸入地址或名稱對(duì)經(jīng)緯度坐標(biāo)進(jìn)行批量解析;對(duì)地址解析結(jié)果進(jìn)行地圖定位,并能實(shí)現(xiàn)地圖的放大、縮小和移動(dòng);解析的同時(shí)返回地址值以做數(shù)據(jù)對(duì)比;批量導(dǎo)出解析數(shù)據(jù)及信息等。通過該軟件平臺(tái),實(shí)現(xiàn)了屬性數(shù)據(jù)的批量空間化,為地震應(yīng)急基礎(chǔ)數(shù)據(jù)庫及其他相關(guān)數(shù)據(jù)收集工作提供了切實(shí)服務(wù)。
在利用該平臺(tái)進(jìn)行屬性數(shù)據(jù)批量解析的過程中,通常會(huì)遇到不少解析結(jié)果不對(duì)的情況,我們通過研究Google Maps API數(shù)據(jù)庫的數(shù)據(jù)特征規(guī)范,制訂了一套地址批量解析方案:
第一步,若原始數(shù)據(jù)庫提供詳細(xì)地址(精確到門牌號(hào)),則由原始數(shù)據(jù)庫中批量提取地址段(location)粘貼至導(dǎo)入欄,導(dǎo)入任務(wù)并批量解析。根據(jù)右側(cè)定位地圖或者返回的地址值人工檢查解析數(shù)據(jù)的正確性,并將錯(cuò)誤的解析數(shù)據(jù)從庫中挑出來放入問題庫,正確的解析結(jié)果批量導(dǎo)出至原始數(shù)據(jù)庫。(若無詳細(xì)地址則直接進(jìn)入下一步)
第二步,由原始數(shù)據(jù)庫(問題庫)中批量提取名稱段(name),
粘貼至導(dǎo)入欄,導(dǎo)入任務(wù)并批量解析。繼續(xù)根據(jù)右側(cè)定位地圖或者返回的地址值人工檢查解析數(shù)據(jù)的正確性,并將錯(cuò)誤的解析數(shù)據(jù)從庫中挑出來放入問題庫,正確的解析結(jié)果批量導(dǎo)出至原始數(shù)據(jù)庫。
第三步,再將問題庫中的地名點(diǎn)前加行政區(qū)劃限定,并再次導(dǎo)入解析,同樣根據(jù)右側(cè)定位地圖或者返回的地址值人工檢查解析數(shù)據(jù)的正確性,將正確的解析結(jié)果批量導(dǎo)出至原始數(shù)據(jù)庫。
該方案的研究,解決了批量數(shù)據(jù)解析的正確性與可行性的問題。通過該方案批量處理后的數(shù)據(jù),大部分原始數(shù)據(jù)均可檢查正確后入庫,少部分無法正確解析的數(shù)據(jù)則大多屬于Google Maps API數(shù)據(jù)庫中未收錄的數(shù)據(jù),或是數(shù)據(jù)本身存在問題,需通過其他手段解析,此處不再作討論。
基于Google Maps API接口的Google地圖經(jīng)緯度地址批量查詢軟件平臺(tái)可直接通過本地網(wǎng)頁訪問提供在線解析服務(wù),整體界面簡(jiǎn)潔友好,易操作,較好地實(shí)現(xiàn)了各模塊功能的集成,使得軟件的架設(shè)更加簡(jiǎn)單,可移植性強(qiáng),并為后續(xù)的推廣應(yīng)用服務(wù)做好充分準(zhǔn)備。該平臺(tái)實(shí)現(xiàn)了地震應(yīng)急基礎(chǔ)屬性數(shù)據(jù)批量快速空間化,為地震應(yīng)急基礎(chǔ)數(shù)據(jù)庫各類空間數(shù)據(jù)的更新與完善提供了一種新的機(jī)制,更新方式快捷高效,更新周期短,并且大大減輕了數(shù)據(jù)收集的工作量。
參考文獻(xiàn):
[1] 江寬, 龔小鵬. Google API開發(fā)詳解[M]. 北京: 電子工業(yè)出版社, 2008.
[2] 李垠, 特木其勒, 劉可, 等. Google地圖在地震信息發(fā)布中的應(yīng)用[J]. 地震地磁觀測(cè)與研究, 2011(10).
[3] 劉欣, 滕志霞. 基于Google Maps API的交通信息系統(tǒng)平臺(tái)的研究[J]. 交通工程, 2011(6).
[4] 蘇娟. 基于Google Map API地震信息發(fā)布系統(tǒng)的研究與實(shí)踐ED2[D]. 北京: 首都師范大學(xué), 2009.endprint