楊瑞杰,劉海硯,郭文月,李 靜,張 暉
(1.信息工程大學 地理空間信息學院,河南 鄭州 450001;2. 96633部隊,北京 100096)
全球POI在線抽取方法研究
楊瑞杰1,劉海硯1,郭文月1,李 靜1,張 暉2
(1.信息工程大學 地理空間信息學院,河南 鄭州 450001;2. 96633部隊,北京 100096)

對從互聯網上抽取全球地理興趣點進行研究,國內對以百度地圖為基礎的POI抽取方法進行探討,國外對從OpenStreetMap數據中抽取POI數據進行了分析,分別針對這兩類數據的POI抽取提出較為高效、準確的方法,確保提取的POI質量,實現了全球POI的快速在線抽取。
POI;抽取;互聯網;OSM;百度地圖
POI(point of interest,興趣點)在地理空間信息數據中用點要素表示,它通常代表一類真實的地理實體。POI主要指與人們日常生活中相關的地點,如醫院、賓館、餐飲、銀行、景點和地標等,在智能交通、應急指揮等各類LBS服務領域發揮著重要作用[1]。傳統的POI獲取方式需要投入大量人力及設備進行“掃街式”采集,這一采集方式具有獲取方式復雜、一次獲取的數據量較小、更新周期長、人力物力耗費高等特點。隨著國家經濟、軍事、環境等全球化的發展,對全球地理信息數據的需求也越來越強烈。POI數據也不例外,如何將POI信息從互聯網中抽取出來,提升POI數據的質量,是空間領域相關研究者的研究熱點之一。
針對獲取全球高質量的POI數據面臨的問題,提出了從互聯網上抽取全球興趣點的的一種方法。基本思想如下:互聯網信息冗雜,但地圖相關網站分類明確,國內百度地圖擁有豐富的POI資源,并且提供了較為完善的開發接口,國外開源的地圖OSM(open street map,開放街道地圖)數據完全開放,并且在歐洲等地區數據豐富,因此,國內選取百度地圖,國外選擇OSM分別作為POI提取數據源,針對兩種數據源的數據格式和開放程度制訂了不同的抽取技術方案,百度地圖POI數據的獲取主要是利用百度地圖API逐坐標進行爬取,OSM數據雖然完全開放,但數據格式常用矢量格式不同,數據轉換是從OSM中提取POI的關鍵。
1.1 百度地圖與百度地圖JavaScript API
百度地圖作為國內的主要互聯網商業地圖提供者之一,其POI的豐富程度與其他地圖相比要更加豐富。例如以鄭州站為中心,以酒店為關鍵詞搜索鄭州站周圍1 km范圍的的酒店類POI信息,百度地圖返回POI信息445條,國內另一知名互聯網地圖商返回POI信息271條。
百度地圖具有豐富的POI信息,但數據是非開放的,和現在大部分網絡地圖一樣都是采用切片傳輸在瀏覽器端顯示,無法直接從百度地圖上獲取POI點要素的矢量數據。不過百度地圖針對開發者提供了適用于各種終端支持HTML5特性的地圖開發,因此可以利用百度地圖JavaScript API采用適當方法來獲取百度地圖的POI信息[2]。
1.2 抽取方法
抽取百度地圖POI信息主要是利用了百度地圖JavaScript API的服務類接口,服務類主要提供LBS相關檢索和服務。首先,需要確定抽取POI區域坐標范圍,根據坐標范圍設定步長逐坐標指定關鍵詞或不指定關鍵詞檢索相關POI,獲取返回的POI信息。百度地圖POI獲取流程如圖1(黃色為關鍵技術)。
本方法的關鍵是逐坐標進行檢索,首先設定合適的坐標檢索步長,步長設置過大可能導致檢索結果缺失;步長設置過小可能導致檢索點密度過大致使POI提取效率低下,具體根據實驗區域不同設置合理的步長。用鼠標繪制出POI抽取區域,利用百度地圖的繪圖接口獲取抽取區域多邊形邊界坐標,根據邊界坐標和設定步長計算得出檢索點數組。得到檢索點數組后,通常使用兩種方法獲得區域內的POI信息:一種是利用百度地圖的Geocoder類接口逐一獲取檢索點 的GeocoderResult的surroundingPois,Geocoder類在用戶進行地址解析的同時返回該點附近的POI信息,其輸入參數僅為一個檢索中心點坐標;另一種是利用百度地圖的LocalSearch類并且指定關鍵詞逐一獲取檢索點的LocalResult,LocalSearch用于位置檢索、周邊檢索和范圍檢索,其輸入參數為檢索POI關鍵詞和檢索點中心坐標,此方法的關鍵詞依據百度的POI分類分別設置為“美食”、“酒店”、“休閑娛樂”、“交通”、“生活服務”。兩種方法的返回結果都為LocalResultPoi類,但前者返回的結果被百度地圖進行了刪減,只保留了POI名字、坐標和所在城市信息;后者返回的結果則是完整的LocalResultPoi類結構,結構如表1所示[2]。

