Структура посевных площадей Европейского Союза 2018, 2022.
EUROCROPMAP — это набор высокодетализированных карт землепользования и земельного покрова (LULC) для стран Европейского Союза, созданный Объединённым исследовательским центром Европейской комиссии (JRC).
Описание
EUROCROPMAP — это набор высокодетализированных карт землепользования и земельного покрова (LULC) для стран Европейского Союза, созданный Объединённым исследовательским центром Европейской комиссии (JRC). Первая версия карты была выпущена для 2018 года, а в 2024 году представлено обновление для 2022 года, охватывающее уже 27 стран ЕС, а также Украину. Включает 19 типов сельхозкультур и 7 общих классов покрова. Методология: построен на данных Sentinel-1, Sentinel-2, а также вспомогательных данных о температуре поверхности и рельефе. Обучен на 134 тыс. полигонах данных полевых обследований LUCAS (Land Use and Coverage Area Frame Survey). Использован двухуровневый классификатор Random Forest (сначала 7 классов землепользования, затем детализация пахотных земель до 19 типов культур). Точность: общая точность — 79,3% для 7 классов, 70,6% для 19 культур. Валидация проведена по независимым точкам LUCAS, декларациям фермеров (GSA) и статистике Eurostat; для ряда культур (рапс, сахарная свёкла, кукуруза) Producer’s accuracy превышает 90%. Доступ: бесплатно в каталоге JRC, WMS и Google Earth Engine. Применяется для мониторинга сельского хозяйства, оценки политики и прогнозирования урожайности.
Работа с EUCROPMAP в Zarr на S3
1. Что это за данные
EUCROPMAP — тематическая карта земного покрова Европы. В опубликованном Zarr
переменная eucropmap содержит классы для 2018 и 2022 годов на 10-метровой
сетке EPSG:3035 (ETRS89-extended / LAEA Europe), с измерениями year, y,
x. Ноль означает фон или отсутствие покрытия источниками.
Для 2022 года объединены страты EU27-HR и Украины. В зоне перекрытия
ненулевые значения украинской страты имеют приоритет; это правило записано в
атрибуте mosaic_rule_2022.
2. Zarr, Xarray и ленивое чтение
Zarr хранит массивы чанками, поэтому можно читать только нужный год и окно.
xarray добавляет именованные координаты, CRS и метаданные классов.
Открытие набора не загружает весь массив в память. Данные читаются, когда
нужен результат: после .compute(), .load(), .values или построения
графика.
3. Подготовка окружения
uv (рекомендуется)
uv venv
source .venv/bin/activate
uv pip install "xarray[io]" dask s3fs rioxarray matplotlib geopandas
pip
python -m venv .venv
source .venv/bin/activate
python -m pip install "xarray[io]" dask s3fs rioxarray matplotlib geopandas
4. Подключение к EUCROPMAP на S3
import s3fs
import xarray as xr
s3_endpoint_url = "https://s3.esoil.ru"
store_url = "s3://datasets/eucropmap.zarr"
fs = s3fs.S3FileSystem(
anon=True,
client_kwargs={"endpoint_url": s3_endpoint_url},
)
ds = xr.open_zarr(
fs.get_mapper(store_url),
chunks="auto",
consolidated=None,
)
consolidated=None позволяет Xarray использовать фактическую конфигурацию
Zarr v3, не ожидая старого .zmetadata. После открытия ds содержит
метаданные и отложенный план чтения.
5. Быстрый осмотр и легенда
print(ds)
print(ds.year.values) # 2018 и 2022
classes = ds["eucropmap"]
print(classes.attrs["long_name"])
print(classes.attrs["flag_meanings"])
Легенда записана в flag_values и flag_meanings: например, 211 —
обычная пшеница, 216 — кукуруза, 231 — подсолнечник. Значение 0
исключайте из статистики: это фон или отсутствие покрытия, а не класс.
6. Базовые операции
Выбор года и области
Сначала перепроецируйте область исследования в EPSG:3035. Координаты x и
y измеряются в метрах; поскольку y может быть убывающей, границы в
slice задаются от maxy к miny.
import geopandas as gpd
study_area = gpd.read_file("study_area.geojson").to_crs("EPSG:3035")
minx, miny, maxx, maxy = study_area.union_all().bounds
classes_2022 = classes.sel(
year=2022,
x=slice(minx, maxx),
y=slice(maxy, miny),
)
Если выборка пуста, посмотрите ds.y.values[:2] и измените порядок границ
y в slice.
Чтение результата
classes_2022 = classes_2022.compute()
print(classes_2022.shape)
В память загрузится только выбранное окно одного года.
Подсчёт классов
valid = classes_2022.where(classes_2022 != 0)
class_counts = valid.to_series().value_counts().sort_index()
class_counts.index = class_counts.index.astype(int)
print(class_counts)
7. Особенность мозаики 2022 года
print(ds.attrs["mosaic_rule_2022"])
Куб уже применяет правило слияния источников. Ненулевой класс из украинской страты заменяет класс EU27-HR в их перекрытии; пользователю не нужно скачивать и сопоставлять страты самостоятельно.
8. Ленивые вычисления и Dask
Например, покрытие данными для каждого доступного года:
coverage_by_year = (classes != 0).mean(dim=("y", "x"))
print(coverage_by_year.compute())
Для больших задач выбирайте год и область до вычисления. Не вызывайте
.values для всего куба: массив имеет европейское покрытие при исходном
10-метровом разрешении.
9. Визуализация и экспорт
import rioxarray # регистрирует accessor .rio
small = classes.sel(year=2022).isel(x=slice(0, 1000), y=slice(0, 1000))
small.compute().plot()
classes_2022.rio.to_raster("eucropmap_2022.tif", compress="ZSTD")
Экспортируйте один выбранный год за раз, чтобы измерение year было удалено.
Для категориальных классов используйте дискретную палитру.
10. Практические рекомендации
- Доступны только годы 2018 и 2022.
- Исключайте
0из статистики классов. - Выполняйте пространственный выбор в EPSG:3035.
- Учитывайте правило мозаики 2022 года при сравнении с исходными стратами.
- Ограничивайте запрос годом и пространственным окном до
.compute().
Характеристики
- Тип данных
- Растр
- Формат
- Zarr
- Границы
- 6574149.3686, 5493940.8593 : 2413239.3686, 1270000.8593 (EPSG:3035)
- Временной диапазон
- [01.01.2018, 00:00, 31.12.2022, 23:59]
- Объем данных
- Не указано
- Создано
- Обновлено
Переменные
| Имя | Стандартное имя | CF Standard Name | Единицы | Описание |
|---|---|---|---|---|
| eucropmap | plant_categories |
Связи
Для этого датасета нет связей.