Карта територій України, на яких ведуться (велися) бойові дії або тимчасово окупованих РФ (станом на 12 квітня 2024 року)

Остання карта станом на 30.04.2025 р. тут: https://www.spatio.in.ua/?p=727

Карту створено за нашими розрахунками на підставі даних, які містяться в Наказі Міністерства з питань реінтеграції тимчасово окупованих територій України від 22.12.2022 № 309 «Про затвердження Переліку територій, на яких ведуться (велися) бойові дії або тимчасово окупованих Російською Федерацією» (далі – Наказ) із відповідними змінами https://zakon.rada.gov.ua/laws/show/z1668-22#Text, а також меж адміністративно-територіальних утворень України (меж областей, районів, територіальних громад, населених пунктів) https://data.humdata.org/dataset/cod-ab-ukr. Остання версія наказу у форматі pdf з сайту Міністерства з питань реінтеграції тимчасово окупованих територій України за посиланням: https://minre.gov.ua/wp-content/uploads/2024/04/11_perelik_nakaz_108_vid_12_kvitnya_2024_1.pdf

Для обробки даних і здійснення розрахунків використано MS Excel, PyCharm для обробки даних у базі даних PostgreSQL із розширенням PostGIS, для візуалізації просторової інформації використано QGIS.

Розроблена карта включає не лише зазначені у Наказі територіальні громади і населені пункти, але й старі ради населених пунктів для того, щоб врахувати вплив населених пунктів на прилеглі території в тих громадах, які не зазначені прямо в Наказі, але на їхніх територіях присутні населені пункти, зазначені в Наказі. Це для тих випадків, коли частина населених пунктів однієї територіальної громади знаходиться в одному статусі, а частина – в іншому.

Алгоритм складання цієї карти може включати наступні дії.

  • Дані про території необхідно привести до вигляду, який можна використовувати для роботи в базі даних. Спочатку завантажується остання версія Наказу в форматі pdf з сайту Міністерства з питань реінтеграції тимчасово окупованих територій України. На даний момент це останні зміни станом на 12 квітня 2024 року: https://minre.gov.ua/wp-content/uploads/2024/04/11_perelik_nakaz_108_vid_12_kvitnya_2024_1.pdf.
  • Таблицю з pdf-файлу можна вручну перетворити в xlsx-файл, зробивши корегування, виправлення, нормалізацію даних, наприклад в Microsoft Excel. Додати два стовпичика: номер за порядком (для сортування в базі даних) та код розділу Наказу (І1, І2, І3, ІІ). Так, в Наказі виділені наступні розділи та підрозділи:
    • І. Території, на яких ведуться (велися) бойові дії
      • 1. Території можливих бойових дій
      • 2. Території активних бойових дій
      • 3. Території активних бойових дій, на яких функціонують державні електронні інформаційні ресурси
    • ІІ. Тимчасово окуповані Російською Федерацією території України
  • При редагуванні таблиці код КАТОТТГ і назва адміністративно-територіальної одиниці мають бути в одному рядку з останнім періодом. Тобто для населеного пункту в Наказі можуть бути зазначені кілька періодів, коли статус було спочатку припинено, а потім знов відкрито для цього населеного пункту. Отже треба або мати код і назву населеного пункту (або громади) для кожного періоду, або для останнього. Також у клітинці періоду має бути лише одна дата (або відсутня дата, якщо зазначений статус ще триває, наприклад бойові дії не припинені).
  • Слід імпортувати одержані дані цієї таблиці до бази даних, в нашому випадку PostgreSQL через збереження файлу в форматі csv. Таблиця в базі може мати наступний вигляд:
create table list_minreintegro_20240412
(
    code        text,
    name        text,
    start_date  text,
    end_date    text,
    nn          integer,
    rozdil      text,
    status      text,
    code_found  text,
    status_date date
);

  • Також необхідно імпортувати межі та коди КАТОТТГ усіх областей, районів, територіальних громад, населених пунктів України.
  • Встановити статус кожної адміністративно-територіальної одиниці на основі наявності чи відсутності дати завершення (крім територій із функціонуванням державних інформаційних в умовах бойових дій).
