[PYTHON] [Fortsetzung] Künstliche Satellitenbildanalyse von Google Earth Engine und Google Colab-Satellitenbildanalyse ab kostenlos (Übung) -

Einführung

Code zum Abrufen von Satellitendaten

--Verwenden Sie den folgenden Code (siehe Vorheriger Artikel für eine detaillierte Erläuterung des Codes.)

Funktionsdefinition

#Importieren Sie die Python-API von Earth Engine
import ee

#GEE-Zertifizierung / Initialisierung
ee.Authenticate()
ee.Initialize()

#GEE-Daten laden
def load_data(snippet, from_date, to_date, geometry, band):
    #Daten gemäß Parameterbedingungen extrahieren
    dataset = ee.ImageCollection(snippet).filter(
    ee.Filter.date(from_date, to_date)).filter(
    ee.Filter.geometry(geometry)).select(band)
    #In Listentyp konvertieren
    data_list = dataset.toList(dataset.size().getInfo())
    #Geben Sie die Anzahl der Zieldaten und die Datenliste aus
    return dataset.size().getInfo(), data_list

#Speichern Sie Satellitenbilder in Google Drive
def save_on_gdrive(image, geometry, dir_name, file_name, scale):
    task = ee.batch.Export.image.toDrive(**{
        'image': image,#Satelliteninformationen zum Laden
        'description': file_name,#Dateiname zum Speichern
        'folder':dir_name,#Speichern Sie den Namen des Zielordners
        'scale': scale,#Auflösung
        'region': geometry.getInfo()['coordinates'],#Zielgebiet
        'crs': 'EPSG:4326'
    })
    # Run exporting
    task.start()
    print('Done.')

Variable (Parameter) Einstellung

##Parameter angeben
#Bestimmen Sie einen Satelliten
snippet = 'NOAA/DMSP-OLS/NIGHTTIME_LIGHTS'
#Geben Sie den Bandnamen an
band = 'avg_vis'
#Geben Sie den Zeitraum an
from_date='2010-01-01'
to_date='2012-12-31'
#Bereich angeben(Geben Sie den Breiten- / Längengrad für das Gebiet Japan an)
geometry = ee.Geometry.Rectangle([128.60, 29.97, 148.43, 46.12])
#Ordnername zum Speichern
dir_name = 'GEE_download'
#Dateiname
file_name = 'file_name'
#Auflösung
scale = 1000

Ausführung der Verarbeitung

##Ausführung der Verarbeitung----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Alle speichern (Dateiname verwendet Satelliten-ID)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

Satellitendatenanalyse ① ~ Optisches Bild ~

Überblick

Datensatz

--Satellite = "Sentinel 2" --Band = TCI_R, TCI_G, TCI_B

Code

##Parameter angeben
#Bestimmen Sie einen Satelliten
snippet = 'COPERNICUS/S2_SR'
#Geben Sie den Bandnamen an
band = 'TCI_R'

#Geben Sie den Zeitraum an
from_date='2020-04-01'
to_date='2020-04-15'
#Bereich angeben(Geben Sie den Breiten- / Längengrad für das Gebiet Japan an)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

#Ordnername zum Speichern
dir_name = 'GEE_Sentinel_Red'
#Dateiname
file_name = 'file_name'
#Auflösung
scale = 10

##Ausführung der Verarbeitung----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Alle speichern (Dateiname verwendet Satelliten-ID)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)
#Paketinstallation&importieren
!pip install rasterio
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import rasterio
import glob

#Daten lesen
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Red/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    arr = src.read()

#Visualisierung
plt.imshow(arr[0], cmap='Reds')

Optisches Bild von Tokio (um den Kaiserpalast) (rotes Band) image.png

――Sie können den Bereich sehen, der der Kaiserpalast in der Mitte zu sein scheint, sowie den Yoyogi-Park und Shinjuku Gyoen auf der Westseite. ――Nächste, ich werde versuchen, auch andere grüne und blaue Bänder zu bekommen.

#Holen Sie sich grüne Banddaten
##Parameter angeben
#Geben Sie den Bandnamen an
band = 'TCI_G'
#Ordnername zum Speichern
dir_name = 'GEE_Sentinel_Green'

