Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python

Annahme

Ein Programm, das NDVI (Vegetationsindex) mit einem GIS-Tool namens Arcgis berechnet Der Vegetationsindex ist ein Index, der lediglich die Menge und Aktivität von Pflanzen unter Verwendung der Eigenschaften der Lichtreflexion von Pflanzen anzeigt. Der verwendete Editor war Jupyter und die Sprache war Python.

Vorbereitung

Registrieren Sie sich für die Verwendung der Arcgis Rest-API unter der folgenden URL Client ID Client Secret Ich werde später zwei davon verwenden.

https://developers.arcgis.com/labs/rest/get-an-access-token/

Code

import pandas as pd
import requests
import urllib.request

#Stellen Sie so ein, dass die Anzeige in Pandas nicht ausgelassen wird
pd.set_option("max_columns", 100)
pd.set_option('max_rows',1000)
pd.set_option('max_info_columns',100)

Importieren Sie zunächst die Bibliothek

ARCGIS_CLIENT_ID = ''
ARCGIS_CLIENT_SECRET = ''

Registrieren Sie CLIENT_ID und CLIENT_SECRET, die zum Zeitpunkt der Registrierung als Umgebungsvariablen erhalten wurden

def get_arcgis_token():
    response = requests.get('https://www.arcgis.com/sharing/rest/oauth2/token/',
                            params = {'client_id' : ARCGIS_CLIENT_ID,
                                              'client_secret': ARCGIS_CLIENT_SECRET,
                                              'grant_type': 'client_credentials'})
    arcgis_token = response.json()['access_token']
    return arcgis_token

Definieren Sie eine Funktion, um access_token zu erhalten Erforderlich beim Zugriff auf die API

field_center =[[120.095415,40.345695]]
satellite_date = '2019/05/20'
arcgis_token = get_arcgis_token()

・ Field_center Koordinaten des Landes, in dem Sie den NDVI messen möchten Es ist auch möglich, mehrere Koordinaten zu übergeben

・ Satellitendatum Wenn Sie Daten wollen

・ Arcgis_token Token für den Zugriff auf die API

#points
#Wird verwendet, wenn Sie Satellitenwellenlängendaten an mehreren Punkten erfassen möchten
#Hier verwenden wir einen europäischen Satelliten namens Sentinel
def get_sentinel_sample(arcgis_token):
    response = requests.get('https://sentinel.arcgis.com/arcgis/rest/services/Sentinel2/ImageServer/getSamples',
                        params = urllib.parse.urlencode({'geometryType' : 'esriGeometryMultiPoint',
                           'geometry': { "points":field_center, 'spatialReference': { 'wkid': 4326}},
                           'mosaicRule': {'mosaicMethod': 'esriMosaicAttribute',
                                                  'where': 'category = 1 AND cloudcover <= 0.10',
                                                  'sortField': 'acquisitionDate',
                                                  'sortValue': satellite_date,
                                                  'ascending': 'true' 
                                                   },
                            'token': arcgis_token,
                            'returnFirstValueOnly': 'true',
                            'f': 'json' }))
    sent_sample = response.json()
    return sent_sample

・ "Punkte": field_center, 'räumliche Referenz': {'wkid': 4326}} Zuvor angegebene Koordinaten Es gibt verschiedene Koordinatensysteme beim Ausdrücken von Positionsinformationen, aber wkid definiert, welches Koordinatensystem verwendet werden soll. 4326 ist ein geografisches Koordinatensystem und ein durch GPS erhaltenes Koordinatensystem.

・ 'Kategorie = 1 UND Wolkendecke <= 0,10' Gelegentlich wird ein graues Bild zurückgegeben, bei dem es sich um ein Hintergrundbild handelt. Geben Sie daher die Kategorie an, damit nur Satellitenbilder zurückgegeben werden. Geben Sie die Wolkendecke und ein Satellitenbild mit weniger als 10% Wolke an

・ 'SortValue': Satellitendatum, Das zuvor angegebene Datum

・ Token ': arcgis_token,' returnFirstValueOnly ':' true ', Das Zeichen, das ich früher bekommen habe Da die API sehr schwer ist, geben Sie hier an, dass nur der erste Wert zurückgegeben wird

Detaillierte API-Spezifikationen finden Sie in der offiziellen Dokumentation (ziemlich verwirrend). https://developers.arcgis.com/rest/services-reference/get-samples.htm

