Как ускорить работу JavaScript в Google Earth Engine

Optimization

Оптимизация времени выполнения скриптов Google Earth Engine

Google Earth Engine (GEE) — мощная платформа для анализа крупномасштабных геопространственных данных. Однако пользователи часто сталкиваются с проблемами со временем выполнения, даже если их скрипты кажутся простыми. Сценарий, выполнение которого занимает несколько минут, может повлиять на производительность и задержать получение аналитической информации.

В этом случае пользователь создал простой скрипт для обработки данных Sentinel и Landsat 8. Несмотря на свою простоту, выполнение скрипта занимает около 3-5 минут. Понимание того, почему это происходит и как оптимизировать скрипт, необходимо для эффективной обработки данных.

Производительность сценария GEE зависит от нескольких факторов, включая размер данных, фильтрацию и сложность вычислений. Сокращение времени выполнения предполагает выявление узких мест в сценарии, таких как ненужные операции или большие наборы данных, которые замедляют обработку.

В этой статье будут рассмотрены возможные причины медленного выполнения в GEE и представлены практические советы по оптимизации данного сценария. Реализуя эти стратегии, пользователи могут значительно повысить скорость и производительность своих задач по анализу геопространственных данных.

Команда Пример использования
normalizedDifference() Эта функция используется для расчета таких индексов, как NDVI, NDWI и NDSI, путем вычисления разницы между двумя диапазонами, деленной на их сумму. Это специально для анализа дистанционного зондирования, где необходимы индексы растительности, воды и снега.
filterBounds() Фильтрует коллекцию изображений, чтобы включить только изображения, пересекающие заданную геометрию. В этом случае спутниковые данные ограничиваются областью вокруг определенной точки интереса, что делает обработку более эффективной за счет исключения ненужных данных.
filterDate() Эта команда ограничивает коллекцию изображений определенным диапазоном дат. Для нашей задачи крайне важно проанализировать различия между одним и тем же периодом времени для наборов данных Sentinel и Landsat.
addBands() Добавляет новые рассчитанные полосы (например, NDVI, NDWI и NDSI) к каждому изображению в коллекции. Это важно для применения нескольких индексов к одной и той же коллекции изображений без создания отдельных наборов данных.
unmask() Заполняет замаскированные пиксели указанным значением. В нашем скрипте он используется для разоблачения постоянных акваторий, обеспечивая согласованную обработку данных по всему региону.
reduce() Уменьшает коллекцию изображений с помощью указанной функции редуктора, например ee.Reducer.percentile(). Здесь он используется для расчета 30-го процентиля значений пикселей, оптимизируя создание составного изображения.
clip() Обрезает изображение по границам указанной области интереса. Это гарантирует, что будут обработаны только данные, относящиеся к данной области, что ускоряет выполнение.
gt() Эта команда означает «больше чем» и используется для создания двоичных изображений на основе порогового значения. В этом случае выявляются участки с обводненностью более 80%.
map() Применяет функцию к каждому изображению в коллекции. В нашем примере функция addIndices применяется для вычисления NDVI, NDWI и NDSI для всех изображений в коллекции, что упрощает рабочий процесс.

Оптимизация сценариев GEE для повышения эффективности

Целью предоставленного сценария является извлечение и обработка спутниковых изображений из двух разных источников: Sentinel и Landsat. Платформа позволяет пользователям получать доступ к огромным объемам спутниковых данных и применять различные операции, такие как фильтрация, индексирование и визуализация. Одной из ключевых функций, используемых в этом скрипте, является функция, которая используется для расчета важных индексов, таких как NDVI, NDWI и NDSI. Эти индексы имеют решающее значение для анализа растительности, воды и снежного покрова в указанном регионе. Скрипт начинается с определения точки интереса и центрирует карту по ней, используя предоставленные координаты.

Скрипт применяет несколько фильтров, например и , чтобы уменьшить объем обрабатываемых данных и тем самым сократить время выполнения. Например, фильтрбаундс() гарантирует, что будут включены только изображения, пересекающие интересующую область, в то время как фильтрДата() ограничивает изображения определенным диапазоном дат. Это важно для обработки больших наборов данных, таких как изображения Sentinel и Landsat, поскольку минимизирует вычислительную нагрузку. Кроме того, для облачного покрытия помогает отбрасывать изображения со слишком большим количеством облаков, обеспечивая более качественный анализ.

Одним из важных аспектов сценария является Функция, которая добавляет к изображениям рассчитанные индексы (NDVI, NDWI, NDSI), делая их доступными для дальнейшего анализа. Сценарий также включает в себя постоянную водную маску, используя данные из набора данных JRC Global Surface Water. Маска воды помогает исключить области с высоким содержанием воды (более 80%), что в противном случае могло бы исказить результаты анализа растительности и снега. Это делается через и функции, которые позволяют скрипту изолировать области на основе значений пикселей.

Наконец, скрипт использует функция с редуктором процентилей для создания составного изображения, которое представляет 30-й процентиль выбранных значений пикселей. Затем это составное изображение обрезается до интересующей области и визуализируется на карте с помощью функция. Визуальные параметры определены как для композитов Sentinel, так и для Landsat, что позволяет пользователю просматривать их с соответствующими настройками цвета. Сочетая различные этапы обработки изображений, такие как фильтрация, маскирование и генерация композитов, этот сценарий обеспечивает эффективный способ анализа спутниковых изображений, хотя для сокращения времени выполнения можно применить дополнительную оптимизацию.

