# Страница Кубсат ## Описание Страница "Кубсат" предназначена для фильтрации источников сигнала (Source) по различным критериям и экспорта результатов в Excel. ## Доступ Страница доступна по адресу: `/kubsat/` Также добавлена в навигационное меню между "Наличие сигнала" и "3D карта". ## Функциональность ### Фильтры #### Реализованные фильтры: 1. **Спутники** (мультивыбор) - фильтрация по спутникам из связанных ObjItem 2. **Полоса спутника** (выбор) - выбор диапазона частот 3. **Поляризация** (мультивыбор) - фильтрация по поляризации сигнала 4. **Центральная частота** (диапазон) - фильтрация по частоте от/до в МГц 5. **Полоса** (диапазон) - фильтрация по полосе частот от/до в МГц 6. **Модуляция** (мультивыбор) - фильтрация по типу модуляции 7. **Тип объекта** (мультивыбор) - фильтрация по типу объекта (ObjectInfo) 8. **Количество привязанных ObjItem** (radio button): - Все - 1 - 2 и более #### Фиктивные фильтры (заглушки): 9. **Принадлежность объекта** (мультивыбор) - пока не реализовано 10. **Планы на** (radio да/нет) - фиктивный фильтр 11. **Успех 1** (radio да/нет) - фиктивный фильтр 12. **Успех 2** (radio да/нет) - фиктивный фильтр 13. **Диапазон дат** (от/до) - фиктивный фильтр ### Таблица результатов После применения фильтров отображается таблица на всю ширину страницы с колонками: - ID Source - идентификатор источника (объединяет несколько точек) - Тип объекта - тип источника - Кол-во точек - количество точек источника (автоматически пересчитывается при удалении) - Имя точки - название точки (ObjItem) - Спутник (имя и NORAD ID) - Частота (МГц) - Полоса (МГц) - Поляризация - Модуляция - Координаты ГЛ - координаты из geo_obj точки - Дата ГЛ - дата геолокации точки - Действия (кнопки удаления) **Важно**: - Таблица показывает все точки (ObjItem) для каждого источника (Source) - Точки одного источника группируются вместе - Колонки ID Source, Тип объекта и Кол-во точек объединены для всех строк источника (rowspan) - Количество точек автоматически пересчитывается при удалении строк - Таблица имеет фиксированную высоту с прокруткой и sticky заголовок ### Двухэтапная фильтрация Фильтрация происходит в два этапа: **Этап 1: Фильтрация по дате ГЛ** - Если задан диапазон дат (от/до), отображаются только те точки, у которых дата ГЛ попадает в этот диапазон - Точки без даты ГЛ исключаются, если фильтр по дате задан - Если фильтр не задан, показываются все точки **Этап 2: Фильтрация по количеству точек** - Применяется к уже отфильтрованным по дате точкам - Варианты: - "Все" - показываются источники с любым количеством точек - "1" - только источники с ровно 1 точкой (после фильтрации по дате) - "2 и более" - только источники с 2 и более точками (после фильтрации по дате) **Важно**: Фильтр по количеству точек учитывает только те точки, которые прошли фильтрацию по дате! ### Управление данными в таблице **Кнопки удаления:** - **Кнопка с иконкой корзины** (для каждой точки) - удаляет конкретную точку (ObjItem) из таблицы - **Кнопка с иконкой заполненной корзины** (для первой точки источника) - удаляет все точки источника (Source) из таблицы **Важно**: Все удаления происходят только из таблицы, **БЕЗ удаления из базы данных**. Это позволяет пользователю исключить ненужные записи перед экспортом. ### Экспорт в Excel Кнопка "Экспорт в Excel" создает файл со следующими колонками: 1. **Дата** - текущая дата (без времени) 2. **Широта, град** - рассчитывается как **инкрементальное среднее** из координат оставшихся в таблице точек 3. **Долгота, град** - рассчитывается как **инкрементальное среднее** из координат оставшихся в таблице точек 4. **Высота, м** - всегда 0 5. **Местоположение** - из geo_obj.location первого ObjItem 6. **ИСЗ** - имя спутника и NORAD ID в скобках 7. **Прямой канал, МГц** - частота + перенос из транспондера 8. **Обратный канал, МГц** - частота источника 9. **Перенос** - из объекта Transponder 10. **Получено координат, раз** - количество точек (ObjItem), оставшихся в таблице для данного источника 11. **Период получения координат** - диапазон дат ГЛ в формате "5.11.2025-15.11.2025" (от самой ранней до самой поздней даты среди точек источника). Если все точки имеют одну дату, показывается только одна дата. 12. **Зеркала** - все имена зеркал через перенос строки (из оставшихся точек) 13. **СКО, км** - не заполняется 14. **Примечание** - не заполняется 15. **Оператор** - имя текущего пользователя **Важно**: - Экспортируются только точки (ObjItem), оставшиеся в таблице после удалений - Координаты рассчитываются по алгоритму инкрементального среднего из функции `calculate_mean_coords` (аналогично `fill_data_from_df`) - Если пользователь удалил некоторые точки, координаты будут рассчитаны только по оставшимся Файл сохраняется с именем `kubsat_YYYYMMDD_HHMMSS.xlsx`. ## Технические детали ### Файлы - **Форма**: `dbapp/mainapp/forms.py` - класс `KubsatFilterForm` - **Представления**: `dbapp/mainapp/views/kubsat.py` - классы `KubsatView` и `KubsatExportView` - **Шаблон**: `dbapp/mainapp/templates/mainapp/kubsat.html` - **URL**: `/kubsat/` и `/kubsat/export/` ### Зависимости - openpyxl - для создания Excel файлов - Django GIS - для работы с координатами ### Оптимизация запросов Используется `select_related` и `prefetch_related` для минимизации количества запросов к базе данных: ```python queryset = Source.objects.select_related('info').prefetch_related( 'source_objitems__parameter_obj__id_satellite', 'source_objitems__parameter_obj__polarization', 'source_objitems__parameter_obj__modulation', 'source_objitems__transponder__sat_id' ) ``` ## Использование 1. Откройте страницу "Кубсат" из навигационного меню 2. Выберите нужные фильтры (спутники, поляризация, частота и т.д.) 3. Опционально укажите диапазон дат для фильтрации точек по дате ГЛ (Этап 1) 4. Опционально выберите количество точек (1 или 2+) - применяется к отфильтрованным по дате точкам (Этап 2) 5. Нажмите "Применить фильтры" 6. В таблице отобразятся точки (ObjItem) сгруппированные по источникам (Source) 7. При необходимости удалите отдельные точки или целые объекты кнопками в колонке "Действия" 8. Нажмите "Экспорт в Excel" для скачивания файла с оставшимися данными 9. Форма не сбрасывается после экспорта - можно продолжить работу ## Примечания - Форма не сбрасывается после экспорта - Удаление точек/объектов из таблицы не влияет на базу данных - Экспортируются только оставшиеся в таблице точки - Координаты в Excel рассчитываются как инкрементальное среднее из оставшихся точек - Фильтр по дате скрывает неподходящие точки (не показывает их в таблице) - Каждая строка таблицы = одна точка (ObjItem), строки группируются по источникам (Source) - Количество точек в колонке "Кол-во точек" автоматически пересчитывается при удалении строк