Google Earth Engine(GEE)は、地球の様子を衛星画像によって可視化、分析できる地理空間分析のプラットフォームです。クラウドベースでデータを取得します。
本記事では、指定した区域を描く雛形コードを載せました。下図例では滋賀県の市町村の境界を色分けして地図上に重ね合わせたものです。JupyterLabを使用してインタラクティブに操作していきます。
■1. ライブラリのインストール
anaconda環境下の場合
conda install -c conda-forge earthengine-api
conda install -c conda-forge geemap
pipの場合
pip install earthengine-api
pip install geemap
■2. gcloud CLI のインストール
Google Cloud CLI は、Google Cloud リソースを操作するツールです。コマンドラインやスクリプト等の一般的なプラットフォームで タスクを実行できます。
cloud.google.com
上記でインストール後に、JupyterLabにて下図のような手順で使用できるようになります。
import ee
ee.Authenticate()
ee.Initialize()
上記の処理は初回のみです。
■3. 地図を区切るための区域データgeojsonの取得
手順は下記リンクを参照下さい。この緯度と経度の位置座標データから、所望の場所を可視化したり、衛星データを取得することができるようになります。
hk29.hatenablog.jp
■本プログラム
上記1, 2, 3を実施後、JupyterLabを用いて以降のコードをインタラクティブに実行して進めます。
import ee
import geemap
import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
css_colors = mcolors.CSS4_COLORS
import japanize_matplotlib
geojson_path = 'N03-20210101_25_GML/N03-21_25_210101.geojson'
gdf = gpd.read_file(geojson_path)
gdf
gdf2 = gdf.copy()
gdf2
ax = gdf2.boundary.plot()
ax.set_axis_off()
my_group = gdf2.groupby("N03_004").groups.keys()
print(len(my_group))
my_group
data_file = 'shiga_ken.geojson'
gdf2.to_file(data_file, driver='GeoJSON')
import json
with open(data_file, encoding='utf-8') as f:
data = json.load(f)
city_dict = {}
for feature in data['features']:
geometry = feature['geometry']
city_name = feature['properties']['N03_004']
if city_name not in city_dict:
city_dict[city_name] = []
if geometry['type'] == 'Polygon':
city_dict[city_name].append(geometry['coordinates'])
elif geometry['type'] == 'MultiPolygon':
city_dict[city_name].extend(geometry['coordinates'])
geemap.ee_initialize()
dataset = ee.ImageCollection("USGS/NLCD")
image = dataset.first()
Map = geemap.Map()
for i, (key, val) in enumerate(city_dict.items(), start=1):
print(i, key)
coords = val[0][0]
Map.addLayer(ee.Geometry.Polygon(coords),
{'color': list(css_colors.keys())[i*2-1]},
key,
)
for key, val in city_dict.items():
coords = val[0][0]
clipped_image = image.clip(ee.Geometry.Polygon(coords))
Map.addLayer(clipped_image, {'min': 0, 'max': 100, 'opacity': 0.1}, 'NLCD Land Cover', True)
Map
すると、下図のような世界地図が表示されます。
マウスでスクロールすると、下図のように拡大できます。位置移動は左クリックで出来ます。さらに拡大すると、冒頭に載せたような滋賀県の各市町村の区域の輪郭を線で区切った図が表示されます。
以上
<広告>
リンク
リンク
リンク