sent_sample = get_sentinel_sample(arcgis_token)
sat_val = sent_sample['samples'][0][('value')]
df_sat_band = pd.DataFrame(columns=['band1','band2','band3','band4','band5','band6','band7','band8','band8a','band9','band10','band11','band12'])
band_val = pd.Series([int(strip_num.strip()) for strip_num in sat_val.split()],index=df_sat_band.columns)
#append ist ein Rückgabewert und gibt eine neue Instanz zurück
df_sat_band  = df_sat_band.append(band_val, ignore_index=True)
df_sat_band['NDVI'] = (df_sat_band['band8'] - df_sat_band['band4']) /(df_sat_band['band8'] + df_sat_band['band4'])

Formatieren Sie die zurückgegebenen Daten, machen Sie sie zu einem Pandas-Datenrahmentyp, berechnen Sie den NDVI und fügen Sie ihn der Spalte hinzu Im Fall von Sentinel ist Band 4 der rote Wellenlängenbereich und Band 8 der Wellenlängenbereich im nahen Infrarot.

Screen Shot 2019-11-26 at 9.33.42.png

Sie können den NDVI so berechnen

Verweise https://developers.arcgis.com/rest/services-reference/get-samples.htm https://qiita.com/boiledorange73/items/b98d3d1ef3abf7299aba

Recommended Posts

Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python
[Python] Zufällige Datenextraktion / -kombination aus DataFrame mit Random und Pandas
Von Python bis zur Verwendung von MeCab (und CaboCha)
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Datenbereinigung mit Python
Visualisieren Sie Netzwerkdaten aus IPython Notebook mit Cytoscape Part 1
Holen Sie sich Dateien von Linux mit paramiko und scp [Python]
Mit Python abflachen
[Einführung] Künstliche Satellitendatenanalyse mit Python (Google Colab-Umgebung)
Scrapen der gewünschten Daten von der Website durch Verknüpfen von Python und Excel
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Datenanalyse mit Python-Pandas
Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
Sammeln Sie Produktinformationen und Prozessdaten mit der Rakuten-Produktsuch-API [Python].
Python: Tags von HTML-Daten ausschließen
Datenerfassung mit Python Googlemap API
Hit Schatzdaten von Python Pandas
Verwenden von Rstan aus Python mit PypeR
Authentifizierung mit Tweepy-User-Authentifizierung und Anwendungsauthentifizierung (Python)
Python, Ausbeute, Rückkehr und manchmal Ausbeute von
Hinweise zur Verwendung von MeCab aus Python
Lesen und verwenden Sie Python-Dateien aus Python
Über Python, aus und importieren, als
Verwenden von Cloud-Speicher aus Python3 (Einführung)
Hashing von Daten in R und Python
Clustering und Visualisierung mit Python und CytoScape
Führen Sie Ansible über Python mithilfe der API aus
Holen Sie sich Daten von Twitter mit Tweepy
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Greifen Sie mit OAuth 2.0 von Python aus auf Tabellenkalkulationen zu
Versuchen Sie es mit Amazon DynamoDB von Python
Einfacher Datenaustausch zwischen Python, R und Julia im Feather-Format
Erfassung und Visualisierung von Sensordaten für das Pflanzenwachstum mit Intel Edison und Python
Vorsichtsmaßnahmen und Fehlerbehandlung beim Aufrufen der .NET-DLL aus Python mit Pythonnet
Machen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (4. Datenstruktur)
Datenpipeline-Aufbau mit Python und Luigi
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
[Hinweis] Mit Python Daten von PostgreSQL abrufen
Verwenden Sie den PostgreSQL-Datentyp (jsonb) von Python
Python: Lesen von JSON-Daten von der Web-API
Verwenden von Python und MeCab mit Azure Databricks
Erfassung von Pflanzenwachstumsdaten Erfassung von Daten von Sensoren
Python-Datenstruktur und interne Implementierung ~ Liste ~
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Visualisieren Sie Serverressourcen mit InfluxDB und Grafana
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Struktur und Betrieb der Python-Daten (Python-Lernnotiz ③)
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
[Python] Webanwendung von 0! Hands-on (4) -Datenformung-
[Python] Verschiedene Datenverarbeitung mit Numpy-Array
Zeichnen Sie Daten einfach in Shell und Python
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
Sammeln Sie Daten mit Scrapy und füllen Sie mongoDB
Ich verwende Tox und Python 3.3 mit Travis-CI
Erstellen einer Google-Tabelle mit der Python / Google Data-API