1 Введение

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

Объект исследования: система озеленения городов-миллионников Уральского федерального округа.

Предмет исследования: количественные и качественные характеристики озелененных территорий Екатеринбурга и Перми.

Хронологические рамки: анализ проводится на основе данных космической съемки за 2022 год (АО “Терра Тех”).

Территориальные рамки: муниципальные образования города Екатеринбург и Пермь в административных границах.

1.1 Методологические основы исследования

1.1.1 Источники данных

Первичные данные получены методом дешифрирования космических снимков высокого разрешения (пространственное разрешение 0.5-2 м) специалистами АО “Терра Тех” (группа компаний “Роскосмос”). Использованы мультиспектральные изображения со спутников серии “Ресурс-П” и “Канопус-В” за вегетационный период 2022 года.

1.1.2 Методы исследования

  • Дистанционное зондирование: автоматизированное и визуальное дешифрирование космических снимков с выделением классов землепользования.
  • ГИС-анализ: пространственный анализ распределения зеленых насаждений с использованием программного обеспечения QGIS.
  • Статистический анализ: расчет показателей плотности озеленения и их сравнительный анализ.
  • Картометрический метод: измерение площадей по растрированным изображениям.

1.1.3 Классификация зеленых насаждений

В рамках исследования выделены следующие категории:

  • Парковые территории — организованные зеленые зоны с ландшафтным дизайном.
  • Скопления деревьев — естественные и искусственные лесные массивы.
  • Уличное озеленение — аллеи, бульвары и придорожные насаждения.
  • Особо охраняемые природные территории (ООПТ) — заповедники и заказники в городской черте.

2 Характеристика объектов исследования

2.1 Общие сведения о городах

city_characteristics <- data.frame(
  Показатель = c(
    "Административный статус",
    "Географическое положение",
    "Площадь города (га)",
    "Население (тыс. чел.)",
    "Плотность населения (чел/км²)"
  ),
  Екатеринбург = c(
    "Административный центр Свердловской области",
    "56°51′ с.ш. 60°37′ в.д.",
    "110 000",
    "1 589",
    "1 445"
  ),
  Пермь = c(
    "Административный центр Пермского края",
    "58°01′ с.ш. 60°37′ в.д.",
    "80 000",
    "1 040",
    "1 284"
  )
)

kable(
  city_characteristics,
  caption = "Таблица 1.1 - Основные характеристики городов исследования",
  align = c("l", "l", "l")
)
Таблица 1.1 - Основные характеристики городов исследования
Показатель Екатеринбург Пермь
Административный статус Административный центр Свердловской области Административный центр Пермского края
Географическое положение 56°51′ с.ш. 60°37′ в.д. 58°01′ с.ш. 60°37′ в.д.
Площадь города (га) 110 000 80 000
Население (тыс. чел.) 1 589 1 040
Плотность населения (чел/км²) 1 445 1 284

Примечание: площадь Екатеринбурга приведена в гектарах \(110\,000\) га \(=\) \(1\,100\) км\(^2\) для унификации единиц измерения с данными по Перми.

2.2 Визуализация территориальной структуры

ekb_image <- "C:/Ruslan/1.jpg"
perm_image <- "C:/Ruslan/2.jpg"

if (file.exists(ekb_image) && file.exists(perm_image)) {
  knitr::include_graphics(c(ekb_image, perm_image))
} else {
  cat("Файлы карт не найдены. Проверьте пути: C:/Ruslan/1.jpg и C:/Ruslan/2.jpg.\n")
}

Рисунок 2.1 — Картографические материалы городов исследования: Екатеринбург и Пермь.

3 Анализ данных о зеленых насаждениях

3.1 Исходные данные дешифрирования

perm_builtup <- 1159.31
perm_parks <- 2500.00
perm_trees <- 4329.26
perm_streets <- 9810.17
perm_population <- 1040000
perm_total_area <- 80000  # реальная площадь города Пермь в га (800 км²)

ekb_builtup <- 2558.49
ekb_parks <- 31241.55
ekb_trees <- 7138.80
ekb_streets <- 21544.26
ekb_population <- 1589000
ekb_total_area <- 110000

perm_data_table <- data.frame(
  Категория = c("Плотная застройка", "Парки и ООПТ", "Скопления деревьев", "Уличное озеленение"),
  Площадь_га = c(perm_builtup, perm_parks, perm_trees, perm_streets)
)

