陳永松,羅定福
(廣東松山職業(yè)技術(shù)學(xué)院計(jì)算機(jī)與信息工程學(xué)院,廣東 韶關(guān) 512126)
近年來,休閑農(nóng)業(yè)空間布局成為研究熱點(diǎn),但其面臨數(shù)據(jù)采集困難的問題。百度、高德等開放地圖提供了海量空間數(shù)據(jù),借助開放地圖進(jìn)行空間數(shù)據(jù)采集可起到事半功倍的效果[1]。
本文通過百度地圖API 結(jié)合Scrapy 數(shù)據(jù)采集技術(shù),獲取POI、電子地圖使用痕跡為數(shù)據(jù)源,并進(jìn)行坐標(biāo)轉(zhuǎn)換,為休閑農(nóng)業(yè)空間布局研究提供需要的數(shù)據(jù)。
百度地圖API是一套為開發(fā)者提供的基于百度地圖的應(yīng)用程序接口,利用百度區(qū)域檢索API 可以方便的獲取各類地點(diǎn)的具體信息。百度區(qū)域檢索API接口為https://api.map.baidu.com/place/v2/search。
主要請求參數(shù)如下:
query:檢索關(guān)鍵字,tag:標(biāo)簽,region:檢索區(qū)域,city_limit:為true 時僅返回檢索區(qū)域數(shù)據(jù),output:為json 時返回json 格式,ak:百度ak 號,scope:為2 時返回詳細(xì)信息,page_size:返回記錄數(shù),page_num:分頁頁碼。
主要返回參數(shù)如下:
name:名稱,location:經(jīng)緯度坐標(biāo),address:地址信息,province:所屬省份,city:所屬城市,area:所屬區(qū)縣,uid:POI唯一標(biāo)示,tag:標(biāo)簽,overall_rating:總體評分,service_rating:服務(wù)評分,facility_rating:星級評分,hygiene_rating:衛(wèi)生評分,comment_num:評論數(shù),checkin_num:簽到數(shù)。
國際電子地圖使用WGS-84坐標(biāo)系統(tǒng),國內(nèi)電子地圖使用GCJ-02 或BD09 坐標(biāo)系統(tǒng),不同的坐標(biāo)系之間可能有幾十到幾百米的偏移,所以在地圖上繪制矢量圖形、做地理數(shù)據(jù)可視化等,需要修正不同坐標(biāo)系之間的偏差,即需要對不同的地理坐標(biāo)進(jìn)行轉(zhuǎn)換。
百度API 接口可以將其他地理坐標(biāo)系統(tǒng)轉(zhuǎn)換為BD09,由于BD09 是百度坐標(biāo)系統(tǒng),因此可以認(rèn)為轉(zhuǎn)換是準(zhǔn)確的,但是百度API 沒有提供BD09 坐標(biāo)轉(zhuǎn)換為WGS-84坐標(biāo)功能。
可使用公式法或利用開源庫將BD09 坐標(biāo)轉(zhuǎn)換為WGS-84 坐標(biāo),其中公式法精度可達(dá)到10m 以內(nèi)[2]。地理坐標(biāo)轉(zhuǎn)換開源庫有Coordtransform 和Gcoord,為驗(yàn)證兩種開源庫的坐標(biāo)轉(zhuǎn)換精度并和公式法比較,利用百度區(qū)域檢索API接口檢索出韶關(guān)休閑農(nóng)業(yè)相關(guān)的BD09 坐標(biāo)3142 個,從中隨機(jī)提取300 個坐標(biāo),然后分別用Coordtransfor 和Gcoord 轉(zhuǎn)換為WGS-84 坐標(biāo),再用百度API接口轉(zhuǎn)換為BD09坐標(biāo),對轉(zhuǎn)換前后的BD09坐標(biāo)進(jìn)行比較,計(jì)算偏移量,結(jié)果如表1所示。
表1 coordtransform、Gcoord坐標(biāo)轉(zhuǎn)換精度對比表
通過對韶關(guān)市內(nèi)300 個隨機(jī)點(diǎn)進(jìn)行評價,兩個開源庫的精度都比公式法高,Coordtransform 坐標(biāo)轉(zhuǎn)換與原坐標(biāo)點(diǎn)距離的均值為1.16 米,而Gcoord 坐標(biāo)轉(zhuǎn)換與原坐標(biāo)點(diǎn)相差0.67 米,中位數(shù)、最大值也是Gcoord占優(yōu)。很明顯,在韶關(guān)市范圍內(nèi)Gcoord 的精度更高,因此后續(xù)的百度坐標(biāo)數(shù)據(jù)轉(zhuǎn)換使用Gcoord 開源庫進(jìn)行轉(zhuǎn)換。
為方便后期使用SQL 語句進(jìn)行數(shù)據(jù)處理,使用MySQL 數(shù)據(jù)庫存儲采集數(shù)據(jù),采集數(shù)據(jù)表包含主要字段及說明如表2所示。
表2 采集數(shù)據(jù)表主要字段及說明
由于Scrapy 框架批量獲取API 數(shù)據(jù)[3]和存儲數(shù)據(jù)[4]都比較方便,因此本文使用Scrapy 框架實(shí)現(xiàn)數(shù)據(jù)采集。
使用“scrapy startproject Baidu”創(chuàng)建名稱為Baidu的Scrapy項(xiàng)目,修改配置文件settings.py,進(jìn)行以下設(shè)置:
⑴配置ROBOTSTXT_OBEY 為False,拒絕遵守Robot協(xié)議;
⑵ 在谷歌瀏覽器中輸入about:version,如圖1所示,在DEFAULT_REQUEST_HEADERS 配置項(xiàng)中,配置'User-Agent'屬性為谷歌瀏覽器獲取的用戶代理代碼[5]。
圖1 谷歌瀏覽器“關(guān)于”頁面
修改items.py,在BaiduItem類中定義Scrapy字段,格式為:字段名=scrapy.Field(),其中字段名參考表2。
修改pipelines.py,定義BaiduMysqlPipeline 類,設(shè)置數(shù)據(jù)使用MySQL存儲,核心代碼如下:
修改settings.py,在ITEM_PIPELINES 配置項(xiàng)中,配置'Baidu.pipelines.BaiduMysqlPipeline'為200。
以采集韶關(guān)市農(nóng)莊、莊園數(shù)據(jù)為例,調(diào)用百度地圖API 服務(wù)[6],并使用Gcoord 開源庫,將百度BD09 坐標(biāo)轉(zhuǎn)換為WGS-84 坐標(biāo),實(shí)現(xiàn)數(shù)據(jù)采集。方法是定義
執(zhí)行Scrapy 項(xiàng)目之后,共采集韶關(guān)市農(nóng)莊、莊園記錄541條,為滿足數(shù)據(jù)處理要求,需要對數(shù)據(jù)進(jìn)行清洗、轉(zhuǎn)換。
數(shù)據(jù)清洗(Data Cleaning)是對數(shù)據(jù)進(jìn)行重新審查和校驗(yàn)的過程,目的在于刪除重復(fù)信息、糾正存在的錯誤,保證數(shù)據(jù)的一致性。通過對采集后的原始數(shù)據(jù)進(jìn)行審查和校驗(yàn),發(fā)現(xiàn)包含房地產(chǎn)、照相館、行政地標(biāo)、家居建材等干擾項(xiàng)和重復(fù)記錄,刪除之后,記錄數(shù)為521條。
數(shù)據(jù)轉(zhuǎn)換(Data Transfer),是將數(shù)據(jù)從一種表現(xiàn)形式變?yōu)榱硪环N表現(xiàn)形式的過程。本案例采集的數(shù)據(jù)格式為MySQL 數(shù)據(jù)表,無法滿足ArcMap 數(shù)據(jù)處理的要求,需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,轉(zhuǎn)換過程如下。
首先,從采集之后的MySQL 數(shù)據(jù)提取其中的經(jīng)緯度等數(shù)據(jù),形成多點(diǎn)geojson[7]如下:
然后,通過網(wǎng)站https://mapshaper.org/,將geojson 轉(zhuǎn)換為shapefile[8],得到ArcMap能處理的數(shù)據(jù)。
下面以分析韶關(guān)市人氣農(nóng)莊、莊園分布情況為例,檢驗(yàn)數(shù)據(jù)采集結(jié)果的有效性。首先,從shapefile 數(shù)據(jù)中篩選總體評分大于等于3 或評論數(shù)大于等于3 的數(shù)據(jù),結(jié)果共191 條記錄;其次,將數(shù)據(jù)導(dǎo)入ArcMap,得到韶關(guān)市人氣農(nóng)莊、莊園分布圖如圖2所示。從圖2可以得出初步結(jié)論,韶關(guān)市人氣農(nóng)莊、莊園主要分布在韶關(guān)市中心周邊,另一個聚集點(diǎn)是新豐縣大廣高速兩側(cè)。進(jìn)一步的,可采用最近鄰指數(shù)(Nearest Neighbor Index)、核密度函數(shù)等算法,分析人氣農(nóng)莊、莊園與城市人口、交通的依賴關(guān)系。
圖2 韶關(guān)市人氣農(nóng)莊、莊園分布圖
本文在分析百度地圖API和不同地理坐標(biāo)轉(zhuǎn)換開源庫精度的基礎(chǔ)上,結(jié)合Scrapy 框架技術(shù)、MySQL 存儲技術(shù),并使用Gcoord 開源庫地理坐標(biāo)轉(zhuǎn)換,實(shí)現(xiàn)韶關(guān)市農(nóng)莊、莊園空間數(shù)據(jù)采集,對采集數(shù)據(jù)結(jié)果進(jìn)行清洗、轉(zhuǎn)換,利用ArcMap 工具獲取分布圖,結(jié)果證明可滿足休閑農(nóng)業(yè)空間布局分析的需要。用同樣的方法可采集其他類型休閑農(nóng)業(yè)數(shù)據(jù)并進(jìn)行空間布局分析。