CoolFace
Apppublic

DamonCooper/KMZ-Cleaner

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
app.py80 linesDownload Raw Back to root
1import streamlit as st2import zipfile3import xml.etree.ElementTree as ET4from datetime import datetime5import io6 7# Налаштування зовнішнього вигляду сторінки8st.set_page_config(page_title="KMZ Cleaner", page_icon="🌍")9 10st.title("🌍 KMZ Cleaner Pro")11st.markdown("---")12st.write("Завантажте файл, щоб видалити **'Райони проникнення'**.")13 14# Поле завантаження15uploaded_file = st.file_uploader("Виберіть KMZ файл", type=['kmz'])16 17if uploaded_file is not None:18    # Показуємо процес обробки19    with st.status("Працюю над файлом...", expanded=True) as status:20        st.write("📥 Читаю оригінальний файл...")21        22        input_zip_stream = io.BytesIO(uploaded_file.read())23        output_zip_stream = io.BytesIO()24        25        try:26            with zipfile.ZipFile(input_zip_stream, 'r') as zin:27                # Перевірка наявності головного KML файлу28                if 'doc.kml' not in zin.namelist():29                    st.error("Помилка: файл не містить doc.kml!")30                    status.update(label="Помилка структури", state="error")31                else:32                    with zipfile.ZipFile(output_zip_stream, 'w', compression=zipfile.ZIP_DEFLATED) as zout:33                        for item in zin.infolist():34                            content = zin.read(item.filename)35                            36                            # Обробляємо тільки doc.kml37                            if item.filename == 'doc.kml':38                                st.write("🔍 Чищу зайві об'єкти...")39                                ET.register_namespace('', "http://www.opengis.net/kml/2.2")40                                root = ET.fromstring(content)41                                namespace = {'kml': 'http://www.opengis.net/kml/2.2'}42 43                                folders_removed = 044                                # Пошук папок для видалення45                                for parent in root.findall('.//kml:Folder/..', namespace):46                                    for folder in parent.findall('kml:Folder', namespace):47                                        desc = folder.find('kml:description', namespace)48                                        if desc is not None and desc.text == 'Район проникнення':49                                            parent.remove(folder)50                                            folders_removed += 151                                52                                st.write(f"🗑️ Видалено об'єктів: {folders_removed}")53                                # Записуємо змінений KML назад54                                new_kml = ET.tostring(root, encoding='utf-8', xml_declaration=True)55                                zout.writestr(item.filename, new_kml)56                            else:57                                # Всі інші файли (картинки, стилі) копіюємо як є58                                zout.writestr(item, content)59            60            # Формуємо нову назву файлу61            orig_name = uploaded_file.name.rsplit('.', 1)[0]62            final_name = f"{orig_name}-clean.kmz"63            64            status.update(label="Все готово!", state="complete")65            st.success(f"Файл '{final_name}' готовий до завантаження.")66            67            # Кнопка скачування68            st.download_button(69                label="📥 Завантажити результат",70                data=output_zip_stream.getvalue(),71                file_name=final_name,72                mime="application/vnd.google-earth.kmz"73            )74            75        except Exception as e:76            st.error(f"Сталася непередбачувана помилка: {e}")77            status.update(label="Збій", state="error")78 79st.markdown("---")80st.caption("Версія 1.1 | Збереження назви оригіналу")