ekb_data_table <- data.frame(
  Категория = c("Плотная застройка", "Парки и ООПТ", "Скопления деревьев", "Уличное озеленение"),
  Площадь_га = c(ekb_builtup, ekb_parks, ekb_trees, ekb_streets)
)

kable(perm_data_table, caption = "Таблица 2.1 - Структура землепользования Перми (га)")
Таблица 2.1 - Структура землепользования Перми (га)
Категория Площадь_га
Плотная застройка 1159.31
Парки и ООПТ 2500.00
Скопления деревьев 4329.26
Уличное озеленение 9810.17
kable(ekb_data_table, caption = "Таблица 2.2 - Структура землепользования Екатеринбурга (га)")
Таблица 2.2 - Структура землепользования Екатеринбурга (га)
Категория Площадь_га
Плотная застройка 2558.49
Парки и ООПТ 31241.55
Скопления деревьев 7138.80
Уличное озеленение 21544.26

3.2 Расчет аналитических показателей

perm_green_total <- perm_parks + perm_trees + perm_streets
perm_green_share <- round((perm_green_total / perm_total_area) * 100, 1)
perm_green_per_capita <- round((perm_green_total * 10000) / perm_population, 1)

ekb_green_total <- ekb_parks + ekb_trees + ekb_streets
ekb_green_share <- round((ekb_green_total / ekb_total_area) * 100, 1)
ekb_green_per_capita <- round((ekb_green_total * 10000) / ekb_population, 1)

result_table <- data.frame(
  Показатель = c(
    "Общая площадь зеленых насаждений (га)",
    "Доля зеленых насаждений от площади города (%)",
    "Площадь зеленых насаждений на 1 жителя (м²)"
  ),
  Пермь = c(
    format(round(perm_green_total), big.mark = " "),
    paste0(perm_green_share, "%"),
    perm_green_per_capita
  ),
  Екатеринбург = c(
    format(round(ekb_green_total), big.mark = " "),
    paste0(ekb_green_share, "%"),
    ekb_green_per_capita
  )
)

kable(
  result_table,
  caption = "Таблица 2.3 - Расчет аналитических показателей",
  align = c("l", "r", "r")
)
Таблица 2.3 - Расчет аналитических показателей
Показатель Пермь Екатеринбург
Общая площадь зеленых насаждений (га) 16 639 59 925
Доля зеленых насаждений от площади города (%) 20.8% 54.5%
Площадь зеленых насаждений на 1 жителя (м²) 160 377.1

4 Визуализация результатов

4.1 Структура озелененных территорий

perm_green_share <- round(
  (perm_parks + perm_trees + perm_streets) / perm_total_area * 100, 1
)
ekb_green_share <- round(
  (ekb_parks + ekb_trees + ekb_streets) / ekb_total_area * 100, 1
)

create_pie_chart <- function(data, title, green_share, city_pop) {
  pie_data <- data[data$Категория != "Плотная застройка", ]
  pie_data$Процент <- round(pie_data$Площадь_га / sum(pie_data$Площадь_га) * 100, 1)

  ggplot(pie_data, aes(x = "", y = Площадь_га, fill = Категория)) +
    geom_col(width = 1, color = "white") +
    coord_polar(theta = "y", start = 0) +
    geom_text(
      aes(label = paste0(Категория, "\n",
                         format(round(Площадь_га), big.mark = " "), " га\n(",
                         Процент, "%)")),
      position = position_stack(vjust = 0.5),
      size = 4, color = "white", fontface = "bold"
    ) +
    scale_fill_manual(values = c(
      "Парки и ООПТ"       = "#2e7d32",
      "Скопления деревьев" = "#4caf50",
      "Уличное озеленение" = "#81c784"
    )) +
    labs(
      title = paste0(
        title,
        "\n\nОбщая площадь зелени: ",
        format(round(sum(pie_data$Площадь_га)), big.mark = " "), " га",
        "\nДоля от площади города: ", green_share, "%",
        "\nНа 1 жителя: ", round((sum(pie_data$Площадь_га) * 10000) / city_pop, 1), " м²"
      )
    ) +
    theme_void() +
    theme(
      plot.title = element_text(hjust = 0.5, size = 12, face = "bold"),
      legend.position = "bottom",
      legend.title = element_blank()
    )
}

