張 鎮,李水平,張志遠
(1.武漢大學 遙感信息工程學院,湖北 武漢 430079;2.合肥工業大學 土木與水利工程學院,安徽 合肥 230009;3.中國科學院精密測量科學與技術創新研究院 大地測量與地球動力學國家重點實驗室,湖北 武漢 430077;4.水利部信息中心,北京 100053)
遙感技術是現代信息技術發展的重要成果之一,是一門新興實用的、先進的、不斷發展的空間探測技術[1-3];而遙感影像是用戶與遙感技術研究、應用之間的橋梁,是獲取地物信息的基礎數據,具有實時性高、覆蓋范圍廣、信息豐富客觀等優點[4]。衛星遙感技術的發展使得遙感影像數據量迅速增加,呈現出全球、海量、多源的特征[5-8]。查詢滿足特定時間范圍、光譜波段、空間分辨率要求的遙感數據,并保證多源遙感影像的覆蓋率滿足應用需求,是大范圍遙感業務應用首先需要面對的一個問題[9]??购椤⒖拐鸬葢本葹墓ぷ鞲枰焖俨樵儩M足覆蓋率要求的高分辨率衛星遙感影像,進而利用這些數據獲取災區現狀和評估信息[10]。傳統的衛星影像覆蓋率獲取方法主要是先在相關平臺手動查詢、搜索和對比對應的衛星遙感影像,再通過影像快視圖查看整體的覆蓋情況。整個過程需在平臺界面進行交互,影像及其覆蓋率查詢過程較復雜、效率較低,不利于項目和業務的進展。苗立新[9]等利用ENVI/IDL實現了多源遙感影像覆蓋范圍快速查詢技術,可查詢總體的覆蓋情況,但不能獲取精確的影像覆蓋率值;我國自然資源衛星遙感云服務平臺提供了各省級行政區劃每年的實時遙感影像覆蓋率統計模塊,但用戶無法獲取目標區域某個較小時間段內的影像覆蓋率信息,因此需要一種可根據需求快速獲取精確的衛星遙感影像覆蓋率值的方法,以滿足遙感技術日益發展的需求。
為方便用戶共享遙感影像資源,相關機構推出了開源遙感影像數據訪問API,允許用戶通過編程語言訪問平臺中存儲的數據,進而獲取所需的衛星遙感影像。基于這一技術背景,本文以開源遙感數據訪問API為技術支撐,利用Python相關模塊編程實現了衛星遙感影像覆蓋率查詢方法,能更加方便地獲取衛星影像覆蓋率信息,并以目標區域覆蓋率實時查詢監測為應用案例進行了分析和總結。
在遙感技術中,遙感影像的應用水平明顯滯后于航天遙感技術的發展,使得很大一部分衛星影像資源處于擱置狀態,形成了數據生產以及傳輸能力遠超數據獲取、處理、應用能力的局面[11]。為方便用戶共享衛星遙感數據,相關機構推出了開源遙感影像數據訪問API,允許用戶通過編程語言查詢衛星影像數據,使得獲取遙感數據更加方便,從而推動遙感影像數據的應用。本文對國內外相關開源遙感數據訪問API及其主要信息進行了總結,可以更清楚地了解這些應用程序接口的內容和特點,如表1所示。

表1 開源遙感數據訪問API
本文以上述遙感數據訪問API為基礎,以Python為編程開發語言進行相關處理與分析,實現了衛星遙感影像覆蓋率的快速查詢。技術流程如圖1所示,首先確定必要的查詢參數,并利用上述API查詢所需衛星影像的元數據;再通過Python相關模塊對影像元數據進行一系列的轉換、地理處理與分析;最后計算得到準確的覆蓋率值。