圖1 百度地圖POI獲取流程

表1 完整的LocalResultPOI數據結構表
1.3 結果對比
依據上述方法,建立了一個國內地理興趣點抽取的實驗系統,此系統基于百度地圖JavaScript API,主要通過地圖界面層對地圖進行基本操作并繪制POI抽取區域,工具層根據所選區域對該區域POI進行抽取并保存到Excel文件中。分別使用百度地圖JavaScript API 的Geocoder類和LocalSearch類以鄭州市為實驗區域進行POI抽取,結果如表2(部分),可以發現方法一所獲POI數據只有POI名稱和坐標信息,而方法二所獲POI數據信息較方法一更為豐富,包含了電話、詳情頁網站、 POI類型信息等,如表3所示(部分)。

表2 方法一抽取的POI結果

表3 方法二抽取的POI結果
2.1 OSM與OSM數據
志愿者地理信息(VGI)在GIS領域一直受到關注。開放街道地圖(OSM)就是VGI全球用戶參與的一個很好的例子。OSM旨在建立一個任何人都可以編輯的全球地理數據庫,該項目具有很高的社會價值和使用價值。OSM由Steve Coast在2004年7月始創,是一種典型的志愿者地理信息。近年來,OSM數據量增長迅速,截止2014-03-01,OSM數據量的總體情況:GPS數據點總共3 829 201 844個;節點數量2 223 977 668個;路徑數量219 537 496個;關系數量2 406 517條,參與編輯的總用戶數量1 528 868 個[4]。由于OSM是一個完全自由開放的網絡地圖協作計劃,因此對OSM的數據質量和有效性評價就成了一個至關重要的問題。Alex Mauer于2008年對OSM和Google地圖上的196個國家或地區的首府數據詳細程度比較,認為OSM數據略優于Google,在歐洲OSM勝于Google,在亞洲和非洲OSM的覆蓋率略高于Google,而在南美與北美洲OSM的覆蓋程度則落后于Google很多,在大洋洲Google略勝于OSM[3-5]。由于Google和OSM數據都在持續穩定地增長,因此目前二者覆蓋的情況還需要重新評估,但從其他相關研究可以得到的結論是在覆蓋程度和準確性上OSM和Google不相上下,數據的完整性、專題準確性和傳統矢量數據源以及Google Maps相比則相差甚遠[6]。但是重要的是OSM數據完全開源,可以作為境外數據的一個重要來源。
OpenStreetMap中的地理實體(例如道路或建筑物)用其基本的數據結構(node、 way、 relation)附加標簽(tag)來描述,通過XML(可擴展性標記語言)來存儲數據。每個標簽描述了node、 way和relation所代表的地理實體的地理屬性。OpenStreetMap的自由標簽系統可以不受限制地描述每個要素的屬性。OSM組織確定某些鍵和值的組合為最常用的標簽,并以其充當非正式的標準[7]。但是,用戶也可以自由創建新的標簽,以提高地理實體屬性的詳細程度或描述以前未出現過的地理實體的屬性。OSM將地理實體分為31個要素類(如圖2 A-Z),每個類下邊又根據標簽的key和value分為若干小類。
2.2 OSM數據轉換為POI點要素方法研究
OSM的基本數據結構有node、way、relation,node中有一部分表示的是點要素,另一部分則表示way中的節點;way中有一部分表示線要素,另一部分閉合的way則表示面要素,而relation則描述不同node或way之間的聯系,而只有node中表示點要素和way中表示面要素的name值不為空的這部分才是要抽取的POI信息。node數據結構如下:


