![](https://habrastorage.org/getpro/habr/upload_files/c9b/f9d/bf0/c9bf9dbf0811af7f6159ac2135d5f941.png)
Свободная СУБД PostgreSQL известна не только как высокопроизводительное решение для выполнения запросов и хранения данных в реляционной модели, но также своим механизмом расширения, который позволяет создавать дополнительные функции, типы данных, индексы и иные структуры данных для разных предметных областей. В этой статье мы рассмотрим некоторые подходы к сохранению и обработки данных астрономических каталогов (альманахов) с использованием возможностей PostgreSQL.
В PostgreSQL в расширенном наборе модулей (contrib) представлены расширения для работы с географическими координатами PostGIS, которые позволяют определять местоположение на Земле, расстояния между точками на поверхности Земли (модуль earthdistance). Можно ли их использовать для определения координат звездных объектов? И как вообще можно задавать координаты планет, звезд и иных объектов в космическом пространстве, где нет выделенной системы координат и однозначно определяемых направлений?
Существует два подхода к определению положения объектов:
использование модели "небесной сферы", которая представляется как воображаемая поверхность, на которую "проецируется" изображение объекта на небе (при этом не учитывается расстояние до объекта, так как определяется только направление луча - прямое восхождение (right ascension, аналог долготы на Земле) и склонение (declination, аналог широты на Земле). Такая система координат называется "вторая экваториальная система координат". Важно понимать, что видимое направление на небесный объект зависит от географического положения наблюдателя, даты и времени суток, поскольку визуально объекты на небесной сфере изменяют свое положение из-за суточного и годового вращения Земли. Координаты записываются с привязкой к положению звездных объектов к эпохе (например, есть каталог J2000 с ориентировкой на положение в 2000 году с учетом прецессии небесной сферы и движения звезд).
использование опорных объектов, положение которых практически неизменно и известно (к ним относятся Цефеиды, пульсары, квазары и иные объекты, характеристики которых известны). В этом случае положение может задаваться относительно них, при этом косвенно может определяться как расстояние до объекта (по доплеровскому сдвигу, более известному как "красное смещение"), так и светимость объекта (относительно стандартных свечей - цефеидов, сверхновых звезд и другим эталонным объектам).
В обоих случаях направление на объект задается относительно наблюдателя или от другого опорного объекта. И соответственно для фиксации наблюдения небесного объекта (например, кометы) нужно сохранять одновременно и расположение наблюдателя на Земле и дату-время (желательно в UTC) и направление на объект. Также нужно помнить, что факт визуальной близости небесных объектов на "небесной сфере" не говорит об их положении в пространстве, поскольку они могут находиться на значительном расстоянии вдоль направления взгляда наблюдателя, следовательно для обнаружения близких звезд будет необходимо сохранить информацию, которая может использоваться для определения расстояния до объекта.
Для хранения географических координат можно использовать обычные float-поля (широта/долгота), но для более сложной обработки и представления координат в разных моделях земной поверхности лучше использовать расширение PostGIS. Кроме работы с координатами расширение также поддерживает геокодер (для преобразования адресов в координаты и наоборот) и описание фигур, при этом поддерживаются разные модели поверхности (например, WGS84 и другие Spatial Reference System / SRID). Для создания таблицы с указанием точек на земной поверхности в WGS84 можно использовать запрос:
CREATE TABLE global_points (
id SERIAL PRIMARY KEY,
name VARCHAR(64),
location geography(POINT,4326)
);
Добавление точек выполняется через обращение к функции POINT:
INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(90 60)');
Кроме этого PostGIS представляет методы для работы с фигурами на поверхности Земли (например, обнаружения пересечения многоугольников и принадлежности точек). Но использовать только его для описания небесных объектов не выглядит хорошей идеей. Широта/долгота привязываются к одной из множества эталонных систем, которые принимают модель Земли как сфероида или более сложной фигурой), но это сложно соотнести с координатами на небесной сфере. Кроме того, для определения положения для произвольного наблюдателя нужно производить вычисления положения объекта на небесной сфере (и возможности наблюдения в этом местоположении в это время года). Для этих задач можно использовать специализированные расширения для обработки сферических координат на небесной сфере.
Для начала рассмотрим существующие каталоги астрономических объектов и их форматы представления информации:
Yale Bright Star Catalogue - содержит информацию о звездных объектах ярче 6.5 звездных величин. Содержит данные в двоичном формате, описывает положение и характеристики звездных объектов (звездная величина, спектральный класс, радиальная скорость, скорость в других направлениях и др). Координаты может быть представлены в системах B1950 / J2000;
Guide Star Catalog - каталог звезд по фотографиям с телескопа Хаббла;
HyperLeda - информация о расположении и структуре галактик;
SAO - Smithsonian Astrophysical Observatory Star Catalog - содержит также информацию об источнике информации о небесном объекте;
Базы данных Государственного Астрономического Института имени П.К. Штернберга МГУ.
Для сохранения сферических координат в PostgreSQL можно использовать следующие расширения:
pgSphere - поддерживает создание индексов для упорядочивания объектов по сферическим координатам (разновидность R-TREE), описание фигур на небесной сфере (например, можно описывать границы созвездий и проверять нахождение объекта внутри созвездия), а также преобразования на небесной сфере (например, для определения направления для произвольного наблюдателя). Например, может быть определена площадь для окружности или многоугольника на небесной сфере (в стерадианах), выполнено преобразование координат в декартовы (и обратную сторону) и др. Больше не поддерживается.
q3c - оптимизированное хранение положение небесных объектов (ipix), вычисления расстояния между звездными объектами на небесной сфере (даже если ra/dec относятся к разным эпохам), поиск объектов, которые находятся в пределах конуса (вблизи указанного направления)
pg_healpix - расширение для работы с HEALPix (растеризация пикселей сферы, когда каждый пиксель занимает одинаковую площадь на поверхности сферы).
Также есть предложения к созданию расширений SQL-синтаксиса для работы с астрономическими базами данных, например Astronomy Data Query Language, который может использоваться например с облачной базой данных европейского космического агентства Gaia. ADQL может быть реализован на PostgreSQL, подробности описаны в этой публикации.
Индексы баз данных: когда использовать, а когда лучше остановить проджекта? Об этом и не только поговорим на бесплатном уроке, который пройдет уже 3 ноября. Регистрация на урок доступна по ссылке ниже.