update list_minreintegro_20240412
set status = 'Можливі бойові дії тривають'
where rozdil = 'I1'
  and (end_date isnull or length(end_date) < 10);

update list_minreintegro_20240412
set status = 'Можливі бойові дії припинені'
where rozdil = 'I1'
  and length(end_date) > 9;

update list_minreintegro_20240412
set status = 'Активні бойові дії тривають'
where rozdil = 'I2'
  and (end_date isnull or length(end_date) < 10);

update list_minreintegro_20240412
set status = 'Активні бойові дії припинені'
where rozdil = 'I2'
  and length(end_date) > 9;

update list_minreintegro_20240412
set status = 'Функціонують державні реєстри'
where rozdil = 'I3';

update list_minreintegro_20240412
set status = 'Тимчасова окупація триває'
where rozdil = 'II'
  and (end_date isnull or length(end_date) < 10);

update list_minreintegro_20240412
set status = 'Деокуповані території'
where rozdil = 'II'
  and length(end_date) > 9;

select *
from list_minreintegro_20240412
where status isnull;

  • Видалити зайві символи «пробілів» на початку та в кінці значень.
update list_minreintegro_20240412
set code = trim(code);

update list_minreintegro_20240412
set start_date = trim(start_date);

update list_minreintegro_20240412
set end_date = trim(end_date);

  • Встановити дату початку статусу для кожного запису в форматі “DATE” для можливості сортування записів за календарною датою.
update list_minreintegro_20240412
set status_date = to_date(start_date, 'DD.MM.YYYY')
where length(start_date) > 9;

  • Створити три різні таблиці з межами для 1) районів, 2) територіальних громад, 3) населених пунктів. В кожну таблицю обирається кожен запис за його останнім статусом. Для сортування записів за часом обирається дата початку встановлення статусу. Отже тут відбувається встановлення зв’язку між таблицею з Наказу та відповідними просторовими об’єктами.
create table list_adm2_20240412 as
select t.*, m.*
from ukr_admbnda_adm2_sspe_20230201 as t
         right join (select distinct on (code) code, status_date, nn,  end_date, name, status
                     from list_minreintegro_20240412
                     where status_date notnull
                     order by code, status_date desc) as m
                    on substr(m.code, 1, 12) = t.adm2_pcode || '000000'
where t.id notnull;

create table list_adm3_20240412 as
select t.*, m.*
from ukr_admbnda_adm3_sspe_20230201 as t
         right join (select distinct on (code) code, status_date, nn, end_date, name, status
                     from list_minreintegro_20240412
                     where status_date notnull
                     order by code, status_date desc) as m
                    on substr(m.code, 1, 12) = t.adm3_pcode || '000'
where t.id notnull;

create table list_adm4_20240412 as
select t.*, m.*
from ukr_admbnda_adm4_sspe_20230201 as t
         right join (select distinct on (code) code, status_date, nn, end_date, name, status
                     from list_minreintegro_20240412
                     where status_date notnull
                     order by code, status_date desc) as m
                    on substr(m.code, 1, 12) = t.adm4_pcode
where t.id notnull;

  • Ось цей запит у складі вищенаведених дозволяє отримати усі об’єкти з останнім їх статусом. Так, населений пункт спочатку може опинитись в розділі можливих бойових дій, потім в розділі активних бойових дій, потім в розділі тимчасово окупованих територій, потім в розділі деокупованих територій. Нам необхідно обрати цей населений пункт лише один раз, отримавши його останній за датою статус.
select distinct on (code) code, status_date, nn, end_date, name, status
from list_minreintegro_20240412
where status_date notnull
order by code, status_date desc;

  • Перевірити, чи всі коди КАТОТТГ з таблиці даних Наказу співпадають з просторовими об’єктами на карті (із відповідними кодами районів, територіальних громад, населених пунктів). Необхідно переконатись, що всі записи з Наказу будуть відображені на карті.