##Ausführung der Verarbeitung----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Alle speichern (Dateiname verwendet Satelliten-ID)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

#Blue Band Datenerfassung
##Parameter angeben
#Geben Sie den Bandnamen an
band = 'TCI_B'
#Ordnername zum Speichern
dir_name = 'GEE_Sentinel_Blue'

##Ausführung der Verarbeitung----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Alle speichern (Dateiname verwendet Satelliten-ID)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

――Ich konnte das grüne und blaue Band sowie das rote Band bekommen.

#Daten lesen
# Red
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Red/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    red = src.read()
# Green
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Green/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    green = src.read()
# Blue
with rasterio.open('/content/drive/My Drive/GEE_Sentinel_Blue/COPERNICUS_S2_SR_20200402T012651_20200402T012651_T54SUE.tif') as src:
    blue = src.read()

#Visualisierung
plt.figure(figsize=(15, 10))
plt.subplot(131); plt.imshow(red[0], cmap='Reds'); plt.title('Red')
plt.subplot(132); plt.imshow(green[0], cmap='Greens'); plt.title('Green')
plt.subplot(133); plt.imshow(blue[0], cmap='Blues'); plt.title('Blue')

Optisches Bild von Tokio (um den Kaiserpalast) (rotes Band, grünes Band, blaues Band) image.png

#RGB-Zusammensetzung
## np.Verbinden Sie sich mit dstack (Rot, Green,Beachten Sie die Reihenfolge von Blau)
rgb = np.dstack((red[0], green[0], blue[0]))

#Visualisierung des zusammengesetzten RGB-Bildes
plt.imshow(rgb); plt.title('RGB Image')

Optisches Bild von Tokio (rund um den Kaiserpalast) (RGB-Komposition) image.png

――Bei der Synthese von RGB sieht es aus wie ein Satellitenbild. ――Dieses Mal haben wir nur zu einem bestimmten Zeitpunkt visualisiert, aber Daten können zu jedem Zeitpunkt innerhalb des Zeitraums erfasst werden, in dem der künstliche Satellit in Betrieb ist. ――Es scheint, dass Sie verschiedene Dinge sehen können, indem Sie die Jahreszeiten ändern oder vor und nach der Katastrophe vergleichen (optische Bilder können leicht von Wolken beeinflusst werden, sodass die Bilder in der Regenzeit oder bei schlechtem Wetter unklar werden können. Es gibt)

Satellitendatenanalyse ② ~ Vegetationsindex ~

Überblick

――Indikator, der die Verteilung und Aktivität von Pflanzen anzeigt --Messen Sie mit einem Sensor mit einer Wellenlänge, die leicht auf Pflanzen reagiert

Datensatz

Code

##Parameter angeben
#Bestimmen Sie einen Satelliten
snippet = 'MODIS/006/MOD13Q1'
#Geben Sie den Bandnamen an
band = 'NDVI'

#Geben Sie den Zeitraum an
from_date='2005-01-01'
to_date='2005-12-31'
#Bereich angeben(Geben Sie den Breiten- / Längengrad für das Gebiet Japan an)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

#Ordnername zum Speichern
dir_name = 'GEE_NDVI'
#Auflösung
scale = 250

##Ausführung der Verarbeitung----------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

##Alle speichern (Dateiname verwendet Satelliten-ID)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

