目次
1.3 属性フィルタリング filterMetadata()
GEE では、一般的に次のような操作方法が使用されます。
1. フィルター ee.フィルター
GEE では、FeatureCollection、ImageCollection などのすべての幾何学的データに、日付フィルタリング filterDate()、空間フィルタリング filterBounds() および属性フィルタリング filterMetadata() と一般的なフィルタリング メソッド filter というカプセル化されたフィルタリング メソッドがあります。
1.1 日付フィルター filterDate()
基本的な文法:
filterDate(start, end)
コレクションを日付範囲でフィルタリングします。start と end は、日付、数値(1970-01-01T00:00:00Z からミリ秒として解釈される)、または文字列 (例: '1996-01-01T08:00') です。「system:time_start」プロパティに基づきます。
最下層では、このメソッドはコレクション内の各要素の属性リスト内の属性 system:time_start を照会する必要があります。要素に属性 system:time_start がない場合、日付フィルター メソッドを使用する方法はありません。
サンプルコード:
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");
var p1 = ee.Geometry.Point([-100.91289062499999,37.07682857623016]);
//筛选2018-1-1至2018-2-1日期内,在p1范围内的影像数据,返回影像数据集
var imgCol=l8.filterDate("2018-1-1","2018-2-1").filterBounds(p1);
var img =imgCol.first();
print("image geometry:" ,img.geometry());
Map.addLayer(img,{bands:["B4","B3","B2"],MIN:0,MAX:0.3},"IMG");
Map.addLayer(img.geometry(),{color:"red"},"img_roi")
出力結果:
1.2 空間フィルタリング filterBounds()
基本的な文法:
filterBounds(geometry)
filterBounds(geometry) は、適切な 2 つの境界が交わるかどうか、つまり 2 つのベクトルデータが交わるかどうかを基準にして空間フィルタリングを行う手法です。ただし、画像データと空間フィルタリングの場合は多少異なります。まず、コレクションの特別な属性を宣言する必要があります。「画像データには独自のコレクションのグラフィック属性が含まれています」、つまり画像の境界または画像の外側の長方形です。属性名は通常 system:footprint で、リーフレット インフルエンスに含まれるジオメトリを取得するには、 image.geometry() を直接使用します。
注: 大規模または複雑なコレクションをgeometry
パラメータとして指定すると、パフォーマンスが低下する可能性があります。照合コレクションのジオメトリは適切に拡張できません。目的の結果を達成するために必要な最小のコレクション (またはジオメトリ) を使用してください。
サンプルコード:
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");
var p1 = ee.Geometry.Point([-100.91289062499999,37.07682857623016]);
//筛选2018-1-1至2018-2-1日期内,在p1范围内的影像数据,返回影像数据集
var imgCol = l8.filterDate("2018-1-1","2018-2-1").filterBounds(p1);
var img =imgCol.first();
print("image geometry:" ,img.geometry());
Map.addLayer(img,{bands:["B4","B3","B2"],MIN:0,MAX:0.3},"IMG");
Map.addLayer(img.geometry(),{color:"red"},"img_roi")
//构造一个几何图形属性为外接矩形的影像
var b1 = img.select("B1").add(1);
Map.addLayer(b1,{min:1,max:1.3},"ndvi");
Map.addLayer(b1.geometry(),{color:"blue"},"ndvi_roi");
上記のコードは、指定された位置にある Landsat 画像を選択し、フィルター処理された画像の幾何学的データ情報を出力します。コンソール出力と実行結果は次のとおりです。
//生成新的影像集合重新使用p2做过滤
var p2=ee.Geometry.Point([-101.63798828124999,38.255175928901245]);
var firImgCol = ee.ImageCollection.fromImages([img]).filterBounds(p2);
print("firImgCol", firImgCol);
var secImgCol = ee.ImageCollection.fromImages([b1]).filterBounds(p2);
print("secImgCol", secImgCol);
Map.addLayer(p1, {color:"black"}, "p1");
Map.addLayer(p2, {color:"green"}, "p2");
上記のコードは、p2 が img のジオメトリの外側にあるが、b1 のジオメトリの内側にあるかどうかをテストするために使用されます。出力結果が非常に悪いため、firImgCol は空ですが、secImgCol はフィルタで除外できます。
1.3 属性フィルタリング filterMetadata()
基本的な文法:
filterMetadata(name, operater, value)
このメソッドは実際の開発ではほとんど使用されません。name は指定された名前、つまりデータセット内の各要素に対応する属性名を指し、演算子 (equals、less_than など) と指定された値を演算することで判断されます。条件を満たすデータを除外します。実際の開発では、ee.Filter.eq()\ee.Filter.lte() などに置き換えられることが多いです。
1.4 フィルター
フィルターは最も一般的な方法であり、一般的に使用されるフィルター操作方法は次のとおりです。
メソッド名 | メソッドの意味 | パラメータ |
ee.Filter.or | または操作: 複数のフィルター条件を組み合わせるために使用されます。これは、条件の 1 つが満たされている限り、それをフィルターで除外できることを意味します。 | Var_args: 複数のフィルター |
ee.Filter.and | AND 演算: 複数のフィルター条件を組み合わせるために使用されます。これは、フィルターで除外する前にすべての条件が満たされる必要があることを意味します。 | Var_args: 複数のフィルター |
ee.Filter.calendarRange | 指定された日付形式に基づいてデータをフィルターします。 | start: 開始日 終了: 終了日 フィールド: 年、月、時、分、年の日、月の日、週の日などの日付形式.... |
of.Filter.eq | 属性値が指定されたデータと等しいかどうかに基づいてフィルターします。 | 名前: 属性名 値: フィルター値 |
ee.Filter.lte | 属性値が指定されたデータ以下であるかどうかに基づいてフィルターします。 | 名前: 属性名 値: フィルター値 |
ee.Filter.inList | 指定された属性値がリストにあるかどうかに基づいてフィルタリングを実装します。 | leftField: 最初のコレクションの属性名。 rightValue: 最初のコレクション属性フィルター値。 rightField: 2 番目のコレクションの属性名。 leftValue: 2 番目のコレクション属性フィルター値。 |
例(1):
2015 年 1 月から 3 月までのパス 44 または行 34 のデータを抽出します。
var Col = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA');
var sCol = Col.filterDate('2014-01-01', '2014-02-01').filter(ee.Filter.or(ee.Filter.eq("WRS_PATH",44),ee.Filter.eq("WRS_ROW",34)));
print("select image collection:", sCol);
効果を実感してください:
例(2):
指定したエリアの各年の 1 日から 31 日までのデータ、つまり各年の 1 月のデータを抽出します。
import geometry;
Map.centerObject(geometry,8);
var sCol = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA').filterBounds(geometry).filter(ee.Filter.calendarRange(1,31,"day_of_year"));
print(sCol);
出力結果:
例(3):
属性 system: インデックス リストを指定し、このリスト内のデータのみを取得します。
//ee.Filter.inList
var sCol = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA').filter(ee.Filter.inList({
leftField: "system:index",
rightValue:["LC08_123032_20170115","LC08_123032_20180118"]
}));
print(sCol);
出力結果:
2. ee.Reducerを計算する
GEE ではユーザーが使用できる Reducer が多数ありますが、具体的な使用方法については前章の注意事項の 3.4.3 節を参照してください。
さまざまなカテゴリのピクセル数をカウントする例として、リデューサー内のグループを取り上げてみましょう。
//roi选取辽宁省大连市(用户自己上传),数据使用的是2016-2017年的modis地表分类数据集合
var countries = ee.FeatureCollection("users/HM_hhxx/LNcityShp");
var roi = countries.filter(ee.Filter.eq("enName","dalian"));
Map.centerObject(countries, 7);
Map.addLayer(countries);
print(roi)
Map.addLayer(roi,{},"roi");
var bounds = roi.geometry().bounds();
var landCover = mcd12ql.filterDate("2016-1-1","2017-1-1").select("LC_Type1").first().clip(roi);
print("landCover", landCover);
//加载土地类型影像
Map.addLayer(landCover, {min:1, max:17},"landCover");
//生成新的影像并添加土地分类波段
var image = ee.Image.constant(1).addBands(landCover);
var dict = image.reduceRegion({
reducer: ee.Reducer.count().group({
groupField: 1,
groupName: "landType"
}),
geometry: roi,
scale: 500,
maxPixels: 1e13
});
print(dict)
出力結果:
分類結果画像:
3. ジョイント ee.Join
GEE の結合 (ee.join) は、フィルター内の特別なフィルター条件を使用して、2 つの異なるコレクション内の条件を満たすすべての要素を抽出します。GEE で提供される結合メソッドは次の図に示されており、一般的に使用されるのは ee.Join.simple()、ee.Join.saveAll() です。
ee.Join.simple() の例:
単純なユニオンは結合オブジェクトを返します。このオブジェクトは、join.apply() などの他の結合メソッドを呼び出すことで操作できます。
次の例では、集合 A と集合 B の指定された列で同じ要素を検索し、集合 A の対応する要素 (p1=1 および p2=2 の要素) をすべて取り出します。
var primaryCol = ee.FeatureCollection([
ee.Feature(null, {p1:0, p2:"a"}),
ee.Feature(null, {p1:1, p2:"b"}),
ee.Feature(null, {p1:2, p2:"c"})
]);
var secondaryCol = ee.FeatureCollection([
ee.Feature(null, {p3:1, p2:"d"}),
ee.Feature(null, {p3:2, p2:"e"}),
ee.Feature(null, {p3:3, p2:"f"})
]);
//构建新的filter
var filter = ee.Filter.equals({
leftField:"p1",
rightField:"p3"
});
var join = ee.Join.simple();
var result = join.apply(primaryCol, secondaryCol, filter);
print("join result", result)
出力結果:
4. ループスルー
4.1 マップサイクル
基本的な文法:
fCol=fCol.map(function(feature){
....
....
})
ループ操作で注意すべきこと:
1) マップ操作には戻り値が必要です。コレクションが異なれば戻り値も異なります。たとえば、featureCollection の戻り値は feature で、imageCollection の戻り値は image です。
2) マップ操作では print() メソッドを使用しないでください。
3) マップ操作では ui.Chart や Export などのメソッドは使用できません。
4) for ループを動作させるループ条件としてリストの長さを取得する getInfo() を使用しないでください。
4.2 反復ループ
Iterate は、マップ ループの欠点を補うための GEE の新しいループ メソッドです。マップ ループの欠点は、コレクションのすべての要素をループすることしかできないことですが、現在の特定のインデックスを操作する方法がないことです。または前後の他の要素データ。反復ループは初期値を定義し、コレクションの特定の要素を走査して、初期値とこの要素の操作を実現し、最後に関連する結果が返されて初期値に再割り当てされます。
基本構文: iterate(アルゴリズム、最初)
(1) パラメータのアルゴリズムはコールバックメソッド、つまりサイクルごとに呼び出されるメソッドであり、形式は次のとおりです。
function(element_data, first_data){
....
}
element_data: コレクションの各要素;
first_data: 初期化によって定義された最初のデータ、戻り値は計算の結果であり、first に再割り当てされます; (2)
パラメータ first によって定義された初期化値は、 list 型ですが、最終的には取得したいのですが、結果は同じ型の値になります。
5. データのエクスポート エクスポート
5.1 画像データ
1. Export.image.toAsset 画像データが Asset にエクスポートされます
基本的な文法:
Export.image.toAsset(image, description, assetId, pyramidingPolicy, dimensions, region, scale, crs, crsTransform, maxPixels)
パラメータは次のとおりです。
画像 | エクスポートする画像 |
説明 | 随所にミッションの説明 |
アセットID | リソース名。Asset フォルダーに表示されるリソース名です。 |
ピラミッド化ポリシー | オブジェクトの値であるバンド値の計算式。計算方法には、平均、サンプル、最小、最大、モードが含まれます。通常、この値は設定されず、デフォルト値が使用されます。例: {'B4':'mean'} は、バンド名が B4 であるバンドが平均値によって計算されることを意味します |
寸法 | エクスポート画像の幅と高さ |
地域 | エクスポートされた領域はジオメトリです |
規模 | 解像度(メートル単位)(30m など) |
crs | 投影情報、通常は EPSG:4326 |
crsTransform |
アフィン変換のパラメータを定義します。特定のパラメータは [xScale,xShearing,xTranslation,yShearing,yScale,yTranslation] です。 |
最大ピクセル数 | エクスポートされる画像の最大ピクセル数。デフォルトは「le8」ですが、通常はエクスポート時のエラーを防ぐために「le13」に設定できます。 |
例:
B1 バンドの l8 イメージをエクスポートし、説明を設定し、training01/l8ImgB1-01 にエクスポートします。解像度は 30m、エリアは roi 範囲のイメージです。
Export.image.toAsset({
image: l8Img.select("B1"),
description:"Asset-l8ImgB1-01",
assetId:"training01/l8ImgB1-01",
scale:30,
region:roi
});
2. Export.image.toDrive 画像データをドライブにエクスポートします
基本的な構文:
Export.image.toDrive(image, description, folder, fileNamePrefix, dimensions, region, scale, crs, crsTransform, maxPixels, shardSize, fileDimensions, skipEmptyTiles, fileFormat, formatOption)
画像 | エクスポートする画像 |
説明 | 随所にミッションの説明 |
フォルダ | Assets 内のフォルダー名、つまりユーザーが作成したフォルダー。このパラメータが渡されない場合、エクスポートされたファイルはアセットのルート ディレクトリに直接配置され、通常はこのパラメータは渡されません。 |
ファイル名プレフィックス | エクスポートされたリソースの名前。デフォルトで設定されていない場合、説明がエクスポートされたファイルの名前として直接使用されます。 |
地域 | エクスポートされた領域はジオメトリです |
規模 | 解像度(メートル単位)(30m など) |
crs | 投影情報、通常は EPSG:4326 |
crsTransform |
アフィン変換のパラメータを定義します。特定のパラメータは [xScale,xShearing,xTranslation,yShearing,yScale,yTranslation] です。 |
最大ピクセル数 | エクスポートされる画像の最大ピクセル数。通常、エクスポート時のエラーを防ぐために「le13」に設定できます。 |
5.2 ベクトルデータ
1. Export.table.toAsset ベクターデータをアセットにエクスポートします
Export.table.toAsset(collection, description, assetId)
コレクション | エクスポートする必要があるベクター データのコレクション |
説明 | エクスポートタスクの説明 |
アセットID | GoogleAssets のリソース識別子名 |
2. Export.table.toDrive ベクターデータをドライブにエクスポート
Export.table.toDrive(collection, description, folder, fileNamePrefix, fileFormat, selectors)
コレクション | エクスポートする必要があるベクター データのコレクション |
説明 | エクスポートタスクの説明 |
フォルダ | GoogleDrive内のフォルダー名。このパラメータが渡されない場合、エクスポートされたファイルは Google ドライブのルート ディレクトリに直接配置されます。 |
ファイル名プレフィックス | エクスポートされたリソースの名前。デフォルトで渡されない場合、説明がエクスポートされたファイルの名前として直接使用されます。 |
ファイル形式 | ファイル形式は、GeoJson、KML、KMZ、CSV、SHP、および TFRecord 形式のエクスポートをサポートしており、そのうち CSV がデフォルトのパラメータです |
セレクター | ダウンロードされたベクター データにどの属性が含まれるかをフィルターします。デフォルトでは、すべての属性が含まれます。 |
5.3 ビデオデータ
1.Export.video.toCloudStorage
Export.video.toCloudStorage(collection, description, bucket, fileNamePrefix, framesPerSecond, dimensions, region, scale, crs, crsTransform, maxPixels, maxFrames)
collection(ImageCollection) | 要导出的图像集合。 |
description(字符串,可选): | 任务的人类可读名称。默认为“myExportVideoTask”。 |
bucket(字符串,可选): | Cloud Storage 目标存储分区。 |
fileNamePrefix(字符串,可选): | 用作输出前缀的字符串。结尾的“/”表示路径。默认为描述。 |
framesPerSecond(数字,可选) | 导出视频的帧率。必须是介于 0.1 和 100 之间的值。默认为 1。 |
dimensions(数字|字符串,可选) | 用于导出图像的尺寸。将单个正整数作为最大维度或“WIDTHxHEIGHT”,其中 WIDTH 和 HEIGHT 均为正整数。 |
region(Geometry.LinearRing|Geometry.Polygon|String,可选) | 表示要导出的区域的线性环、多边形或坐标。这些可以指定为几何对象或序列化为字符串的坐标。 |
scale(数字,可选) | 以米/像素为单位的分辨率。 |
crs(字符串,可选) | 用于导出图像的 CRS。默认为谷歌地图墨卡托投影,SR-ORG:6627。 |
crsTransform(字符串,可选) | 用于导出图像的仿射变换。需要定义“crs”。 |
maxPixels(数字,可选) | 限制导出中的像素数。默认情况下,如果导出超过 1e8 像素,您将看到错误。显式设置此值允许提高或降低此限制。 |
maxFrames(数量,可选) | 设置要导出的最大帧数。默认情况下,最多可以导出 1000 帧。通过明确设置,您可以提高或降低此限制。 |
2.Export.video.toDrive
Export.video.toDrive(collection, description, folder, fileNamePrefix, framesPerSecond, dimensions, region, scale, crs, crsTransform, maxPixels, maxFrames)
collection(ImageCollection) | 要导出的图像集合。 |
description(字符串,可选) | 任务的人类可读名称。可能包含字母、数字、-、_(无空格)。默认为“myExportVideoTask”。 |
folder(字符串,可选) | 导出将驻留的 Google Drive 文件夹。注意:(a) 如果文件夹名称存在于任何级别,则将输出写入其中,(b) 如果存在重复的文件夹名称,则将输出写入最近修改的文件夹, (c) 如果文件夹名称不存在,将在根目录创建一个新文件夹,并且 (d) 带有分隔符的文件夹名称(例如 'path/to/file')被解释为文字字符串,而不是系统路径。默认为驱动器根目录。 |
fileNamePrefix(字符串,可选) | 文件名前缀。可能包含字母、数字、-、_(无空格)。默认为描述。 |
framesPerSecond(数字,可选) | 导出视频的帧率。必须是介于 0.1 和 100 之间的值。默认为 1。 |
dimensions(数字|字符串,可选) | 用于导出图像的尺寸。采用单个正整数作为最大维度或“WIDTHxHEIGHT”,其中 WIDTH 和 HEIGHT 均为正整数。 |
region(Geometry.LinearRing|Geometry.Polygon|String,可选) | 表示要导出的区域的线性环、多边形或坐标。这些可以指定为几何对象或序列化为字符串的坐标。 |
scale(数字,可选) | 以米/像素为单位的分辨率。 |
crs(字符串,可选) | 用于导出图像的 CRS。默认为谷歌地图墨卡托投影,SR-ORG:6627。 |
crsTransform(字符串,可选) | 用于导出图像的仿射变换。需要定义“crs”。 |
maxPixels(数字,可选) | 限制导出中的像素数。默认情况下,如果导出超过 1e8 像素,您将看到错误。显式设置此值允许提高或降低此限制。 |
maxFrames(数量,可选) | 设置要导出的最大帧数。默认情况下,最多可以导出 1000 帧。通过明确设置,您可以提高或降低此限制。 |
6. 图标展示 ui.Chart
在GEE中图标主要有三种类型,array数据的图表(ui.Chart.array)、feature数据图表(ui.Chart.feature)和image数据的图表(ui.Chart.image)。
6.1 ui.Chart.array.values
ui.Chart.array.values(配列、軸、xLabels)
配列: 表示するデータのリスト。
axis: リストを表示する軸。デフォルトは 0 です。
xLabels: 表示されるデータに対応する独立変数データ リスト。
6.2 ui.Chart.機能
ui.Chart.geature.byProperty(features, xProperties, seriesProperty)
特徴: カウントされるベクトルデータ。
xPropertes: カウントされるベクトル データ プロパティ。
seriesProperty: 統計プロパティに対応するラベル リスト。デフォルトは system:index; です。
6.3 ui.Chart.image
画像からグラフを生成する方法はいろいろありますが、一般的に使われるのは、画像コレクションの1年間の日ごとの変化グラフを生成したり、ヒストグラム統計グラフを生成したりする方法です。