圖2 OSM要素分類
OSM的數據結構顯然與常見的以點、線、面作為基本要素的數據結構不同,從中抽取出POI要素的一種思路是直接將OSM數據轉換為常用的SHP格式,然后將SHP格式中的點要素作為POI要素;另一種思路則是通過OSM的標簽中的key和value直接提取出符合要求的要素信息。
第一種思路的實現較為簡單,首先利用ArcGIS_ Editor_OSM工具或第三方工具將獲取的OSM數據轉換為點、線、面要素的SHP格式,然后直接將獲取的點要素作為提取到的POI。數據在轉換過程中,由于數據定義等各方面的差異會導致數據缺失,此外轉換過程中不僅要進行點要素轉換,而且需要線要素轉換、面要素轉換,但只有點要素是最后所需要提取的POI要素,所以該方法存在大量冗余操作,不利于大量數據的處理。
第一種思路存在種種弊端,不是從OSM的數據中提取POI的最佳方法。不過根據OSM的數據結構特點可以發現POI信息其實就隱藏在OSM的標簽結構中的key和value中,OSM將地理實體分為28個要素類,每個類下邊又根據標簽的key和value分為若干小類,因此根據不同的key和value可以確定該要素是否屬于POI,并且可以確定所屬的POI類別[8]。首先,建立一個不同key和value對應的POI分類的模板,確定需要提取的要素與類別。然后,對數據中所有要素標簽中的key和value進行遍歷,并與上述建立的模板進行匹配,滿足匹配條件則保存該要素的所有key和value及其坐標,最終實現對整個數據的POI提取。標簽對應分類模板如下(“=”前為key的值,“=”后為value的值,后邊數字代表分類編號):
2.3 抽取實驗結果
根據上一節的思路,使用Java編程語言,實現第二種思路,模板使用上節所述模板,分別以中國臺灣地區OSM的PBF格式(OSM數據的壓縮格式)最新(2015-10-06)數據(38.77 MB)和Albania 地區OSM的PBF格式最新(2015-10-06)數據(15.24 MB)作為實驗區域,進行POI抽取。其中中國臺灣地區抽取到POI數據70 758條,用時9 306 ms;Albania 地區抽取到POI數據5 252條,用時3 850 ms,結果如表4、5,分別獲取到了POI的名稱、OSMID、坐標、類別等屬性信息。

表4 中國臺灣地區OSM抽取POI結果

表5 Albania地區OSM抽取POI結果(部分)
從百度地圖和OSM上抽取POI數據的相關方法,該方法實現了從百度地圖上獲取指定區域范圍的POI名稱、坐標及其他屬性信息;從OSM上快速、高效地獲取相關地區POI坐標及分類信息,提供了一套全球興趣點數據在線抽取的解決方案,為實際應用中POI的快速獲取提供了有力的保障。
[1] 陳瑞.基于多源POI數據匹配融合方法及研究[D].蘭州:蘭州大學,2014
[2] 百度地圖.百度地圖JS開發文檔 [EB/OL].[2015-09-05], http://lbsyun.baidu.com/index.php?title=jspopular
[3] 陳舒燕.基于OpenStreetMap的出行可達性分析與實現[D].上海:上海師范大學,2010
[4] Open Street Map.Open Street Map Stats Report[EB/OL]. [2014-03-01],http://www.openstr-eetmap.org/stats/data_stats. html
[5] MAUER A.Open Street Map vs.Google/Tele Atlas Coverage Street[EB/OL].[2008-12-12],http://blog.dc.esri. com/2008/12/12/Openstreetmap-vs-Googleteleatlas-Street-Coverage/
[6] HAKLAY M, WERBER P.Open Street Map:User-Generated Street Maps [J].Pervasive Computing,2008,7(4):8-12
[7] Open Street Map. Map Features-Primary Features [EB/OL]. [2015-10-30],http://wiki. openstreetmap.org/wiki/Map_ Features#Primary_Features
[8] MORB Z. OsmPoisPbf[EB/OL].[2015-10-30],https://github. com/MorbZ/OsmPoisPbf
P208
B
1672-4623(2017)02-0041-04
10.3969/j.issn.1672-4623.2017.02.013
2016-06-12。
項目來源:國家自然科學基金資助項目(41501446);地理信息工程國家重點實驗室開放基金資助項目(SKLGIE-M-4-3)。
楊瑞杰,碩士研究生,主要從事數字地圖制圖、網絡地理數據獲取與挖掘相關研究。