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