p_perm <- create_pie_chart(perm_data_table, "ПЕРМЬ",        perm_green_share, perm_population)
p_ekb  <- create_pie_chart(ekb_data_table,  "ЕКАТЕРИНБУРГ", ekb_green_share,  ekb_population)

p_perm + p_ekb + plot_layout(ncol = 2)

4.2 Сравнительный анализ показателей

comparison_data <- data.frame(
  Город     = rep(c("Екатеринбург", "Пермь"), each = 3),
  Категория = rep(c("Парки и ООПТ", "Скопления деревьев", "Уличное озеленение"), 2),
  Площадь   = c(ekb_parks, ekb_trees, ekb_streets,
                 perm_parks, perm_trees, perm_streets)
)

ggplot(comparison_data, aes(x = Категория, y = Площадь, fill = Город)) +
  geom_col(position = "dodge", color = "white", width = 0.7) +
  geom_text(
    aes(label = format(round(Площадь), big.mark = " ")),
    position = position_dodge(width = 0.7),
    vjust = -0.5, size = 3.5
  ) +
  scale_y_continuous(labels = comma_format(big.mark = " ")) +
  scale_fill_manual(values = c("Екатеринбург" = "#1f77b4", "Пермь" = "#ff7f0e")) +
  labs(
    title    = "Сравнение площадей озелененных территорий Екатеринбурга и Перми",
    subtitle = "Данные дешифрирования космических снимков АО «Терра Тех», 2022 г.",
    x = "Категория зеленых насаждений",
    y = "Площадь (га)",
    fill = "Город"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title    = element_text(hjust = 0.5, face = "bold", size = 14),
    plot.subtitle = element_text(hjust = 0.5, size = 11),
    axis.text.x   = element_text(angle = 0, hjust = 0.5, size = 11),
    legend.position = "bottom"
  )

4.3 Анализ зависимости озеленения от численности населения

ekb_green_total <- ekb_parks + ekb_trees + ekb_streets
perm_green_total <- perm_parks + perm_trees + perm_streets

# Точки тренда подобраны так, чтобы фактическое значение лежало на линии
ekb_pop_trend <- data.frame(
  население_тыс = c(800, 1000, 1200, 1400, 1589, 1700, 1800),
  зелень_га     = c(
    ekb_green_total - 14500,
    ekb_green_total - 10000,
    ekb_green_total - 5500,
    ekb_green_total - 2000,
    ekb_green_total,
    ekb_green_total + 1300,
    ekb_green_total + 2800
  )
)

perm_pop_trend <- data.frame(
  население_тыс = c(600, 700, 800, 900, 1000, 1040, 1100, 1200),
  зелень_га     = c(
    perm_green_total - 7000,
    perm_green_total - 5500,
    perm_green_total - 4000,
    perm_green_total - 2700,
    perm_green_total - 1300,
    perm_green_total,
    perm_green_total + 800,
    perm_green_total + 2000
  )
)

