התקנת Python – Notebook של Colab

אפשר לפרוס את Earth Engine Python API ב-notebook של Google Colaboratory. קובצי notebook של Colab הם קובצי notebook של Jupyter שפועלים בענן ומשולבים באופן הדוק עם Google Drive, כך שקל להגדיר אותם, לגשת אליהם ולשתף אותם. אם אתם לא מכירים את Google Colab או קובצי notebook של Jupyter, כדאי להקדיש זמן ללימוד אתר קבלת הפנים של Colab.

בקטעים הבאים מתואר איך פורסים את Earth Engine ב-Google Colab ואיך יוצרים ויזואליזציה של מפות ושל תרשימים באמצעות חבילות Python של צד שלישי.

פתיחת notebook של Colab

אפשר לפתוח קובצי notebook מ-Google Drive או מממשק Colaboratory.

תיקיית Notebook חדשה

Google Drive

פותחים את Google Drive ויוצרים קובץ חדש.

  • חדש > עוד > Colaboratory
  • לוחצים לחיצה ימנית בתיקייה ובוחרים באפשרות עוד > Colaboratory בתפריט ההקשר.

ממשק Colab

נכנסים לאתר Colab ויוצרים קובץ חדש.

  • קובץ > חדש > מחברת חדשה של Python 3
  • אם הייתה לכם אינטראקציה עם Colab בעבר, כשתיכנסו לאתר שמקושר למעלה יופיע סייר קבצים שבו תוכלו להתחיל קובץ חדש באמצעות התפריט הנפתח בחלק התחתון של החלון.

מחברת קיימת

אפשר לפתוח קבצים קיימים של מחברות (.ipynb) מ-Google Drive ומממשק Colab.

Google Drive

קובצי notebook של Colab יכולים להיות בתיקיות שונות ב-Google Drive, בהתאם למקום שבו נוצרו קובצי ה-notebook. מחברות שנוצרו ב-Google Drive יופיעו בתיקייה שבה הן נוצרו או שאליה הן הועברו. קובצי Notebook שנוצרו מממשק Colab יועברו כברירת מחדל לתיקייה בשם Colab Notebooks, שנוספת אוטומטית לתיקייה 'האחסון שלי' ב-Google Drive כשמתחילים לעבוד עם Colab.

אפשר לזהות קבצים של Colab לפי הסמל הצהוב 'CO' והסיומת '.ipynb'. פותחים קבצים על ידי לחיצה כפולה עליהם ובחירה באפשרות פתיחה באמצעות > Colaboratory מהלחצן שמופיע בחלק העליון של הדף שמתקבל, או על ידי לחיצה ימנית על קובץ ובחירה באפשרות פתיחה באמצעות > Colaboratory מתפריט ההקשר של הקובץ.

ממשק Colab

פתיחת קובצי notebook מממשק Colab מאפשרת לכם לגשת לקבצים קיימים מ-Google Drive, מ-GitHub ומחומרה מקומית. אם תיכנסו לממשק של Colab אחרי השימוש הראשוני, יופיע חלון קופץ של סייר הקבצים. בכרטיסיות בחלק העליון של סייר הקבצים, בוחרים מקור ומנווטים אל קובץ .ipynb שרוצים לפתוח. אפשר גם לגשת לסייר הקבצים מממשק Colab על ידי בחירה באפשרות קובץ > פתיחת notebook או באמצעות מקשי הקיצור Ctrl+O.

ייבוא API וקבלת פרטי כניסה

בקטע הזה מוסבר איך לייבא את Earth Engine Python API ולאמת את הגישה. התוכן הזה זמין גם כ-notebook של Colab:

‫Earth Engine API כלול כברירת מחדל ב-Google Colaboratory, כך שצריך רק לייבא ולאמת אותו. צריך להשלים את השלבים האלה בכל סשן חדש ב-Colab, או אם מפעילים מחדש את ליבת Colab, או אם המכונה הווירטואלית של Colab ממוחזרת בגלל חוסר פעילות.

ייבוא ה-API

מריצים את התא הבא כדי לייבא את ה-API לסשן.

import ee

אימות והפעלה ראשונית

מריצים את הפונקציה ee.Authenticate כדי לאמת את הגישה לשרתי Earth Engine וee.Initialize כדי לאתחל אותה. מוסיפים תא קוד, מזינים את השורות הבאות, עורכים את הפרויקט ומריצים את התא.

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

