Opóźnione wykonanie

Dokument Client vs. Server (Klient a serwer) opisuje, jak obiekty odwołujące się do skryptu mogą być po stronie klienta lub serwera. Kompletny skrypt zawiera nie tylko obiekty, których chcesz użyć, ale też zestaw instrukcji, które mówią Earth Engine, co ma z nimi zrobić. Dokument ten opisuje, jak te instrukcje są wysyłane do Google w celu przetwarzania oraz jak wyniki są wysyłane z powrotem do klienta w celu wyświetlenia.

Gdy piszesz skrypt w Earth Engine (w JavaScript lub Pythonie), kod ten NIE jest uruchamiany bezpośrednio na serwerach Earth Engine w Google. Zamiast tego biblioteka klienta koduje skrypt w zbiór obiektów JSON, wysyła je do Google i czeka na odpowiedź. Każdy obiekt reprezentuje zestaw operacji wymaganych do uzyskania określonego wyniku, np. obrazu do wyświetlenia w kliencie. Rozważ ten kod:

Edytor kodu (JavaScript)

var image = ee.Image('CGIAR/SRTM90_V4');
var operation = image.add(10);
print(operation.toString());
print(operation);

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

import ee
import geemap.core as geemap

Colab (Python)

image = ee.Image('CGIAR/SRTM90_V4')
operation = image.add(10)
print(operation)
print(operation.getInfo())

Pierwsze polecenie print wyświetli strukturę JSON, której używa biblioteka klienta do opisu obrazu na serwerze Google:

ee.Image({
  "type": "Invocation",
  "arguments": {
    "image1": {
      "type": "Invocation",
      "arguments": {
        "id": "CGIAR/SRTM90_V4"
      },
      "functionName": "Image.load"
    },
    "image2": {
      "type": "Invocation",
      "arguments": {
        "value": 10
      },
      "functionName": "Image.constant"
    }
  },
  "functionName": "Image.add"
})
    

Drugie polecenie print spowoduje wysłanie żądania do Google i wyświetlenie odpowiedzi POST z serwerów Google. Aby wyświetlić odpowiedź w formacie JSON, kliknij link JSON po prawej stronie konsoli obok wydrukowanego obiektu:

{
  "type": "Image",
  "bands": [
    {
      "id": "elevation",
      "data_type": {
        "type": "PixelType",
        "precision": "int",
        "min": -32758,
        "max": 32777
      },
      "crs": "EPSG:4326",
      "crs_transform": [
        0.0008333333535119891,
        0,
        -180,
        0,
        -0.0008333333535119891,
        60
      ]
    }
  ]
}
    

Do momentu otrzymania prośby o przetworzenie nic nie jest wysyłane do Google. W tym przykładzie wydrukowanie wyniku wywołania getInfo() na obiekcie serwera powoduje wysłanie żądania. Serwer nie przetwarza danych, dopóki nie otrzyma wyraźnego żądania przesłania wyniku. Pamiętaj, że print() w Edytorze kodu JavaScript to specjalna funkcja po stronie klienta, która otacza asynchroniczne wywołanie getInfo(). W przypadku Pythona wywołujemy ją bezpośrednio.

Innym przykładem żądania jest wyświetlanie w elementach Edytora kodu lub mapy Geemap. Gdy to żądanie zostanie wysłane do Google, zwrócone zostaną tylko te elementy, które są niezbędne do wyświetlenia wyniku w Edytorze kodu lub elemencie mapy geemap. Konkretnie, położenie mapy i poziom powiększenia określają, które dane zostaną przetworzone na obrazy, które można wyświetlić na mapie. Jeśli przesuniesz widok lub przybliżysz obraz, inne płytki zostaną obliczone z opóźnieniem. Ten system na żądanie umożliwia równoległe i skuteczne przetwarzanie, ale oznacza też, że obraz wyświetlany na mapie jest tworzony z różnych danych wejściowych w zależności od poziomu powiększenia i położenia granic mapy. Więcej informacji o tym, jak dane wejściowe do obliczeń są określane na podstawie żądania, znajdziesz w dokumencie Scale.