نصب پایتون

پشتیبانی از پایتون

کتابخانه مشتری Earth Engine Python با نسخه های پایتون پشتیبانی شده توسط Google Cloud سازگار است. پشتیبانی سالانه به دنبال برنامه انتشار نقطه پایتون ( PEP 602 ؛ وضعیت نسخه های پایتون ) به روز می شود. استفاده از نسخه های پایتون پشتیبانی نشده ممکن است باعث خرابی احراز هویت، رفتار غیرمنتظره یا شکست برخی عملیات شود.

گزینه ها را نصب کنید

اگر از Google Colab استفاده می‌کنید، آخرین نسخه کتابخانه Earth Engine Python قبلاً نصب شده است (از طریق pip). برای شروع کار با Earth Engine و Colab، نوت بوک زیر را امتحان کنید:

اگر از Colab استفاده نمی کنید، کتابخانه مشتری Earth Engine را می توان به صورت دستی با استفاده از conda (توصیه می شود) یا pip روی سیستم شما نصب و به روز کرد:


API را در یک محیط پایتون دلخواه با استفاده از pip نصب کنید . از یک ترمینال یا خط فرمان:

pip install earthengine-api

پس از نصب، می توانید همانطور که در اینجا توضیح داده شده است، Earth Engine API را وارد، احراز هویت و مقداردهی اولیه کنید.

به روز رسانی API:

pip install earthengine-api --upgrade

واردات بسته

بسته API پایتون ee نام دارد. باید برای هر جلسه و اسکریپت پایتون جدید وارد و مقداردهی شود:

import ee

احراز هویت و مقداردهی اولیه

قبل از استفاده از کتابخانه سرویس گیرنده Earth Engine Python، باید احراز هویت و استفاده از اعتبار حاصله را برای مقداردهی اولیه کلاینت پایتون انجام دهید. اجرا کنید:

ee.Authenticate()

با این کار بهترین حالت احراز هویت برای محیط شما انتخاب می شود و از شما می خواهد که دسترسی به اسکریپت های خود را تأیید کنید. برای مقداردهی اولیه، باید پروژه ای را ارائه دهید که مالک آن هستید یا مجوز استفاده از آن را دارید. این پروژه برای اجرای تمام عملیات Earth Engine استفاده خواهد شد:

ee.Initialize(project='my-project')

راهنمای احراز هویت برای عیب یابی و اطلاعات بیشتر در مورد حالت های احراز هویت و پروژه های Cloud را ببینید.

سلام دنیا!

در اینجا یک اسکریپت کوتاه برای آزمایش این است که شما برای کار با Earth Engine آماده هستید.

import ee
ee.Authenticate()
ee.Initialize(project='my-project')
print(ee.String('Hello from the Earth Engine servers!').getInfo())

نحو

هر دو API پایتون و جاوا اسکریپت به یک عملکرد سمت سرور دسترسی دارند، اما عبارات سمت سرویس گیرنده ( در مورد سرویس گیرنده در مقابل سرور بیشتر بیاموزید ) به دلیل تفاوت های نحوی زبان می تواند متفاوت باشد. جدول زیر شامل لیستی از تفاوت های نحوی رایجی است که هنگام کار با API پایتون نسبت به API جاوا اسکریپت با آنها مواجه خواهید شد.

تفاوت های نحوی رایج بین جاوا اسکریپت و پایتون
اموال جاوا اسکریپت پایتون
تعریف تابع
function myFun(arg) {
  return arg;
}

var myFun = function(arg) {
  return arg;
};
def my_fun(arg):
  return arg
نگاشت تابع ناشناس
var foo = col.map(function(arg) {
  return arg;
});
foo = col.map(lambda arg: arg)
تعریف متغیر
var myVar = 'var';
my_var = 'var'
عملگرهای منطقی
var match = such.and(that);
var match = such.or(that);
var match = such.not(that);
match = such.And(that)
match = such.Or(that)
match = such.Not(that)
زنجیره روش چند خطی
var foo = my.really()
              .reallyLong()
              .methodChain();
foo = (my.really()
       .reallyLong()
       .methodChain())
کلیدهای فرهنگ لغت
var dic = {'key': value};
var dic = {key: value};
dic = {'key': value}
دسترسی به شی دیکشنری
var value = dic.key;
var value = dic['key'];
value = dic['key']
تعریف آرگومان تابع
// Positional arguments.
var foo = fun(argX, argY, argZ);
// Keyword arguments object.
var foo = fun({y: argY});
# Positional arguments.
foo = fun(arg_x, arg_y, arg_z)
# Keyword arguments dictionary.
foo = fun(**{'y': arg_y})
# Keyword arguments.
foo = fun(x=arg_x, z=arg_z)
بولی
var t = true;
var f = false;
t = True
f = False
مقادیر تهی
var na = null;
na = None
نظر دهید
//
#

اشیاء تاریخ

با ماژول datetime اشیاء تاریخ سمت سرویس گیرنده را تعریف و دستکاری کنید. ماژول را در اسکریپت خود قرار دهید:

import datetime

تبدیل ee.Date به تاریخ سمت مشتری:

ee_date = ee.Date('2020-01-01')
py_date = datetime.datetime.utcfromtimestamp(ee_date.getInfo()['value']/1000.0)

تبدیل تاریخ سمت مشتری به ee.Date:

py_date = datetime.datetime.utcnow()
ee_date = ee.Date(py_date)

صادرات داده ها