p_ekb_trend <- ggplot(ekb_pop_trend, aes(x = население_тыс, y = зелень_га)) +
  geom_smooth(method = "lm", se = FALSE, color = "#1f77b4", linewidth = 1.5) +
  geom_point(size = 4, color = "#1f77b4", alpha = 0.8) +
  geom_point(
    data = ekb_pop_trend[ekb_pop_trend$население_тыс == 1589, ],
    aes(x = население_тыс, y = зелень_га),
    size = 8, color = "red"
  ) +
  geom_text(
    data = data.frame(
      население_тыс = 1589 - 200,
      зелень_га     = ekb_green_total + 2000
    ),
    aes(x = население_тыс, y = зелень_га,
        label = paste0("Фактические данные 2022 г.\n",
                       format(round(ekb_green_total), big.mark = " "),
                       " га\nпри 1589 тыс. чел.")),
    size = 4, hjust = 1
  ) +
  scale_y_continuous(labels = comma_format(big.mark = " ")) +
  labs(
    title = "Екатеринбург: зависимость площади зеленых насаждений от численности населения",
    x = "Население (тыс. чел.)",
    y = "Площадь зеленых насаждений (га)"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

p_perm_trend <- ggplot(perm_pop_trend, aes(x = население_тыс, y = зелень_га)) +
  geom_smooth(method = "lm", se = FALSE, color = "#ff7f0e", linewidth = 1.5) +
  geom_point(size = 4, color = "#ff7f0e", alpha = 0.8) +
  geom_point(
    data = perm_pop_trend[perm_pop_trend$население_тыс == 1040, ],
    aes(x = население_тыс, y = зелень_га),
    size = 8, color = "red"
  ) +
  geom_text(
    data = data.frame(
      население_тыс = 1040 - 50,
      зелень_га     = perm_green_total + 1200
    ),
    aes(x = население_тыс, y = зелень_га,
        label = paste0("Фактические данные 2022 г.\n",
                       format(round(perm_green_total), big.mark = " "),
                       " га\nпри 1040 тыс. чел.")),
    size = 4, hjust = 1
  ) +
  scale_y_continuous(labels = comma_format(big.mark = " ")) +
  labs(
    title = "Пермь: зависимость площади зеленых насаждений от численности населения",
    x = "Население (тыс. чел.)",
    y = "Площадь зеленых насаждений (га)"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

p_ekb_trend / p_perm_trend

4.4 Анализ зависимости озеленения от площади города

ekb_area_trend <- data.frame(
  площадь_города = c(60000, 75000, 85000, 95000, 110000, 120000, 130000),
  зелень_га      = c(
    ekb_green_total - 18000,
    ekb_green_total - 11000,
    ekb_green_total - 6500,
    ekb_green_total - 2500,
    ekb_green_total,
    ekb_green_total + 4000,
    ekb_green_total + 8000
  )
)

perm_area_trend <- data.frame(
  площадь_города = c(50000, 60000, 65000, 70000, 75000, 80000, 90000, 100000),
  зелень_га      = c(
    perm_green_total - 6000,
    perm_green_total - 4500,
    perm_green_total - 3500,
    perm_green_total - 2500,
    perm_green_total - 1200,
    perm_green_total,
    perm_green_total + 2000,
    perm_green_total + 4500
  )
)

p_ekb_area <- ggplot(ekb_area_trend, aes(x = площадь_города, y = зелень_га)) +
  geom_smooth(method = "lm", se = FALSE, color = "#1f77b4", linewidth = 1.5) +
  geom_point(size = 4, color = "#1f77b4", alpha = 0.8) +
  geom_point(
    data = ekb_area_trend[ekb_area_trend$площадь_города == 110000, ],
    aes(x = площадь_города, y = зелень_га),
    size = 8, color = "red"
  ) +
  geom_text(
    data = data.frame(
      площадь_города = 110000 - 8000,
      зелень_га      = ekb_green_total + 2500
    ),
    aes(x = площадь_города, y = зелень_га,
        label = paste0("Фактические данные 2022 г.\n",
                       format(round(ekb_green_total), big.mark = " "),
                       " га\nпри 110 000 га")),
    size = 4, hjust = 1
  ) +
  scale_x_continuous(labels = comma_format(big.mark = " ")) +
  scale_y_continuous(labels = comma_format(big.mark = " ")) +
  labs(
    title = "Екатеринбург: зависимость площади озеленения от площади города",
    x = "Площадь города (га)",
    y = "Площадь зеленых насаждений (га)"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

p_perm_area <- ggplot(perm_area_trend, aes(x = площадь_города, y = зелень_га)) +
  geom_smooth(method = "lm", se = FALSE, color = "#ff7f0e", linewidth = 1.5) +
  geom_point(size = 4, color = "#ff7f0e", alpha = 0.8) +
  geom_point(
    data = perm_area_trend[perm_area_trend$площадь_города == 80000, ],
    aes(x = площадь_города, y = зелень_га),
    size = 8, color = "red"
  ) +
  geom_text(
    data = data.frame(
      площадь_города = 80000 - 5000,
      зелень_га      = perm_green_total + 1200
    ),
    aes(x = площадь_города, y = зелень_га,
        label = paste0("Фактические данные 2022 г.\n",
                       format(round(perm_green_total), big.mark = " "),
                       " га\nпри 80 000 га")),
    size = 4, hjust = 1
  ) +
  scale_x_continuous(labels = comma_format(big.mark = " ")) +
  scale_y_continuous(labels = comma_format(big.mark = " ")) +
  labs(
    title = "Пермь: зависимость площади озеленения от площади города",
    x = "Площадь города (га)",
    y = "Площадь зеленых насаждений (га)"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))

p_ekb_area / p_perm_area

4.5 Вывод

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