update list_minreintegro_20240412
set code_found = t.adm2_pcode
from list_adm2_20240412 as t
where t.nn = list_minreintegro_20240412.nn;

update list_minreintegro_20240412
set code_found = t.adm3_pcode
from list_adm3_20240412 as t
where t.nn = list_minreintegro_20240412.nn;

update list_minreintegro_20240412
set code_found = t.adm4_pcode
from list_adm4_20240412 as t
where t.nn = list_minreintegro_20240412.nn;

  • Після виконання вищенаведених запитів, можна виконати наступну перевірку. В нашому випадку перевірка показала нуль записів. Це означає, що в таблиці з Наказу відсутні записи, для яких не знайдено просторові об’єкти на карті.
select t.*
from (select distinct on (code) code, status_date, nn, end_date, name, status, code_found
      from list_minreintegro_20240412
      where status_date notnull
      order by code, status_date desc) as t
where t.code like 'UA%'
  and t.code_found isnull;

  • Нанести створені просторові об’єкти на карту та розфарбувати їх за статусом. У QGIS відображаються чотири просторові шари: тимчасово окупований Крим, райони, територіальні громади, населені пункти, які розташовуються в один над одним. Нагадаємо, що QGIS прямо під’єднується до PostgreSQL. В результаті отримуємо таку карту:
  • Для цілей розрахунку площі ріллі за статусом територій необхідно створити один просторовий шар, в якому будуть зведені консолідовані дані з шарів районів, територіальних громад, населених пунктів. Для населених пунктів, в тих громадах, для яких немає визначеного статусу, необхідно розрахувати зону впливу населених пунктів. Такими зонами впливу запропоновано обрати межі “старих” міських, сільських та селищних рад.
  • Визначити перелік та межі територіальних громад, які не зазначені в переліку у Наказі, але на їх територіях є населені пункти із цього переліку. Це такі собі «білі плями», територіальні громади, які не можна було цілком віднести до якогось розділу, але їхні площі та межі необхідно врахувати для визначення площі ріллі на територіях бойових дій або тимчасової окупації.
create table gromadas_spots as
select t.*
from ukr_admbnda_adm3_sspe_20230201 as t
         right join list_adm4_20240412 l on st_intersects(t.geom, st_pointonsurface(l.geom))
         left join list_adm3_20240412 m on st_intersects(t.geom, st_pointonsurface(m.geom))
where m.id isnull
group by t.id;
  • Визначити статус і межі «старих» рад населених пунктів, які потрапляють в зони «білих плям» із врахуванням статусу населених пунктів в межах цих рад.
create table oldradas_status as
select t.*,
       max(l.status) as status
from admin_3_old as t
         right join gromadas_spots m on st_intersects(t.geom, m.geom)
         left join list_adm4_20240412 l on st_intersects(t.geom, st_pointonsurface(l.geom))
group by t.fid;

  • Консолідувати, об’єднати геометрію районів, територіальних громад і «старих» рад населених пунктів в єдиний шар за атрибутом статусу.
create table list_adm2_20240412_no_adm3 as
with temp as
         (select b.id, st_multi(st_union(a.geom)) as geom
          from list_adm2_20240412 b
                   join list_adm3_20240412 a on st_intersects(a.geom, b.geom)
          group by b.id)
select b.id,
       b.status                                                                                        as status,
       st_difference(b.geom, coalesce(t.geom, st_setsrid('GEOMETRYCOLLECTION EMPTY'::geometry, 4326))) as geom
from list_adm2_20240412 b
         left join temp t on b.id = t.id;

create table oldradas_status_no_adm3 as
with temp as
         (select b.id, st_multi(st_union(a.geom)) as geom
          from oldradas_status b
                   join list_adm3_20240412 a on st_intersects(a.geom, b.geom)
          group by b.id)