Оптимизация выполнения сценариев Google Earth Engine для более быстрой обработки

В этом решении используется Google Earth Engine (GEE) с упором на оптимизацию производительности за счет сокращения времени получения данных и упрощения операций. В качестве языка сценариев используется JavaScript.

var pointJSP = ee.Geometry.Point([86.465263, 20.168076]);
Map.centerObject(pointJSP, 14);
// Combine date variables for flexibility
var startDate = '2024-02-01';
var endDate = '2024-03-01';
// Function to add NDVI, NDWI, NDSI
var addIndices = function(image) {
  var ndvi = image.normalizedDifference(['NIR', 'RED']).rename('NDVI');
  var ndwi = image.normalizedDifference(['NIR', 'SWIR1']).rename('NDWI');
  var ndsi = image.normalizedDifference(['SWIR1', 'SWIR2']).rename('NDSI');
  return image.addBands(ndvi).addBands(ndwi).addBands(ndsi);
};
// Use fewer data points by filtering for cloud-free pixels only once
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(pointJSP)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30));

Использование эффективной обработки данных для GEE для минимизации задержек сценариев

Это решение объединяет оптимизированную обработку данных путем объединения расчетов индексов и пороговых значений. Для обработки Google Earth Engine применяется JavaScript.

var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
  .filterBounds(pointJSP)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUD_COVER', 30));
// Apply water mask for permanent water areas
var waterMask = ee.Image('JRC/GSW1_4/GlobalSurfaceWater').select('occurrence').gt(80).unmask();
// Add indices to Landsat 8 imagery
var landsatIndices = landsat8.map(addIndices);
var composite = landsatIndices.reduce(ee.Reducer.percentile([30])).clip(pointJSP).mask(waterMask.eq(0));
Map.addLayer(composite, {bands: ['RED', 'GREEN', 'BLUE'], min: 0, max: 3000}, 'Landsat Composite');
Map.addLayer(waterMask, {min: 0, max: 1, palette: ['white', 'blue']}, 'Water Mask', false);

Повышение эффективности сценариев дистанционного зондирования

Одним из ключевых моментов при работе со сценариями Google Earth Engine (GEE) является обеспечение эффективной обработки операций. Хотя использование больших наборов данных, таких как Sentinel и Landsat, является обычным явлением при анализе окружающей среды, сам объем данных может замедлить выполнение сценариев. Одним из способов повышения производительности является обеспечение обработки только необходимых данных. Используя такие команды, как и минимизирует размер набора данных, что помогает оптимизировать вычисления. Выбор определенных диапазонов дат и географических регионов может значительно сократить время выполнения.

Еще один аспект, влияющий на производительность сценария GEE, — это способ обработки данных. В примере сценария используется функция для расчета важных индексов, таких как NDVI, NDWI и NDSI. Эти индексы добавляются в коллекции изображений в виде полос, что позволяет провести более тщательный анализ. Однако распространенной ошибкой является применение таких функций ко всему набору данных без предварительной фильтрации. Крайне важно применять такие операции после фильтрации, чтобы избежать ненужных вычислений с нерелевантными данными.

Визуализация — еще один элемент сценария, который можно оптимизировать. Добавление слишком большого количества слоев или сложных визуализаций может привести к увеличению времени обработки. Сценарий использует предопределенные визуальные параметры для рендеринга композитов, но производительность можно повысить, отключив определенные слои, если они явно не нужны. Это помогает сохранить легкость сценария, сохраняя при этом его функциональность. С использованием команды также гарантируют, что будет визуализирована только необходимая область, что снижает общую нагрузку на обработку.

  1. Как повысить производительность сценариев GEE?
  2. Оптимизировать использование , и уменьшите размер набора данных перед обработкой.
  3. Почему мой сценарий GEE выполняется так долго?
  4. Большие наборы данных и сложные вычисления могут замедлить выполнение. Использовать и ограничить обработку соответствующими областями.
  5. Могу ли я уменьшить количество изображений, обрабатываемых в GEE?
  6. Да, подав заявку для облачного покрытия и сосредоточиться на конкретных периодах.
  7. Как я могу упростить вычисления индекса в своем скрипте?
  8. Используйте такую ​​функцию, как чтобы упростить добавление нескольких индексов (например, NDVI, NDWI) за один шаг.
  9. Можно ли визуализировать только существенные слои?
  10. Да, отключите ненужные слои и используйте упрощенные параметры визуализации с помощью для лучшей производительности.

Оптимизация сценариев Google Earth Engine предполагает эффективную обработку больших наборов данных, раннее применение фильтров и сокращение ненужных операций с данными. Сосредоточение внимания на таких важных областях, как фильтрация по и местоположение могут значительно сократить время обработки.

Благодаря включению таких функций, как а используя пороговые маски для исключения ненужных данных, можно еще больше повысить производительность сценария. Эти методы могут упростить выполнение, предлагая более быстрые результаты и лучшее использование платформы Google Earth Engine.

  1. Эта статья была создана с использованием материалов, основанных на официальной документации Google Earth Engine, которая дает представление о методах оптимизации скриптов. Руководства по Google Earth Engine
  2. Дополнительная информация была собрана на форуме сообщества GEE, где предлагались обсуждения и решения для повышения производительности сложных сценариев. Сообщество Google Earth Engine
  3. Лучшие практики обработки больших наборов данных были взяты из литературы и учебных пособий по дистанционному зондированию, доступных по следующей ссылке. Земная обсерватория НАСА