何文娜
(吉林體育學院,吉林 長春 130022)
公共體育場地指由政府主導或直接提供的可供居民大眾進行體育活動的場地[1]。隨著人們生活水平提升,國家全民健身計劃推行,體育場地供給不足與大眾健身需求日益增強產生供需矛盾[2]。自2002年以來,國內外學者對公共體育資源格局研究迅速增多,并取得一定的研究成果[3-5]。通過閱讀相關論文發(fā)現研究人員多采用文獻法[6-7],導致定性研究結果難以精確反映真實情況。因為缺少體育空間數據而鮮用GIS分析方法研究空間格局等,對政府科學決策、科學研究、公眾健身等均帶來不便。為了更好地理解和分析長春市城區(qū)體育資源空間分布特征及資源配置情況,本文研究一種從百度地圖中抓取體育場地分布信息以構建空間數據庫的方法,將為后續(xù)體育資源分析打下數據基礎。
由于當前百度已禁止行政區(qū)名稱或按規(guī)則矩形區(qū)域抓取POI數據,故按照行政區(qū)名稱抓取的POI數據只返回少量隨機數據[8],難以保證采集數據的完整性及數據質量。但百度API 支持不規(guī)則圖形的抓取,可基于云計算[9]、GIS 自研算法等完成數據采集任務,以構建長春市城區(qū)體育場空間數據。圖1為構建長春市城區(qū)體育場地空間數據庫總體流程。
圖1 長春市城區(qū)體育場地空間數據庫建設流程
(1)合并行政區(qū):把ArcGIS 格式的2021 年長春市城區(qū)的行政區(qū)合并成一個大的不規(guī)則多邊形。
(2)創(chuàng)建網格:以第一步合并形成的長春市城區(qū)多邊形為數據源,創(chuàng)建規(guī)則的小正方形(如邊長1公里或500米)。
(3)篩選網格:因創(chuàng)建網格默認采用多邊形的外包絡線,行政區(qū)不規(guī)則邊界與外包絡線之間可能存在空隙,則建網格時此空隙亦由小單元格生成。采用第一步合并結果作為空間篩選條件,只選中被其包含或與其邊界相交的小方格。
(4)輸出選中網格:將選中的所有小方格(包含或相交)輸出到系統(tǒng)外,單位保存成ArcGIS Shapefile文件。
(5)生成重心:將第4步執(zhí)行結果作為數據源,批量計算每一個小方格的重點,得到一個重心點圖層。
(6)生成緩沖區(qū):以第5步的重心點圖層作為輸入,按指定半徑生成緩沖區(qū),保證所有緩沖區(qū)的區(qū)域融合后可全覆蓋整個長春市城區(qū)。
(7)按緩沖區(qū)抓?。罕闅v每一個緩沖區(qū)要素,用當前緩沖區(qū)、關鍵詞(如體育場地)作為搜索參數,發(fā)給百度API 采集指令,百度云返回符合當前抓取條件的數據。
(8)解析數據:對百度返回的數據進行解析,將數據流中的數據按照名稱、坐標(經度、緯度)、地址、所在區(qū)、所在市、所在省等分別解算,解析結果臨時存于內存對象中。
(9)保存數據:保存前根據編號及名稱判斷當前要保存的數據是否已存在,若已存在則跳過,若不存在則保存到本地文件中,從而保證了抓取數據的唯一性。
(10)生成圖層:使用第9步生成的體育數據文件作為數據源,采用空間數據生成工具(如ArcMap),使用經緯度空間數據生成點,同時將名稱、地址等數據項同步存入屬性表,最后生成ArcGIS Shapefile格式的體育場地點圖層。
(11)創(chuàng)建空間數據庫:在開源空間數據庫服務器(如PostGIS)中創(chuàng)建專用數據庫,將體育場地點圖層數據用導入/導出工具等存入,形成長春市城區(qū)體育場地空間數據庫。
使用ArcMap 軟件打開保存長春市城區(qū)的ArcGIS 數據(如Changchun.shp),在編輯狀態(tài)下選擇城區(qū)所有面要素,使用合并工具將它們合成一個要素,將合并后要素存成shapefile文件輸出(如Changchun_Merged.shp)。圖2中(a)為長春市城區(qū)原始數據、(b)為城區(qū)合并后結果。
圖2 長春市城區(qū)合并
(1)選擇長春市城區(qū)合并面要素為模板邊界范圍,自動提取圖層最小包絡矩形范圍。
(2)指定生成的網格要素類保存位置及名稱(如Changchun_FishNet.shp)。
(3)打開魚網工具(Fishnet)并設置創(chuàng)建魚網的參數:設置行列數各100,單元的高度和寬度設為0,則會自動將其分割成100 行、100 列共10000 個單元格,自動計算單元格的高度和寬度。
(4)輸出幾何類型設為面(POLYGON),且取消創(chuàng)建標簽點復選框。
(5)確認后將自動生成并輸出存有10000個單元格的面圖層。
圖3(a)顯示了創(chuàng)建魚網的參數設置窗口,(b)為創(chuàng)建的10000個小網格覆蓋長春市城區(qū)效果。
圖3 創(chuàng)建網格
因長春市城區(qū)邊界外的空余區(qū)域不在城區(qū)范圍內,可將這些網格移除以提高抓取效率與精度。使用ArcMap的位置選擇(Select By Location)工具,設置被選擇的目標圖層為生成的網格(如Changchun_FishNet.shp),位置源圖層選擇長春市合并城區(qū)(Changchun_Merged.shp),為目標圖層要素設置的空間選擇方法為“與源圖層要素相交”,即可選中與長春市城區(qū)邊界相交及被其包含的所有小網格(如圖4(a)),圖4(b)展示了選中要素導出結果。
圖4 選擇長春市城區(qū)網格
使用ArcMap 數據管理工具中要素轉點(Feature to Point)工具,它以篩選后的長春市城區(qū)網格作為輸入,批量計算每一個網格的重心到一點圖層中(如Changchun_Fish-Net_Circle.shp)。圖5(a)顯示了長春市城區(qū)邊界與所有網格重心。
重心點圖層作為ArcMap 的緩沖區(qū)工具(Buffer)的輸入要素,設置緩沖區(qū)半徑(如500 米),指定輸出路徑及圖層名(如Changchun_FishNet_CircleBuffer.shp),即可生成用于提取長春市城區(qū)體育場地的緩沖區(qū)(如圖5(b))。
圖5 長春市城區(qū)網格重心、緩沖區(qū)
采用Python 語言編寫抓取代碼,將搜索關鍵詞數組、格網緩沖區(qū)等作為輸入參數,調用百度云API 接口,對返回的流式數據內容進行字符轉換、格式解析并保存在Excel 中。使用ArcMap將Excel中保存的體育空間數據加載到地圖時,指定正確的經度、緯度及投影參數等(如WGS1984),再將顯示結果保存為點圖層(如圖6)。最后將保存長春市城區(qū)體育場地位置數據圖層導入到PostGIS 數據庫中,形成長春市城區(qū)體育場地空間數據庫。
圖6 長春市城區(qū)體育場地空間數據結果
(1)受百度對POI 數據抓取的限制,本文提出一種采用非規(guī)則圖形采集并構建長春市城區(qū)體育場地空間數據庫的技術流程,主要包括合并行政區(qū)、創(chuàng)建網格、篩選網格、生成重心、生成緩沖區(qū)、按緩沖區(qū)抓取、保存數據、生成圖層、導入空間數據庫等環(huán)節(jié);
(2)使用Python語言編程實現了具體抓取算法,通過調用百度API實現了長春市城區(qū)體育場地空間數據的采集;
(3)將采集的體育場地位置數據導入到PostGIS數據庫中,初步構建了長春市城區(qū)體育場地空間數據庫,為后續(xù)開展體育資源空間分析等打下數據基礎。