صادرات داده با API پایتون نیاز به استفاده از ماژول ee.batch دارد که یک رابط برای توابع Export فراهم می کند. آرگومان های پارامتر را همانطور که با API جاوا اسکریپت انجام می دهید، ارسال کنید و به تفاوت های ذکر شده در جدول نحو بالا توجه کنید. وظایف صادراتی باید با فراخوانی متد start() روی یک کار تعریف شده آغاز شود. وضعیت یک کار را با فراخوانی متد status() روی آن پرس و جو کنید. مثال زیر صادرات یک شی ee.Image را نشان می دهد.

ایجاد یک کار صادراتی:

task = ee.batch.Export.image.toDrive(image=my_image,  # an ee.Image object.
                                     region=my_geometry,  # an ee.Geometry object.
                                     description='mock_export',
                                     folder='gdrive_folder',
                                     fileNamePrefix='mock_export',
                                     scale=1000,
                                     crs='EPSG:4326')

یک کار صادراتی را شروع کنید:

task.start()

بررسی وضعیت کار صادرات:

task.status()

نتیجه task.status() دیکشنری حاوی اطلاعاتی مانند وضعیت وظیفه و شناسه آن است.

{
  'state': 'READY',
  'description': 'my_export_task',
  'creation_timestamp_ms': 1647567508236,
  'update_timestamp_ms': 1647567508236,
  'start_timestamp_ms': 0,
  'task_type': 'EXPORT_IMAGE',
  'id': '56TVJIZABUMTD5CJ5YHTMYK4',
  'name': 'projects/earthengine-legacy/operations/56TVJIZABUMTX5CJ5HHTMYK4'
}

می توانید با استفاده از فیلد state ، پیشرفت کار را نظارت کنید. برای فهرستی از مقادیر state و اطلاعات بیشتر در مورد چرخه عمر کار ، صفحه محیط‌های پردازش را ببینید.

چاپ اشیاء

چاپ یک شیء Earth Engine در پایتون درخواست سریالی برای شی را چاپ می کند، نه خود شیء را. برای درک دلیل این موضوع به صفحه Client vs. Server مراجعه کنید.

برای دریافت شی مورد نظر از سرور به مشتری، getInfo() روی اشیاء Earth Engine فراخوانی کنید:

# Load a Landsat image.
img = ee.Image('LANDSAT/LT05/C02/T1_L2/LT05_034033_20000913')

# Print image object WITHOUT call to getInfo(); prints serialized request instructions.
print(img)

# Print image object WITH call to getInfo(); prints image metadata.
print(img.getInfo())
توجه داشته باشید که getInfo() یک عملیات همزمان است، به این معنی که اجرای عبارات پس از فراخوانی getInfo() تا زمانی که نتیجه به مشتری بازگردانده شود مسدود می شود. به‌علاوه، درخواست‌های داده‌های زیاد یا محاسبات گران‌قیمت می‌توانند خطا را برگردانند و/یا هنگ کنند. به طور کلی، بهترین روش این است که نتایج خود را صادر کنید و پس از تکمیل، آنها را برای تجزیه و تحلیل بیشتر در یک اسکریپت جدید وارد کنید.

اشیاء رابط کاربری

ماژول ui Earth Engine فقط از طریق ویرایشگر کد API جاوا اسکریپت در دسترس است. از کتابخانه های شخص ثالث برای عناصر UI در پایتون استفاده کنید. کتابخانه‌هایی مانند geemap ، Folium ، و ipyleaflet نمایش نقشه تعاملی را ارائه می‌دهند، در حالی که ترسیم نمودار را می‌توان با Matplotlib ، Altair یا seaborn انجام داد. برای استفاده از geemap و Matplotlib نمونه‌هایی را در دفترچه راه‌اندازی Earth Engine در Colab ببینید.

پایتون در راهنمای توسعه دهندگان

کد پایتون در سراسر راهنمای توسعه دهنده Earth Engine گنجانده شده است. در صورت وجود، نمونه های کد را می توان با کلیک بر روی تب "Colab (Python)" در بالای بلوک های کد مشاهده کرد. صفحات راهنما همچنین ممکن است شامل دکمه هایی در بالا برای اجرای صفحه به عنوان نوت بوک Colab یا مشاهده در GitHub باشند. در نظر گرفته شده است که نمونه کدهای پایتون با استفاده از Google Colab اجرا شود. نقشه های تعاملی و اکتشاف شی توسط کتابخانه geemap انجام می شود. هم کتابخانه مشتری Earth Engine Python و هم geemap در Colab از قبل نصب شده اند.

راه اندازی موتور زمین

اجرای کد پایتون مستلزم وارد کردن کتابخانه Earth Engine، احراز هویت و مقداردهی اولیه است. دستورات زیر در مثال‌ها استفاده می‌شوند (برای جایگزین‌ها به صفحه احراز هویت و مقداردهی اولیه مراجعه کنید).

import ee
ee.Authenticate()
ee.Initialize(project='my-project')

کاوش تعاملی با geemap

کتابخانه geemap برای نمایش کاشی های نقشه و چاپ نمایش های غنی از اشیاء موتور زمین استفاده می شود. کتابخانه برای این ویژگی ها به ترتیب به ipyleaflet و eerepr وابسته است. کتابخانه geemap و وابستگی‌های آن در Google Colab از قبل نصب شده‌اند. آن را در هر جلسه وارد کنید.

import geemap.core as geemap

کلاس های داده Geographic Earth Engine، مانند ee.Image و ee.FeatureCollection را می توان با استفاده از شی geemap.Map مشاهده کرد. ابتدا شی نقشه را تعریف کنید. سپس، لایه هایی را به آن اضافه کنید یا نمای آن را تغییر دهید.

# Initialize a map object.
m = geemap.Map()

# Define an example image.
img = ee.Image.random()

# Add the image to the map.
m.add_layer(img, None, 'Random image')

# Display the map (you can call the object directly if it is the final line).
display(m)