Files
dbstorage/dbapp/KUBSAT_FEATURE.md

155 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Страница Кубсат
## Описание
Страница "Кубсат" предназначена для фильтрации источников сигнала (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)
- Количество точек в колонке "Кол-во точек" автоматически пересчитывается при удалении строк