圖1 衛星遙感影像覆蓋率查詢流程圖
首先根據開源遙感數據訪問API文檔中的內容和功能構造特定查詢參數,再利用相關工具發送查詢請求,并獲取服務器響應數據,即可查詢所需衛星遙感影像的元數據。本文利用Python相關模塊設計程序實現了衛星遙感影像元數據的查詢功能,具體步驟為:
1)構建查詢參數。與在平臺查詢影像相同,利用遙感數據訪問API查詢遙感數據也需要確定查詢參數。遙感數據訪問API規定了空間范圍、時間范圍、衛星和傳感器種類等必要參數,EarthExplorer API和OpenSearch API還包括月份限定、查詢數量限制、排序方法等其他參數,如表2所示。本文利用Python相關方法,將這些參數構建成標準的、特定數據格式的查詢參數變量,作為發送查詢請求的輸入參數。

表2 查詢參數匯總
2)發送查詢請求。將構建的查詢參數作為輸入參數,向服務器發送查詢請求并獲取響應數據,即可獲得遙感影像的元數據。本文利用Python中的urllib2和requests模塊發送查詢請求。urllib2是Python中的一個 HTTP客戶端庫[12-13],為內置模塊,其request()方法可構造一個請求對象,將其作為該模塊urlopen()方法的輸入參數即可向服務器發送查詢請求。requests也是一個HTTP庫[14],為第三方模塊,需單獨安裝,其在Python內置模塊的基礎上進行了高度封裝,可實現網頁和瀏覽器請求的所有操作。url為查詢請求網址,jsonData為查詢參數變量,利用urllib2和requests模塊發送查詢請求的核心代碼為:
request = urllib2.Request(url=url, data=jsonData, headers=header) ‘ urllib2發送查詢請求
response = urllib2.urlopen(request)
response = requests.get(url, params=jsonData, headers=header) ‘ requests發送查詢請求
3)存儲與展示數據。遙感影像元數據是元數據的一種,通過元數據建立海量衛星遙感數據目錄和數據交換中心,為空間數據的共享提供了可能[15]。以通過資源衛星中心API查詢得到的影像元數據為例,其數據格式為JSON[16-17],本文首先對其進行解析處理;然后利用Python中的JSON模塊將其存儲為后綴名為json的文件[18],并通過JSON在線解析工具(https://www.json.cn/)瀏覽查詢結果。元數據內容主要包括衛星影像的角點坐標、對應影像的空間覆蓋范圍以及行列號、衛星ID、成像時間、傳感器、云覆蓋量、產品號等其他元數據信息。經過解析處理的一景GF-2號衛星影像元數據示例為:
’影像元數據示例
{ ’其他元數據信息
“PathRow”: “1010165”,
“satellite”: “GF2”,
“title”: “GF2_PMS1_4088967”,
“imgRectangle”: Array[5],
“sceneId”: 6594578,
“date”: “2019/07/02”,
“icon”:“http://218.247.138.119:7777/DSSPlatform/BROWSE/ARCHIVE_PGS/GF2/LEVEL1A/PMS1/20190702/GF2_PMS1_E117.1_N30.3_20190702_L1A0004088967.jpg”,
“sensor”: “PMS1”,
“cloud”: 0,
“productId”: 4088967
}
“imgRectangle”: [ ’角點坐標信息
[117.037, 30.418],
[117.273, 30.3734],
[117.221, 30.1693],
[116.986, 30.2139],
[117.037, 30.418]
]
本文利用Python相關功能模塊對查詢獲取的衛星影像元數據進行了一系列處理與分析,最終計算得到衛星影像覆蓋率值,進而實現了衛星影像覆蓋率查詢功能。
1)將影像元數據轉換為GeoJSON。利用Python中的GeoJSON模塊將每景影像的元數據轉換為對應的面狀GeoJSON數據。GeoJSON是一種對各種地理數據結構進行編碼的格式,支持點、線、面等幾何類型,其結構包含一個或多個要素,每個要素又包含一個 幾何對象和其他屬性兩個部分[19-20]。提取元數據中的角點坐標作為坐標數據構成GeoJSON幾何對象中的坐標部分,其他元數據信息則構成GeoJSON的屬性信息部分。具體轉換流程如圖2所示。

