Earth Engine 객체

이제 JavaScript에 익숙해졌으므로 JavaScript 객체와 기본 요소를 Earth Engine 컨테이너에 넣어 서버로 전송하고 Google에서 처리하는 방법을 알아보세요.

문자열

예를 들어 문자열을 정의한 다음 Earth Engine으로 전송할 ee.String() 컨테이너에 넣습니다.

코드 편집기 (JavaScript)

// Define a string, then put it into an EE container.
var aString = 'To the cloud!';
var eeString = ee.String(aString);
print('Where to?', eeString);

ee.Thing는 서버에 있는 항목의 컨테이너라고 생각하면 됩니다. 이 예시에서는 문자열을 먼저 정의한 다음 컨테이너에 넣습니다. 컨테이너와 콘텐츠를 한 번에 정의할 수도 있습니다. 예를 들면 다음과 같습니다.

코드 편집기 (JavaScript)

// Define a string that exists on the server.
var serverString = ee.String('This is on the server.');
print('String on the server:', serverString);

print()의 첫 번째 인수는 클라이언트의 문자열일 뿐이지만 두 번째 인수는 실제로 평가를 위해 서버로 전송된 후 다시 전송됩니다.

숫자

ee.Number()를 사용하여 서버에서 숫자 객체를 만듭니다. 예를 들어 Math.E JavaScript 메서드를 사용하여 서버에 상수 값을 만듭니다.

코드 편집기 (JavaScript)

// Define a number that exists on the server.
var serverNumber = ee.Number(Math.E);
print('e=', serverNumber);

ee.String()ee.Number() 메서드는 생성자입니다. 생성자는 인수를 가져와 (그리고 다른 매개변수도 가능) 컨테이너에 넣고 컨테이너와 그 내용을 코드에서 조작할 수 있는 Earth Engine 객체로 반환합니다. ee로 시작하는 생성자는 Earth Engine 객체를 반환합니다.

Earth Engine 객체의 메서드

Earth Engine 객체를 만든 후에는 Earth Engine 메서드를 사용하여 처리해야 합니다. 이 예에서는 JavaScript의 Math.log()를 사용하여 Earth Engine 객체를 처리할 수 없습니다. ee.Number에 정의된 동등한 메서드를 사용해야 합니다.

코드 편집기 (JavaScript)

// Use a built-in function to perform an operation on the number.
var logE = serverNumber.log();
print('log(e)=', logE);

이 예에서 log()ee.Number 객체의 메서드입니다. (코드 편집기 왼쪽의 문서을 사용하여 모든 Earth Engine 객체 유형(예: ee.Number > log())의 메서드 목록을 확인하세요.) Earth Engine 객체의 메서드는 다른 Earth Engine 객체를 반환합니다.

목록

JavaScript 목록을 서버의 ee.List 객체로 만들려면 숫자와 문자열처럼 JavaScript 리터럴을 컨테이너에 넣으면 됩니다. Earth Engine은 숫자 시퀀스를 만드는 서버 측 편의 메서드도 제공합니다. 예를 들어 다음과 같습니다.

코드 편집기 (JavaScript)

// Make a sequence the hard way.
var eeList = ee.List([1, 2, 3, 4, 5]);
// Make a sequence the easy way!
var sequence = ee.List.sequence(1, 5);
print('Sequence:', sequence);

ee.List 객체는 서버에만 있으므로 Earth Engine에서 제공하는 함수를 사용하여 상호작용합니다. 예를 들어 목록에서 항목을 가져오려면 ee.List 객체의 get() 메서드를 사용합니다.

코드 편집기 (JavaScript)

// Use a method on an ee.List to extract a value.
var value = sequence.get(2);
print('Value at index 2:', value);

전송

메서드에서 반환되는 객체의 유형을 Earth Engine에서 알 수 없는 경우가 있습니다. 프로그래머는 이전 예의 value 변수가 숫자 객체임을 알고 있습니다. 하지만 ee.Numberadd() 메서드를 사용하려고 하면 다음과 같은 오류가 발생합니다.

이는 모든 종류의 Earth Engine 객체를 반환할 수 있는 get() 함수에서 흔히 발생합니다. 이 문제를 수정하려면 ee.Number 생성자를 사용하여 결과를 캐스팅하세요.

코드 편집기 (JavaScript)

// Cast the return value of get() to a number.
print('No error:', ee.Number(value).add(3));

