Остання карта станом на 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,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 271,50 | 0,00 | 1 271,50 |
| Вінницька | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 725,50 |
| Волинська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 672,60 |
| Дніпропетровська | 156,22 | 0,00 | 0,00 | 25,47 | 17,95 | 0,00 | 0,00 | 2 127,40 |
| Донецька | 399,26 | 0,00 | 180,02 | 13,31 | 190,33 | 869,52 | 0,00 | 1 652,70 |
| Житомирська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1,92 | 1 112,70 |
| Закарпатська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 200,20 |
| Запорізька | 301,96 | 0,00 | 93,39 | 0,00 | 19,15 | 1 478,72 | 0,00 | 1 903,60 |
| Івано-Франківська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 397,20 |
| Київська | 0,00 | 17,08 | 0,00 | 67,73 | 0,00 | 0,00 | 160,36 | 1 355,50 |
| Кіровоградська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 764,60 |
| Луганська | 0,00 | 0,00 | 12,01 | 0,05 | 0,04 | 1 264,43 | 0,04 | 1 276,60 |
| Львівська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 794,10 |
| Миколаївська | 471,85 | 274,11 | 0,00 | 0,00 | 19,72 | 0,02 | 0,00 | 1 699,20 |
| Одеська | 0,00 | 9,19 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 075,50 |
| Полтавська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 774,70 |
| Рівненська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 656,80 |
| Сумська | 339,37 | 47,33 | 49,35 | 71,46 | 0,00 | 0,00 | 234,91 | 1 226,30 |
| Тернопільська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 856,40 |
| Харківська | 1 356,04 | 315,47 | 30,79 | 91,37 | 93,60 | 45,81 | 0,00 | 1 933,20 |
| Херсонська | 479,80 | 0,00 | 0,00 | 0,00 | 66,91 | 1 231,20 | 0,00 | 1 777,90 |
| Хмельницька | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 252,70 |
| Черкаська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 272,00 |
| Чернівецька | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 330,80 |
| Чернігівська | 165,06 | 29,95 | 0,00 | 410,24 | 0,00 | 0,00 | 813,46 | 1 419,20 |
| м Київ | 0,00 | 0,00 | 0,00 | 0,60 | 0,00 | 0,00 | 0,00 | 0,60 |
| м Севастополь | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 11,80 | 0,00 | 11,80 |
| Всього | 3 669,55 | 693,12 | 365,56 | 680,22 | 407,70 | 6 172,99 | 1 210,69 | 32 541,30 |
| у % до підсумку | 11,28% | 2,13% | 1,12% | 2,09% | 1,25% | 18,97% | 3,72% | 100,00% |
Загальна площа земель за областями України та статусом території станом на 12 квітня 2024 року, тис. га
| Області України | Території можливих бойових дій | Території активних бойових дій | Території активних бойових дій, на яких функціонують державні електронні інформаційні ресурси | Тимчасово окуповані Російською Федерацією території України | Всього | |||
| Можливі бойові дії тривають | Можливі бойові дії припинені | Активні бойові дії тривають | Активні бойові дії припинені | Тимчасова окупація триває | Деокуповані території | |||
| Автономна Республіка Крим | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 608,10 | 0,00 | 2 608,10 |
| Вінницька | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 649,20 |
| Волинська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 014,40 |
| Дніпропетровська | 238,40 | 0,00 | 0,00 | 43,71 | 48,19 | 0,00 | 0,00 | 3 192,30 |
| Донецька | 613,13 | 0,00 | 261,93 | 30,39 | 315,56 | 1 430,35 | 0,00 | 2 651,70 |
| Житомирська | 0,00 | 0,00 | 0,00 | 0,07 | 0,00 | 0,00 | 25,04 | 2 982,70 |
| Закарпатська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 275,30 |
| Запорізька | 460,84 | 0,00 | 125,84 | 0,00 | 25,34 | 2 079,38 | 0,00 | 2 718,30 |
| Івано-Франківська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 392,70 |
| Київська | 0,00 | 68,78 | 0,00 | 161,81 | 0,00 | 0,00 | 673,53 | 2 812,10 |
| Кіровоградська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 458,80 |
| Луганська | 0,00 | 0,00 | 19,98 | 0,08 | 0,05 | 2 648,09 | 0,05 | 2 668,30 |
| Львівська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 183,10 |
| Миколаївська | 697,46 | 397,20 | 0,00 | 0,00 | 35,67 | 12,14 | 0,00 | 2 458,50 |
| Одеська | 0,00 | 17,36 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 3 331,40 |
| Полтавська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,02 | 2 875,00 |
| Рівненська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 005,10 |
| Сумська | 735,47 | 97,61 | 111,49 | 207,82 | 0,00 | 0,00 | 422,61 | 2 383,20 |
| Тернопільська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 1 382,40 |
| Харківська | 2 301,71 | 427,34 | 53,41 | 139,01 | 151,38 | 68,69 | 0,00 | 3 141,80 |
| Херсонська | 605,23 | 0,00 | 0,00 | 0,00 | 136,84 | 2 104,04 | 0,00 | 2 846,10 |
| Хмельницька | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 062,90 |
| Черкаська | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 2 091,60 |
| Чернівецька | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 809,60 |
| Чернігівська | 584,20 | 189,94 | 0,00 | 784,79 | 0,00 | 0,00 | 1 628,91 | 3 190,30 |
| м Київ | 0,00 | 0,00 | 0,00 | 83,60 | 0,00 | 0,00 | 0,00 | 83,60 |
| м Севастополь | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 86,40 | 0,00 | 86,40 |
| Всього | 6 236,44 | 1 198,23 | 572,64 | 1 451,26 | 713,02 | 11 037,20 | 2 750,15 | 60 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%.

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