圖2 影像元數據轉換為GeoJSON的流程圖
利用§2.1中的影像元數據示例轉換得到的GeoJSON數據為:
“properties”:{ ‘ 屬性信息
“sceneId”: 6594578,
“satellite”: “GF2”,
“title”: “GF2_PMS1_4088967”,
“imgRectangle”: Array[5],
“PathRow”: “1010165”,
“date”: “2019/07/02”,
“productId”: 4088967,
“sensor”: “PMS1”,
“cloud”: 0,
“icon”:“http://218.247.138.119:7777/DSSPlatform/BROWSE/ARCHIVE_PGS/GF2/LEVEL1A/PMS1/20190702/GF2_PMS1_E117.1_N30.3_20190702_L1A0004088967.jpg”
}
“geometry”:{ ‘ 幾何對象
“type”: “Polygon”,
“coordinates”: [
[
[117.037, 30.418],
[117.273, 30.3734],
[117.221, 30.1693],
[116.986, 30.2139],
[117.037, 30.418]
]
]
}
2)將GeoJSON轉換為面狀矢量要素。利用Python中的GeoPandas模塊將所有面狀GeoJSON轉換為具有指定地理坐標的面狀矢量要素。其中,GeoJSON中的幾何對象對應的是矢量要素的空間幾何屬性,即遙感影像的空間范圍;GeoJSON中的屬性信息則存儲在面狀矢量的屬性表中。具體轉換流程如圖3所示,GeoJSON轉換的面狀矢量要素屬性表中的部分信息如圖4所示。該方法在轉換時直接將元數據信息添加到了要素屬性表中,因此可在ArcGIS中同時查看影像覆蓋情況和影像元數據信息。

圖3 GeoJSON轉換為面狀矢量要素流程圖

圖4 面狀矢量要素屬性表部分信息
3)計算覆蓋率。ArcPy是一套ArcGIS處理腳本的軟件包,其目的是利用Python建立實用且高效的地理數據分析、轉換、管理以及自動制圖的處理工 具[21-22]。Python中的ArcPy模塊包括投影、聯合、相交、計算面積等與ArcGIS中相關功能對應的方法,具體代碼為:
arcpy.Project_management() ‘投影
arcpy.Union_analysis() ‘聯合
arcpy.Intersect_analysis() ‘相交
arcpy.CalculateAreas_stats() ‘計算面積
首先利用arcpy.Project_management()方法對所有面狀矢量進行批量投影;再利用arcpy.Union_analysis()方法將投影后的面狀矢量聯合為一個圖層,這樣可避免對衛星影像重疊區域面積的重復計算,保證計算結果的正確性;然后利用arcpy.Intersect_analysis()方法將聯合后的整體矢量要素與具有相同投影坐標的目標區域矢量圖層相交;最后利用arcpy.CalculateAreas_stats()方法計算相交結果的面積。具體操作流程如圖5所示。

圖5 覆蓋率計算部分技術流程圖
衛星遙感影像覆蓋率為相交圖層的面積與目標區域矢量圖層面積的比值,計算公式為:

式中,C為覆蓋率值;S1為相交結果圖層的面積;S2為目標區域矢量圖層的面積。
利用上述衛星遙感影像覆蓋率查詢方法,只需明確必要的查詢參數,即可快速獲取所需遙感影像數據及其對目標區域的覆蓋率值,具有實時、準確度高等優勢。若覆蓋率不滿足應用要求,則需尋找其他衛星影像數據源作為補充。計算覆蓋率時,由于需要對大量矢量數據進行批量處理,當影像數量較多時,程序運行較慢,需進一步改進算法,以提高程序運行效率。
我國是一個地震、泥石流、洪澇等自然災害頻發的國家,重大自然災害大多具有突發性強、涉及面廣、危害性大等特點,因此應急救災工作需要利用滿足覆蓋率要求的高分辨率衛星影像獲取災區現狀和評估信息[10]。高分辨率衛星影像的覆蓋率能否滿足要求將直接影響應急救災工作的進展,而目標區域的衛星影像覆蓋率也反映了該地區衛星影像的獲取和應用能力。因此,實時查詢和掌握我國各地區的高分辨率衛星遙感影像覆蓋率情況,對于災害應急響應領域具有重要意義。
夏季是泥石流、洪澇等災害的多發期,災害一旦發生,需及時查詢和分析災害發生前后的遙感影像和其他相關數據,從而掌握各種設備、設施以及人民群眾可能的受損情況,為抗災救援決策提供及時的數據支持。鑒于此,本文以2019年7月我國各省級行政區劃1 m和2 m分辨率的衛星影像為處理對象,進行了覆蓋率分區域查詢和監測分析;并以此為應用案例,開展了實驗與分析工作。
由衛星遙感影像覆蓋率查詢流程可知,完成這樣的實驗需要根據需求確定必要的查詢參數作為輸入數據,才能查詢衛星影像覆蓋率值。本文設計的查詢方案如圖6所示。

