Python 지원
Earth Engine Python 클라이언트 라이브러리는 Google Cloud에서 지원하는 Python 버전과 호환됩니다. 지원은 Python 포인트 출시 일정 (PEP 602, Python 버전 상태)에 따라 매년 업데이트됩니다. 지원되지 않는 Python 버전을 사용하면 인증 실패, 예기치 않은 동작 또는 특정 작업 실패가 발생할 수 있습니다.
설치 옵션
Google Colab을 사용하는 경우 Earth Engine Python 클라이언트 라이브러리의 최신 버전이 pip를 통해 이미 설치되어 있습니다. 다음 노트북을 사용하여 Earth Engine과 Colab을 시작해 보세요.
Colab을 사용하지 않는 경우 conda (권장) 또는 pip를 사용하여 시스템에 Earth Engine 클라이언트 라이브러리를 수동으로 설치하고 업데이트할 수 있습니다.
패키지 가져오기
Python API 패키지는 ee
라고 합니다. 새 Python 세션과 스크립트마다 가져와서 초기화해야 합니다.
import ee
인증 및 초기화
Earth Engine Python 클라이언트 라이브러리를 사용하기 전에 인증을 거쳐 결과 사용자 인증 정보를 사용하여 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())
구문
Python API와 JavaScript API 모두 동일한 서버 측 기능에 액세스하지만 클라이언트 측 표현식 (클라이언트와 서버에 대해 자세히 알아보기)은 언어 문법 차이로 인해 다를 수 있습니다. 다음 표에는 JavaScript API와 관련하여 Python API를 사용할 때 발생하는 일반적인 문법 차이 목록이 나와 있습니다.
속성 | 자바스크립트 | Python |
---|---|---|
함수 정의 |
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 |
Null 값 |
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)
데이터 내보내기
Python API로 데이터를 내보내려면 Export
함수에 대한 인터페이스를 제공하는 ee.batch
모듈을 사용해야 합니다. JavaScript 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()
의 결과는 작업 상태 및 ID와 같은 정보가 포함된 사전입니다.
{ '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
값 목록 및 작업 수명 주기에 관한 자세한 내용은 처리 환경 페이지를 참고하세요.
객체 인쇄
Python에서 Earth Engine 객체를 출력하면 객체 자체가 아니라 객체의 직렬화된 요청이 출력됩니다. 그 이유를 알아보려면 클라이언트와 서버 비교 페이지를 참고하세요.
Earth Engine 객체에서 getInfo()
를 호출하여 서버에서 클라이언트로 원하는 객체를 가져옵니다.
# 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 ui
모듈은 JavaScript API 코드 편집기를 통해서만 사용할 수 있습니다. Python의 UI 요소에 서드 파티 라이브러리를 사용합니다. geemap, Folium, ipyleaflet과 같은 라이브러리는 양방향 지도 표시를 제공하며, Matplotlib, Altair, seaborn 등을 사용하여 차트를 만들 수 있습니다. geemap 및 Matplotlib 사용에 관한 예시는
Colab 설정 노트북의 Earth Engine을 참고하세요.
개발자 가이드의 Python
Python 코드는 Earth Engine 개발자 가이드 전반에 포함되어 있습니다. 가능한 경우 코드 블록 상단의 'Colab (Python)' 탭을 클릭하여 코드 예시를 볼 수 있습니다.
가이드 페이지 상단에는 페이지를 Colab 노트북으로 실행하거나 GitHub에서 볼 수 있는 버튼이 포함될 수도 있습니다. Python 코드 예시는 Google Colab을 사용하여 실행하도록 설계되었습니다. 양방향 지도 및 객체 탐색은 geemap
라이브러리에서 처리합니다. Earth Engine Python 클라이언트 라이브러리와 geemap
는 모두 Colab에 사전 설치되어 있습니다.
Earth Engine 설정
Python 코드를 실행하려면 Earth Engine 라이브러리를 가져오고 인증 및 초기화해야 합니다. 다음 명령어는 예시에서 사용됩니다(대안은 인증 및 초기화 페이지 참고).
import ee ee.Authenticate() ee.Initialize(project='my-project')
geemap
를 사용한 대화형 탐색
geemap
라이브러리는 지도 타일을 표시하고 Earth Engine 객체의 풍부한 표현을 인쇄하는 데 사용됩니다.
이 라이브러리는 이러한 기능에 각각 ipyleaflet
및 eerepr
에 종속됩니다.
geemap
라이브러리와 종속 항목은 Google Colab에 사전 설치되어 있습니다. 각 세션으로 가져옵니다.
import geemap.core as geemap
ee.Image
및 ee.FeatureCollection
와 같은 지리적 Earth Engine 데이터 클래스는 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)