Страница с Кубсатами
This commit is contained in:
142
dbapp/KUBSAT_FEATURE.md
Normal file
142
dbapp/KUBSAT_FEATURE.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Страница Кубсат
|
||||
|
||||
## Описание
|
||||
Страница "Кубсат" предназначена для фильтрации источников сигнала (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 заголовок
|
||||
|
||||
### Выделение по дате
|
||||
Строки, у которых дата ГЛ попадает в выбранный диапазон дат, **выделяются зеленым цветом**. При этом все объекты остаются в таблице, независимо от фильтра по дате.
|
||||
|
||||
### Управление данными в таблице
|
||||
|
||||
**Кнопки удаления:**
|
||||
- **Кнопка с иконкой корзины** (для каждой точки) - удаляет конкретную точку (ObjItem) из таблицы
|
||||
- **Кнопка с иконкой заполненной корзины** (для первой точки источника) - удаляет все точки источника (Source) из таблицы
|
||||
|
||||
**Кнопка "Оставить только подходящие по дате":**
|
||||
- Удаляет из таблицы все точки, которые НЕ подходят по заданному диапазону дат
|
||||
- Оставляет только зеленые (выделенные) строки
|
||||
- Запрашивает подтверждение перед удалением
|
||||
|
||||
**Важно**: Все удаления происходят только из таблицы, **БЕЗ удаления из базы данных**. Это позволяет пользователю исключить ненужные записи перед экспортом.
|
||||
|
||||
### Экспорт в Excel
|
||||
|
||||
Кнопка "Экспорт в Excel" создает файл со следующими колонками:
|
||||
1. **Дата** - текущая дата (без времени)
|
||||
2. **Широта, град** - рассчитывается как **инкрементальное среднее** из координат оставшихся в таблице точек
|
||||
3. **Долгота, град** - рассчитывается как **инкрементальное среднее** из координат оставшихся в таблице точек
|
||||
4. **Высота, м** - всегда 0
|
||||
5. **Местоположение** - из geo_obj.location первого ObjItem
|
||||
6. **ИСЗ** - имя спутника и NORAD ID в скобках
|
||||
7. **Прямой канал, МГц** - частота + перенос из транспондера
|
||||
8. **Обратный канал, МГц** - частота источника
|
||||
9. **Перенос** - из объекта Transponder
|
||||
10. **Получено координат, раз** - количество точек (ObjItem), оставшихся в таблице для данного источника
|
||||
11. **Дата** - пока заполняется как "-"
|
||||
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. Опционально укажите диапазон дат для выделения подходящих точек
|
||||
4. Нажмите "Применить фильтры"
|
||||
5. В таблице отобразятся все точки (ObjItem) сгруппированные по источникам (Source)
|
||||
6. Точки, подходящие по дате, будут выделены зеленым цветом
|
||||
7. Опционально нажмите "Оставить только подходящие по дате" для быстрого удаления неподходящих точек
|
||||
8. При необходимости удалите отдельные точки или целые объекты кнопками в колонке "Действия"
|
||||
9. Нажмите "Экспорт в Excel" для скачивания файла с оставшимися данными
|
||||
10. Форма не сбрасывается после экспорта - можно продолжить работу
|
||||
|
||||
## Примечания
|
||||
|
||||
- Форма не сбрасывается после экспорта
|
||||
- Удаление точек/объектов из таблицы не влияет на базу данных
|
||||
- Экспортируются только оставшиеся в таблице точки
|
||||
- Координаты в Excel рассчитываются как инкрементальное среднее из оставшихся точек
|
||||
- Фильтр по дате не скрывает объекты, а только выделяет их цветом
|
||||
- Каждая строка таблицы = одна точка (ObjItem), строки группируются по источникам (Source)
|
||||
Reference in New Issue
Block a user