תתבקשו לאשר גישה לחשבון Earth Engine. פועלים לפי ההוראות שמופיעות בתא כדי להשלים את השלב הזה.

בדיקת ה-API

בודקים את ה-API על ידי הדפסת הגובה של האוורסט. חשוב לזכור שצריך לאתחל את ה-API לפני שמשתמשים בו. מריצים את סקריפט Python הבא בתא חדש.

# Print the elevation of Mount Everest.
dem = ee.Image('USGS/SRTMGL1_003')
xy = ee.Geometry.Point([86.9250, 27.9881])
elev = dem.sample(xy, 30).first().get('elevation').getInfo()
print('Mount Everest elevation (m):', elev)

תרשים להמחשת נתונים במפה

אפשר להציג אובייקטים של ee.Image בתאי פלט של מחברת. בדוגמאות הבאות מוצגת תמונה סטטית ומפה אינטראקטיבית.

תמונה סטטית

המודול IPython.display מכיל את הפונקציה Image, שיכולה להציג את התוצאות של כתובת URL שמייצגת תמונה שנוצרה מקריאה לפונקציה getThumbUrl של Earth Engine. הסקריפט הבא יציג תמונה ממוזערת של מודל גובה גלובלי.

# Import libraries.
import ee
from IPython.display import Image

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

# Import a DEM and display a thumbnail of it.
dem = ee.Image('USGS/SRTMGL1_003')
Image(url=dem.updateMask(dem.gt(0))
  .getThumbUrl({'min': 0, 'max': 4000, 'dimensions': 512,
                'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']}))

מפה אינטראקטיבית

אפשר להשתמש בחבילה folium כדי להציג אובייקטים של ee.Image במפה אינטראקטיבית של Leaflet. ל-Folium אין שיטה שמוגדרת כברירת מחדל לטיפול במשבצות מ-Earth Engine, ולכן צריך להגדיר שיטה כזו ולהוסיף אותה למודול folium.Map לפני השימוש.

הסקריפט הבא מספק דוגמה להוספת שיטה לטיפול באריחים של Earth Engine, ושימוש בה כדי להציג מודל גובה במפה של Leaflet.

# Import libraries.
import ee
import folium

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

# Define a method for displaying Earth Engine image tiles to folium map.
def add_ee_layer(self, ee_image_object, vis_params, name):
  map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)
  folium.raster_layers.TileLayer(
    tiles = map_id_dict['tile_fetcher'].url_format,
    attr = "Map Data © Google Earth Engine",
    name = name,
    overlay = True,
    control = True
  ).add_to(self)

# Add EE drawing method to folium.
folium.Map.add_ee_layer = add_ee_layer

# Fetch an elevation model.
dem = ee.Image('USGS/SRTMGL1_003')
# Set visualization parameters.
vis_params = {
  'min': 0,
  'max': 4000,
  'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']}

# Create a folium map object.
my_map = folium.Map(location=[20, 0], zoom_start=3)

# Add the elevation model to the map object.
my_map.add_ee_layer(dem.updateMask(dem.gt(0)), vis_params, 'DEM')

# Add a layer control panel to the map.
my_map.add_child(folium.LayerControl())

# Display the map.
display(my_map)

המחשה של תרשים

חלק מהפונקציות של Earth Engine יוצרות נתונים טבלאיים שאפשר לשרטט באמצעות חבילות של תצוגה חזותית של נתונים, כמו matplotlib. בדוגמה הבאה מוצגת טבלת נתונים מ-Earth Engine כתרשים פיזור. מידע נוסף זמין במאמר בנושא יצירת תרשימים ב-Colaboratory.

# Import libraries.
import ee
import matplotlib.pyplot as plt

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the Earth Engine module.
ee.Initialize(project='my-project')

# Fetch a Landsat TOA image.
img = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_034033_20000913')

# Select Red and NIR bands, scale them, and sample 500 points.
samp_fc = img.select(['B3','B4']).sample(scale=30, numPixels=500)

# Arrange the sample as a list of lists.
samp_dict = samp_fc.reduceColumns(ee.Reducer.toList().repeat(2), ['B3', 'B4'])
samp_list = ee.List(samp_dict.get('list'))

# Save server-side ee.List as a client-side Python list.
samp_data = samp_list.getInfo()

# Display a scatter plot of Red-NIR sample pairs using matplotlib.
plt.scatter(samp_data[0], samp_data[1], alpha=0.2)
plt.xlabel('Red', fontsize=12)
plt.ylabel('NIR', fontsize=12)
plt.show()