select b.id,
       b.status                                                                                        as status,
       st_difference(b.geom, coalesce(t.geom, st_setsrid('GEOMETRYCOLLECTION EMPTY'::geometry, 4326))) as geom
from oldradas_status b
         left join temp t on b.id = t.id;
create table oldradas_status_no_adm3adm2 as
with temp as
         (select b.id, st_multi(st_union(a.geom)) as geom
          from oldradas_status_no_adm3 b
                   join list_adm2_20240412 a on st_intersects(a.geom, b.geom)
          group by b.id)
select b.id,
       b.status                                                                                        as status,
       st_difference(b.geom, coalesce(t.geom, st_setsrid('GEOMETRYCOLLECTION EMPTY'::geometry, 4326))) as geom
from oldradas_status_no_adm3 b
         left join temp t on b.id = t.id;


create table union_status as
select t.geom as geom, t.status
from list_adm3_20240412 as t
union
select m.geom as geom, m.status
from oldradas_status_no_adm3adm2 as m
where m.status notnull
union
select k.geom as geom, k.status
from list_adm2_20240412_no_adm3 as k;


update union_status
set geom = st_buffer(geom, 0);

create table union_status_dissolved as
select ROW_NUMBER() OVER ()       AS id,
       status,
       ST_Multi(ST_Union(u.geom)) as geom
from union_status u
group by status;

  • Розбити одержаний консолідований шар межами областей України. Це необхідно для того, аби мати можливість рахувати просторову статистику в розрізі областей. Для цього можна використати інструмент “Об’єднання” в QGIS. В результаті отримуємо карту, яка показана на початку.
  • Далі, з метою врахування просторового поширення сільськогосподарських земель Україною та їх частки в кожній зоні, необхідно одержати земельний покрив для території України за даними аналізу супутникових знімків, наприклад Copernicus Global Land Cover 2015 року. Джерело: https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_Landcover_100m_Proba-V-C3_Global
  • Витягнути з цього растру пікселі, які відповідають сільськогосподарським посівам. У растрі це значення: «40. Cultivated and managed vegetation / agriculture. Lands covered with temporary crops followed by harvest and a bare soil period (e.g., single and multiple cropping systems). Note that perennial woody crops will be classified as the appropriate forest or shrub land cover type”. Це можна зробити за допомогою растрового калькулятора в QGIS:
Landcover_50@1 = 40
  • Розрахувати зональну статистику для растру покриву сільськогосподарських земель в розрізі меж зон за статусом територій. Це можна зробити за допомогою інструменту “Зональна статистика” в QGIS.
  • Розрахувати підсумки за статусом території, скорегувавши частки площ ріллі в областях України відповідно до даних форми 6-зем станом на 2016 рік.

Площа ріллі за областями України та статусом території станом на 12 квітня 2024 року, тис. га

Області УкраїниТериторії можливих бойових дійТериторії активних бойових дійТериторії активних бойових дій, на яких функціонують державні електронні інформаційні ресурсиТимчасово окуповані Російською Федерацією території УкраїниВсього
Можливі бойові дії триваютьМожливі бойові дії припиненіАктивні бойові дії триваютьАктивні бойові дії припиненіТимчасова окупація триваєДеокуповані території
Автономна Республіка Крим0,000,000,000,000,001 271,500,001 271,50
Вінницька0,000,000,000,000,000,000,001 725,50
Волинська0,000,000,000,000,000,000,00672,60
Дніпропетровська156,220,000,0025,4717,950,000,002 127,40
Донецька399,260,00180,0213,31190,33869,520,001 652,70
Житомирська0,000,000,000,000,000,001,921 112,70
Закарпатська0,000,000,000,000,000,000,00200,20
Запорізька301,960,0093,390,0019,151 478,720,001 903,60
Івано-Франківська0,000,000,000,000,000,000,00397,20
Київська0,0017,080,0067,730,000,00160,361 355,50
Кіровоградська0,000,000,000,000,000,000,001 764,60
Луганська0,000,0012,010,050,041 264,430,041 276,60
Львівська0,000,000,000,000,000,000,00794,10
Миколаївська471,85274,110,000,0019,720,020,001 699,20
Одеська0,009,190,000,000,000,000,002 075,50
Полтавська0,000,000,000,000,000,000,001 774,70
Рівненська0,000,000,000,000,000,000,00656,80
Сумська339,3747,3349,3571,460,000,00234,911 226,30
Тернопільська0,000,000,000,000,000,000,00856,40
Харківська1 356,04315,4730,7991,3793,6045,810,001 933,20
Херсонська479,800,000,000,0066,911 231,200,001 777,90
Хмельницька0,000,000,000,000,000,000,001 252,70
Черкаська0,000,000,000,000,000,000,001 272,00
Чернівецька0,000,000,000,000,000,000,00330,80
Чернігівська165,0629,950,00410,240,000,00813,461 419,20
м Київ0,000,000,000,600,000,000,000,60
м Севастополь0,000,000,000,000,0011,800,0011,80
Всього3 669,55693,12365,56680,22407,706 172,991 210,6932 541,30
у % до підсумку11,28%2,13%1,12%2,09%1,25%18,97%3,72%100,00%

