Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python

supposition

Un programme qui calcule le NDVI (indice de végétation) à l'aide d'un outil SIG appelé Arcgis L'indice de végétation est un indice qui montre simplement la quantité et l'activité des plantes en utilisant les caractéristiques de réflexion de la lumière des plantes. L'éditeur utilisé était Jupyter et le langage était Python.

Préparation

Inscrivez-vous pour utiliser l'API Arcgis Rest en vous référant à l'URL ci-dessous Client ID Client Secret J'en utiliserai deux plus tard.

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

code

import pandas as pd
import requests
import urllib.request

#Réglez pour que l'affichage dans Pandas ne soit pas omis
pd.set_option("max_columns", 100)
pd.set_option('max_rows',1000)
pd.set_option('max_info_columns',100)

Tout d'abord, importez la bibliothèque

ARCGIS_CLIENT_ID = ''
ARCGIS_CLIENT_SECRET = ''

Enregistrer CLIENT_ID et CLIENT_SECRET obtenus au moment de l'enregistrement en tant que variables d'environnement

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

Définir une fonction pour obtenir access_token Obligatoire lors de l'accès à l'API

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

・ Field_center Coordonnées du terrain où vous souhaitez mesurer le NDVI Il est également possible de passer plusieurs coordonnées

・ Satellite_date Quand vous voulez des données

・ Arcgis_token Jeton pour accéder à l'API

#points
#Utilisé lorsque vous souhaitez collecter des données de longueur d'onde satellite en plusieurs points
#Ici, nous utilisons un satellite européen appelé 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

・ "Points": field_center, 'spatialReference': {'wkid': 4326}} Coordonnées spécifiées précédemment Il existe différents systèmes de coordonnées lors de l'expression des informations de position, mais wkid définit le système de coordonnées à utiliser. 4326 est un système de coordonnées géographiques et est un système de coordonnées obtenu par GPS.

・ 'Catégorie = 1 ET couverture nuageuse <= 0,10' Parfois, une image grise, qui est une image d'arrière-plan, est renvoyée, spécifiez donc la catégorie de sorte que seules les images satellite soient renvoyées. Spécifiez la couverture nuageuse et spécifiez une image satellite avec moins de 10% de nuages

・ 'SortValue': date_ satellite, La date que vous avez spécifiée précédemment

・ Jeton ': arcgis_token,' returnFirstValueOnly ':' true ', Le jeton que j'ai eu plus tôt Puisque l'API est très lourde, spécifiez ici pour ne renvoyer que la première valeur

Consultez la documentation officielle pour les spécifications détaillées de l'API (assez déroutantes) 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 est une valeur de retour et renvoie une nouvelle instance, alors réaffectez
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'])

Formatez les données renvoyées, faites-en un type de trame de données pandas, calculez le NDVI et ajoutez-le à la colonne Dans le cas de Sentinel, la bande 4 est la plage de longueurs d'onde rouge et la bande 8 est la plage de longueurs d'onde du proche infrarouge.

Screen Shot 2019-11-26 at 9.33.42.png

Vous pouvez calculer le NDVI comme ceci

Les références https://developers.arcgis.com/rest/services-reference/get-samples.htm https://qiita.com/boiledorange73/items/b98d3d1ef3abf7299aba

Recommended Posts

Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python
[Python] Extraction / combinaison de données aléatoires à partir de DataFrame en utilisant random et pandas
De Python à l'utilisation de MeCab (et CaboCha)
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Nettoyage des données à l'aide de Python
Visualisez les données réseau à partir d'IPython Notebook à l'aide de Cytoscape Partie 1
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Aplatir à l'aide du rendement Python de
[Introduction] Analyse de données satellitaires artificielles à l'aide de Python (environnement Google Colab)
Récupérer les données souhaitées du site Web en liant Python et Excel
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
Analyse de données à l'aide de pandas python
Tirez en accéléré à partir d'une caméra PC en utilisant Python, OpenCV
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Collectez des informations sur les produits et traitez les données à l'aide de l'API de recherche de produits Rakuten [Python]
Python: exclure les balises des données html
Acquisition de données à l'aide de l'API googlemap de python
Frappez les données du trésor de Python Pandas
Utilisation de Rstan de Python avec PypeR
Obtenir des données de Quandl en Python
Authentification à l'aide de l'authentification des utilisateurs tweepy et de l'authentification d'application (Python)
Python, rendement, retour et parfois rendement de
Remarques sur l'utilisation de MeCab depuis Python
Lire et utiliser des fichiers Python à partir de Python
À propos de Python, à partir et à l'importation, comme
Utiliser Cloud Storage depuis Python3 (Introduction)
Hashing de données en R et Python
Clustering et visualisation à l'aide de Python et CytoScape
Exécutez Ansible à partir de Python à l'aide de l'API
Obtenez des données de Twitter avec Tweepy
Précautions lors de l'utilisation de phantomjs de python
Accéder aux feuilles de calcul à partir de Python à l'aide d'OAuth 2.0
Essayez d'utiliser Amazon DynamoDB à partir de Python
Échangez facilement des données entre Python, R et Julia à l'aide du format Feather
Acquisition et visualisation des données de capteurs pour la croissance des plantes avec Intel Edison et Python
Précautions et gestion des erreurs lors de l'appel de la DLL .NET à partir de python à l'aide de pythonnet
Créez un arbre de décision à partir de 0 avec Python et comprenez-le (4. Structure des données)
Construction de pipeline de données avec Python et Luigi
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
[Note] Obtenir des données de PostgreSQL avec Python
Utiliser le type de données PostgreSQL (jsonb) à partir de Python
Python: lecture de données JSON à partir de l'API Web
Utilisation de Python et MeCab avec Azure Databricks
Acquisition des données de croissance des plantes Acquisition des données des capteurs
Structure de données Python et implémentation interne ~ Liste ~
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Visualisez les ressources du serveur à l'aide d'InfluxDB et Grafana
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Structure et fonctionnement des données Python (mémo d'apprentissage Python ③)
Portage et modification du solveur de doublets de python2 vers python3.
[Python] Application Web à partir de 0! Pratique (4) - Mise en forme des données-
[Python] Divers traitements de données utilisant le tableau Numpy
Représentez facilement des données graphiques dans le shell et Python
Compressez les données python et écrivez sur sqlite
Collectez des données à l'aide de scrapy et remplissez mongoDB
J'utilise tox et Python 3.3 avec Travis-CI
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data