圖6 覆蓋率查詢方案
本文對查詢得到的各省級行政區劃(由于澳門特別行政區面積太小,查詢意義不大,故省略)1 m和 2 m分辨率的衛星影像覆蓋率值進行匯總,結果如表3所示(某些省級行政區劃名稱使用了簡稱)。

表3 2019年7月全國省級行政區劃1 m和2 m分辨率 衛星影像覆蓋率統計表
為總體展示全國各地衛星遙感影像的覆蓋情況,本文利用ArcGIS將覆蓋率作為屬性值添加至全國省級行政區劃矢量要素的屬性表中,并分別創建1 m和 2 m分辨率衛星遙感影像覆蓋率柱狀圖,如圖7、8所示,圖中顏色漸變表示覆蓋率的高低。
衛星遙感影像覆蓋率的高低反映了該地區遙感影像的獲取和應用能力,由表3和圖7、8可知,在特定時間段、特定區域內,2 m分辨率衛星遙感影像覆蓋率普遍比1 m分辨率衛星遙感影像高;且在較短時間內,1 m分辨率衛星影像數量較少,覆蓋率較低,有的地區甚至沒有影像數據,存在覆蓋率為零的情況,因此需要進一步提升高分辨率衛星影像的生產能力以及相關地區的影像獲取和應用能力。從總體來看,無論是1 m分辨率還是2 m分辨率衛星遙感影像,均在我國中東部等高緯度地區分布數量較多,覆蓋率值較高,其他地區數量較少、覆蓋率值較低,由此可知我國高分辨率衛星影像的數量在空間上分布并不均勻,需在提升衛星影像生產能力的同時做到全國區域全覆蓋。

圖7 2019年7月省級行政區劃1 m分辨率衛星遙感影像覆蓋率柱狀圖

圖8 2019年7月省級行政區劃2 m分辨率衛星遙感影像覆蓋率柱狀圖
由上述應用案例分析可知,通過本文方法可實時查詢和監測目標區域特定分辨率衛星影像的覆蓋率信息,進而了解該地區衛星遙感影像的生產、獲取、應用情況,可為災害應急、國土規劃等工作提供一定的數據支持。
針對傳統衛星遙感影像覆蓋率信息獲取途徑較繁瑣、獲取時間較長、無法獲取準確值等問題,本文提出了基于遙感數據訪問API的衛星遙感影像覆蓋率查詢方法。該方法具有的優勢為:
1)僅需確定必要的查詢參數,即可查詢獲取對應的衛星遙感影像數據及其對目標區域的覆蓋率信息,比傳統方法更高效、準確,極大地節省了時間。
2)既可根據實際應用需求查詢所需的衛星影像數據及其覆蓋率值,又可實時查詢和監測目標區域特定分辨率衛星影像的覆蓋率,從而了解目標區域衛星遙感數據的獲取和應用情況。
本文方法降低了獲取遙感影像數據及其覆蓋率信息的時間成本,可為某些遙感相關技術領域提供數據和技術支持,具有一定的應用價值;但該方法計算覆蓋率時需對大量矢量數據進行批量處理,讀取、輸出數據將消耗較多時間,降低了程序運行效率,因此需進一步優化算法,以提高程序運行效率。