사전

문자열, 숫자, 목록과 마찬가지로 JavaScript 객체에서 Earth Engine Dictionary를 구성할 수 있습니다. 구성 시 JavaScript 기능을 사용하여 Earth Engine 객체를 초기화할 수 있습니다. 이 경우 ee.Dictionary는 JavaScript 리터럴 객체에서 직접 구성됩니다.

코드 편집기 (JavaScript)

// Make a Dictionary on the server.
var dictionary = ee.Dictionary({
  e: Math.E,
  pi: Math.PI,
  phi: (1 + Math.sqrt(5)) / 2
});

// Get some values from the dictionary.
print('Euler:', dictionary.get('e'));
print('Pi:', dictionary.get('pi'));
print('Golden ratio:', dictionary.get('phi'));

// Get all the keys:
print('Keys: ', dictionary.keys());

이 예에서는 ee.Dictionary이 있으면 이전 강의의 JavaScript 사전과 달리 ee.Dictionary의 메서드를 사용하여 값을 가져와야 합니다. 특히 get(key)key와 연결된 값을 반환합니다. get()에서 반환된 객체의 유형은 무엇이든 될 수 있으므로 객체를 출력하는 것 외에 다른 작업을 하려면 올바른 유형으로 변환해야 합니다. keys() 메서드는 ee.List를 반환합니다.

날짜

날짜 객체는 Earth Engine에서 시간을 나타내는 방식입니다. 이전 예와 마찬가지로 JavaScript Date 객체와 Earth Engine ee.Date 객체를 구분하는 것이 중요합니다. 문자열, JavaScript Date에서 또는 ee.Date 클래스에서 제공하는 정적 메서드를 사용하여 ee.Date를 생성합니다. 자세한 내용은 문서의 날짜 섹션을 참고하세요. 이 예에서는 문자열 또는 1970년 1월 1일 자정 이후 밀리초를 나타내는 JavaScript 날짜에서 날짜를 구성하는 방법을 보여줍니다.

코드 편집기 (JavaScript)

// Define a date in Earth Engine.
var date = ee.Date('2015-12-31');
print('Date:', date);

// Get the current time using the JavaScript Date.now() method.
var now = Date.now();
print('Milliseconds since January 1, 1970', now);

// Initialize an ee.Date object.
var eeNow = ee.Date(now);
print('Now:', eeNow);

날짜는 컬렉션을 필터링하는 데 유용하며, 특히 filterDate() 메서드의 인수로 사용됩니다. 컬렉션 정렬에 관한 자세한 내용은 시작 페이지의 이 섹션을 참고하세요.

여담: 이름으로 매개변수 전달

Earth Engine 메서드에 대한 인수는 순서대로 전달할 수 있습니다. 예를 들어 연도, 월, 일에서 ee.Date를 만들려면 fromYMD() 정적 메서드의 매개변수를 연도, 월, 일 순서로 전달하면 됩니다.

코드 편집기 (JavaScript)

var aDate = ee.Date.fromYMD(2017, 1, 13);
print('aDate:', aDate);

또는 순서에 관계없이 이름으로 매개변수를 전달할 수 있습니다. 코드가 더 많아질 수 있지만 가독성과 재사용성을 개선할 수 있습니다. 이름으로 매개변수를 전달하려면 객체의 키가 메서드 매개변수의 이름이고 값이 메서드의 인수인 JavaScript 객체를 전달합니다. 예를 들면 다음과 같습니다.

코드 편집기 (JavaScript)

var theDate = ee.Date.fromYMD({
  day: 13,
  month: 1,
  year: 2017
});
print('theDate:', theDate);

객체 속성 이름 (키)은 ee.Date.fromYMD() 문서에 지정된 이름과 일치합니다. 또한 JavaScript 객체 예시에 설명된 대로 인수로 전달된 객체를 재사용을 위해 변수에 저장할 수 있습니다.

이제 JavaScript에 대한 충분한 소개를 받았으므로 Earth Engine을 사용할 수 있습니다. JavaScript 객체와 Earth Engine 객체에 대한 자세한 설명은 클라이언트와 서버 페이지를 참고하세요.

다음 섹션에서는 Earth Engine에서 for 루프, if/else 조건, 반복을 효과적으로 사용하는 함수형 프로그래밍 개념을 자세히 알아봅니다.