Google Earth Engine(GEE) 學習筆記 二十九:下載文件一
來自專欄 GEE 開發
失蹤人口重新上線,接下來一段時間我可能會斷斷續續更新一個關於GEE的一個在實際工作中使用遇到的問題以及解決方法。
今天首先探討一下在實際工作中最為常用的一個功能,下載GEE中的數據或者結果,關於GEE中下載數據方式我了解到的目前主要有以下兩種方式,如果有新的方式請大家留言探討一下。
- 第一種方式:getDownloadURL方式,這是這篇文章主要介紹的內容。
- 第二種方式:Export方式,這種方式在之前的文章中也提起過,只不過沒有詳細介紹。篇幅所限,下一篇文章中會詳細介紹各種Export方式。
首先,我們查看GEE的API,getDownloadURL方法總共有兩個:一個是FeatureCollection,一個是Image的。這個也非常好理解,我們在GEE需要下載的也就是矢量數據和柵格數據,那麼也就是這兩種數據集合。需要明確的一點是GEE不支持直接下載ImageCollection,非常重要。下面我會依次介紹這兩個方法:
1. ee.FeatureCollection.getDownloadURL()參數
Get a download URL.
Returns a download URL or undefined if a callback was specified.Arguments:this:featurecollection (FeatureCollection):The FeatureCollection instance.format (String, optional):The format of download, one of:"csv", "json", "kml", "kmz".selectors (List<String>|String, optional):Selectors that should be used to determine which attributes will be downloaded.filename (String, optional):
Name of the file to be downloaded.callback (Function, optional):An optional callback. If not supplied, the call is made synchronously.Returns: Object|String
參數說明:
- format:生成的下載格式,支持四種各種csv、json、kml、kmz。如果需要ESRI shapefile格式,那麼需要生成比如kml格式,然後使用QGIS或者Arcgis本地轉換一下;
- selectors:篩選下載的矢量數據中包含哪些屬性,默認是包含全部屬性;
- filename:下載的文件名稱;
- callback:這個參數幾乎不會用到,回調方法。
上傳的Assert文件下載示例:
//使用的是GEE中世界地區邊界這個數據集,展示的是中國台灣省var fc = ee.FeatureCollection(USDOS/LSIB/2013);//篩選台灣省var sfc = fc.filter(ee.Filter.eq("cc", "TW"));//這一步非常重要,直接使用sfc下載數據那麼只能獲取相關數據結構,數據內容會全部丟失var taiwan = ee.FeatureCollection(sfc.toList(sfc.size()));//地圖載入台灣省Map.addLayer(taiwan, {color:"00ff00"}, taiwan);Map.centerObject(taiwan, 7);print(taiwan);//輸出的kml包含全部屬性var url1 = taiwan.getDownloadURL({ format: "kml", filename: "taiwan1"});//在輸出面板中展示URLprint("url1 is: ", url1);//輸出的kml只包含cc屬性var url2 = taiwan.getDownloadURL({ format: "kml", selectors: ["cc"], filename: "taiwan2"});print("url2 is: ", url1);
輸出結果:
使用QGIS查看兩個文件中的屬性:
- 包含全部屬性的文件
- 只包含cc屬性的文件
對於直接使用代碼生成的FeatureCollection下載示例:
var roi = /* color: #d63000 */ee.Geometry.Polygon( [[[115.46424865722656, 39.47489550075251], [115.54664611816406, 39.47171528483254], [115.55419921875, 39.524699902077586], [115.47111511230469, 39.52734807268146]]]);//featureCollection生成下載的URLvar roi_col = ee.FeatureCollection(roi);var url3 = roi_col.getDownloadURL({ format: "json", filename: "bounds"});print("url3 is: ", url3);
2. ee.Image.getDownloadURL() 參數說明:
Get a Download URL
Returns returns a download URL, or undefined if a callback was specified.Arguments:this:image (Image):The Image instance.params (Object):
An object containing download options with the following possible values:- name: a base name to use when constructing filenames.- bands: a description of the bands to download. Must be a list of dictionaries, each with the following keys:+ id: the name of the band, a string, required.+ crs: an optional CRS string defining the band projection.+ crs_transform: an optional list of 6 numbers specifying an affine transform from the specified CRS, in row-major order:[xScale, xShearing, xTranslation, yShearing, yScale, yTranslation]+ dimensions: an optional list of two integers defining the width and height to which the band is cropped.+ scale: an optional number, specifying the scale in meters of the band; ignored if crs and crs_transform is specified.- crs: a default CRS string to use for any bands that do not explicitly specify one.
- crs_transform: a default affine transform to use for any bands that do not specify one, of the same format as the crs_transform of bands.- dimensions: default image cropping dimensions to use for any bands that do not specify them.- scale: a default scale to use for any bands that do not specify one; ignored if crs and crs_transform is specified.- region: a polygon specifying a region to download; ignored if crs and crs_transform is specified.callback (Function, optional):An optional callback. If not supplied, the call is made synchronously.Returns: Object|String
參數說明:
- params各種參數,這裡說一下常用的,其他的參數用的機會不多(bands波段參數列表,這個參數不會用,??)
- name 下載文件的名稱
- crs 投影信息,一般來講都是使用默認的投影,然後本地使用其他軟體轉換投影信息
- scale 解析度
- region 下載的區域
- callback回調方法,幾乎不用
下載示例:
//download image url demovar roi = /* color: #d63000 */ee.Geometry.Polygon( [[[115.46424865722656, 39.47489550075251], [115.54664611816406, 39.47171528483254], [115.55419921875, 39.524699902077586], [115.47111511230469, 39.52734807268146]]]); var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT_TOA") .filterBounds(roi) .filterDate("2017-01-01", "2017-12-31") .map(ee.Algorithms.Landsat.simpleCloudScore) .map(function(img) { img = img.updateMask(img.select("cloud").lt(1)); return img; }) .sort("system:time_start");var landsat = l8.mosaic().clip(roi);Map.addLayer(landsat, {bands: ["B3", "B2", "B1"], min:0, max:0.3}, "landsat");Map.centerObject(roi, 12);Map.addLayer(roi, {color: red}, roi);//第一種獲取geometry的json字元串方式var roiInfo = roi.getInfo();var region1 = JSON.stringify(roiInfo);var url1 = landsat.select(B1).getDownloadURL({scale: 30, region: region1, name:"landsat8-B1"});print("url1 is: ", url1);var url2 = landsat.select(B2).getDownloadURL({scale: 100, region: region1, name:"landsat8-B2"});print("url2 is: ", url2);//第二種獲取geometry的json字元串方式(推薦)var region2 = ee.Geometry(roi).toGeoJSONString();var url3 = landsat.select(B3).getDownloadURL({scale: 30, region: region2, name:"landsat8-B3"});print("url3 is: ", url3);//篩選多個波段同時下載var url4 = landsat.select(["B3", "B2", "B1"]).getDownloadURL({scale: 30, region:region2, name:"landsat8-RGB"});print("url4 is: ", url4);
運行結果:
下載的文件,單波段的文件
多波段文件:
下一篇文章會詳細介紹一下Export這個下載方式。
大家如果有問題需要彼此交流,可以微信直接聯繫我。加好友留言請加上「GEE」或者「知乎」,這樣我就知道是關於GEE的道友??。
微信號:shi_weihappy
昵稱:無形的風
推薦閱讀:
※Flickr 現在找不到用 Google 的賬號進行登入的入口處了?為什麼?
※Google 新發布的 Pixel 2 是如何做到只用單攝還能實現虛化效果?
※如何看待 Google 曝光的新 OS Fuchsia?
※如何最有效的解決Google公共庫&字體庫被屏蔽的問題?
※假設現在把一輛車內無人的普通汽車裝配谷歌無人車技術送上中國公路自動行駛,請問車主觸犯了哪些現有法律?