```python
## Parameter angeben
# Bestimmen Sie einen Satelliten
snippet = 'MODIS/006/MOD13Q1'
# Geben Sie den Bandnamen an
band = 'NDVI'
# Geben Sie den Zeitraum an
from_date='2005-01-01'
to_date='2005-12-31'
# Gebiet angeben (Breiten- / Längengrad für Japan angeben)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

# Ordnername zum Speichern
dir_name = 'GEE_NDVI'
# Auflösung
scale = 250

## Ausführung der Verarbeitung --------------------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

## Alle speichern (Dateiname verwendet Satelliten-ID)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

-Ich werde die erfassten Daten auf die gleiche Weise lesen und visualisieren

# Daten lesen
with rasterio.open('/content/drive/My Drive/GEE_NDVI/MODIS_006_MOD13Q1_2005_01_01.tif') as src:
    arr = src.read()

# Visualisierung
plt.figure(figsize=(20, 8))
plt.subplot(121); plt.imshow(rgb); plt.title('RGB Image'); plt.title('Optical Image')
plt.subplot(122); plt.imshow(arr[0], cmap='YlGn'); plt.title('NDVI')

Optisches RGB-Bild und Vegetationsindex von Tokio (rund um den Kaiserpalast) image.png

-Der Vegetationsindex im Kaiserpalast und in den Parks in Tokio ist hoch. -Als nächstes visualisieren wir alle Daten des erfassten Zeitraums (1 Jahr im Jahr 2005). -Im Allgemeinen ist die Vegetation Frühsommer~Es wird im Herbst aktiviert und nimmt im Winter ab. Überprüfen wir also, wie es aussieht.

# Visualisierung in chronologischer Reihenfolge
files = glob.glob('/content/drive/My Drive/GEE_NDVI/*tif')
files.sort()

plt.figure(figsize=(15, 10))
j=0
for i in range(len(files)):
 # Bilder einzeln erfassen und visualisieren
  with rasterio.open(files[i]) as src:
      arr = src.read()
 j + = 1 # Verschieben und platzieren Sie die Plotposition des Bildes
  plt.subplot(5,6,j)
  plt.imshow(arr[0], cmap='YlGn', vmin=-2000, vmax=10000)
 plt.title (files [i] [-14:]) # Datum vom Dateinamen abrufen
  plt.tight_layout()

Änderungen des Vegetationsindex in Tokio (rund um den Kaiserpalast) (Januar)~Dezember) image.png

# Holen Sie sich den Gesamtwert von NDVI in der Region
sum_NDVI = []
label_NDVI = []
for i in range(len(files)):
 # Bilder einzeln erfassen und visualisieren
  with rasterio.open(files[i]) as src:
      arr = src.read()
  sum_NDVI.append(arr.sum())
  label_NDVI.append(files[i][-14:-4])

# Visualisierung
fig,ax = plt.subplots(figsize=(15,3))
plt.plot(sum_NDVI, marker='o')
ax.set_xticks(np.arange(0,23))
ax.set_xticklabels(label_NDVI, rotation=90)
plt.show()

Änderungen des Vegetationsindex (Januar)~Dezember) image.png

-Sie können sehen, wie der Vegetationsindex im Sommer seinen Höhepunkt erreicht -Es ist möglich, dass der Juni ein großes Phänomen ist, weil der Satellit aufgrund des Einflusses der Regenzeit (Wolken) keine korrekten Daten erfassen kann. -Der Schwachpunkt optischer Satelliten besteht darin, dass sie leicht von Wolken betroffen sind, aber den Vorteil haben, dass sie eine Vielzahl von Informationen erfassen können (andererseits gibt es Satelliten namens SAR, die nicht von Wolken betroffen sind). -Da es schwierig ist, die Änderung der Saisonalität in einem einzigen Jahr zu verstehen, habe ich 15 Jahre lang versucht, die Daten zu erfassen und zu visualisieren. -Wenn Sie auch den gleitenden Durchschnitt anzeigen, können Sie die saisonalen Änderungen im Vegetationsindex deutlicher erkennen.

Veränderungen des Vegetationsindex (seit 15 Jahren) image.png

##Satellitendatenanalyse ③~Bodenoberflächentemperatur~ ###Überblick

###Datensatz -Satellit= "Terra(MODIS)" -Band= LST (Land Surface Temerature) -Auflösung: 1000m -Bereich:Tokio (hauptsächlich der Kaiserpalast)

###Code -Versuchen Sie, LST zu erhalten, indem Sie verschiedene Parameter ändern -Visualisieren Sie die erfassten Daten auf die gleiche Weise

## Parameter angeben
# Bestimmen Sie einen Satelliten
snippet = 'MODIS/006/MOD11A2'
# Geben Sie den Bandnamen an
band = 'LST_Day_1km'

# Geben Sie den Zeitraum an
from_date='2005-01-01'
to_date='2005-12-31'
# Gebiet angeben (Breiten- / Längengrad für Japan angeben)
geometry = ee.Geometry.Rectangle([139.686, 35.655, 139.796, 35.719])

# Ordnername zum Speichern
dir_name = 'GEE_LST'
# Auflösung
scale = 1000

## Ausführung der Verarbeitung --------------------------------------------------------
num_data, data_list = load_data(snippet=snippet, from_date=from_date, to_date=to_date, geometry=geometry, band=band)
print('#Datasets; ', num_data)

## Alle speichern (Dateiname verwendet Satelliten-ID)
for i in range(data_list.size().getInfo()):
    image = ee.Image(data_list.get(i))
    save_on_gdrive(image, geometry, dir_name, image.getInfo()['id'].replace('/', '_'), scale)

# Daten lesen
with rasterio.open('/content/drive/My Drive/GEE_LST/MODIS_006_MOD11A2_2005_08_05.tif') as src:
    arr = src.read()

# Visualisierung
plt.figure(figsize=(20, 8))
plt.subplot(121); plt.imshow(rgb); plt.title('RGB Image'); plt.title('Optical Image')
plt.subplot(122); plt.imshow(arr[0], cmap='inferno'); plt.title('Land Surface Temperature')

Optisches RGB-Bild und Bodenoberflächentemperatur in Tokio (rund um den Kaiserpalast) image.png -Es ist etwas schwer zu verstehen, da die Auflösung im Vergleich zu anderen Daten niedrig ist. -Betrachtet man alle anwendbaren Zeiträume, so scheint es, dass die Temperatur auf der Westseite tendenziell höher ist. -Eines der Merkmale der Bodenoberflächentemperatur ist, dass bei hoher Zeitauflösung (Daten werden häufig erfasst) viele Bilder vorhanden sind, für die Daten aufgrund des Einflusses von Wolken nicht korrekt erfasst werden können.

Änderungen der Oberflächentemperatur in Tokio (rund um den Kaiserpalast) (Januar)~Dezember) image.png

Änderungen der Oberflächentemperatur in Tokio (rund um den Kaiserpalast) (seit 15 Jahren) image.png

-Ich habe auch Langzeitdaten sowie den Vegetationsindex erfasst und versucht, diese einschließlich des gleitenden Durchschnitts zu visualisieren. -Wie die Vegetation scheint sie saisonal zu sein (höher im Sommer und niedriger im Winter) -Da die Auflösung niedrig ist, scheint es besser, die Bodenoberflächentemperatur über einen größeren Bereich zu berechnen und den globalen Trend zu analysieren.

##schließlich -Einführung einer typischen Satellitenbildanalyse mit Google Earth Engine und Google Colab -Durch Verwendung von GEE und Colab wie oben beschrieben,**Verschiedene Satellitendaten können einfach durch Ändern des Variablennamens des Satellitennamens oder des Bandnamens analysiert werden.Ich denke du kannst sehen -EbenfallsNach dem Erfassen von Satellitendaten können Sie die praktische Analysebibliothek von Python in derselben Umgebung verwenden.**Ist sehr praktisch -In der eigentlichen Analyse wird eine detaillierte Vorverarbeitung gemäß den Anforderungen hinzugefügt und ein Modell erstellt, um die Verzerrung zu beseitigen. Durch die Verwendung dieser Dienste wird der anfängliche Einführungsschritt jedoch erheblich vereinfacht. Ich denke ich kann es schaffen -Ebenfalls,Analyse des Hochladens von Geschäftsdaten auf Google Drive und deren Zusammenführung mit Satellitendaten auf ColabScheint einfach zu machen -Ich hoffe, dieser Artikel wird Ihnen helfen, künstliche Satellitendaten in verschiedenen Bereichen zu nutzen.

Recommended Posts

[Fortsetzung] Künstliche Satellitenbildanalyse von Google Earth Engine und Google Colab-Satellitenbildanalyse ab kostenlos (Übung) -
Kostenlose künstliche Satellitenbildanalyse mit Google Earth Engine und Google Colab-Satellitenbildanalyse (Einführung) -