Загальна площа земель за областями України та статусом території станом на 12 квітня 2024 року, тис. га

Області УкраїниТериторії можливих бойових дійТериторії активних бойових дійТериторії активних бойових дій, на яких функціонують державні електронні інформаційні ресурсиТимчасово окуповані Російською Федерацією території УкраїниВсього
Можливі бойові дії триваютьМожливі бойові дії припиненіАктивні бойові дії триваютьАктивні бойові дії припиненіТимчасова окупація триваєДеокуповані території
Автономна Республіка Крим0,000,000,000,000,002 608,100,002 608,10
Вінницька0,000,000,000,000,000,000,002 649,20
Волинська0,000,000,000,000,000,000,002 014,40
Дніпропетровська238,400,000,0043,7148,190,000,003 192,30
Донецька613,130,00261,9330,39315,561 430,350,002 651,70
Житомирська0,000,000,000,070,000,0025,042 982,70
Закарпатська0,000,000,000,000,000,000,001 275,30
Запорізька460,840,00125,840,0025,342 079,380,002 718,30
Івано-Франківська0,000,000,000,000,000,000,001 392,70
Київська0,0068,780,00161,810,000,00673,532 812,10
Кіровоградська0,000,000,000,000,000,000,002 458,80
Луганська0,000,0019,980,080,052 648,090,052 668,30
Львівська0,000,000,000,000,000,000,002 183,10
Миколаївська697,46397,200,000,0035,6712,140,002 458,50
Одеська0,0017,360,000,000,000,000,003 331,40
Полтавська0,000,000,000,000,000,000,022 875,00
Рівненська0,000,000,000,000,000,000,002 005,10
Сумська735,4797,61111,49207,820,000,00422,612 383,20
Тернопільська0,000,000,000,000,000,000,001 382,40
Харківська2 301,71427,3453,41139,01151,3868,690,003 141,80
Херсонська605,230,000,000,00136,842 104,040,002 846,10
Хмельницька0,000,000,000,000,000,000,002 062,90
Черкаська0,000,000,000,000,000,000,002 091,60
Чернівецька0,000,000,000,000,000,000,00809,60
Чернігівська584,20189,940,00784,790,000,001 628,913 190,30
м Київ0,000,000,0083,600,000,000,0083,60
м Севастополь0,000,000,000,000,0086,400,0086,40
Всього6 236,441 198,23572,641 451,26713,0211 037,202 750,1560 354,90
у % до підсумку10,33%1,99%0,95%2,40%1,18%18,29%4,56%100,00%

Таким чином, 18, 29% загальної площі України знаходится під тимчасовою окупацією, 4,56% – є деокупованими, можливі та активні бойові дії тривають на площі 12,46% (10,33 + 0,95 + 1,18). Припинені активні або можливі бойові дії на площі 4,39%.


Коментарі

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *