Я делаю астрономический проект. Я хочу, чтобы информация о наших изображениях сохранялась в пространственно включенной базе данных. Это, я думаю, должно быть очень простым особым случаем для ГИС-функций, потому что небо можно рассматривать как совершенно сферическое и не требует эллиптической обработки, как поверхность земли. К сожалению, я еще не нашел способ сделать это, и я уклоняюсь от шахт с пространственными функциями, которые используют эллиптическую землю. (Практически любая функция, которая возвращает метры вместо градусов, может использовать эллиптическое вычисление. К счастью, многие из необходимых мне функций PostGIS имеют неполные реализации, где в документации явно говорится, что возвращаемые результаты относятся к сфере, а не к эллипсоид. Но это может измениться с будущими версиями, что является причиной для беспокойства.)
Справочная информация: в настоящее время я использую PostgreSQL с координатами PostGIS и WGS 84 (SRID = 4326). Это работает довольно хорошо. Я создаю замкнутый ПОЛИГОН из правильного восхождения и склонения четырех углов изображения. У меня есть много изображений (10k или более), охватывающих большую область неба. Каждое изображение около 1 градуса. Из набора этих изображений я делаю мозаику из небольших подмножеств от 15 до 30 изображений. Каждая мозаика имеет площадь около 1,5 градуса.
В настоящее время я сохраняю географию мозаик как МНОГОПОЛИГОН, который состоит из всех ПОЛИГОНОВ, соответствующих каждому изображению, которое вошло в мозаику. [Лучшим решением было бы создать один полигон, который описывает периметр объединения всех отдельных полигонов. Я не знаю, может ли это быть сделано в сферических координатах (то есть, что тип географии). Это также было бы интересным ответом и для меня.] Линия даты и небесные полюса могут быть включены в изображение в наборе данных, поэтому я избегаю проецирования на плоские координаты в максимально возможной степени.
Какую систему координат я должен использовать для небесных координат с функциями PostGIS?
Я посмотрел на http://spatialreference.org/, но пока не нашел ничего. Гугл появился мало. Я в тупике. По сути, я хочу убедиться, что если функция возвращает метры как расстояние, то это метры вдоль большого круга на сфере.
В более общем смысле, некоторые советы по использованию небесных координат в пространственной базе данных также будут оценены.
Я ошибся, выбрав PostGIS?
Есть ли намного более высокий коммерческий выбор?
Выбор FOSS?
Я использую PostGIS 1.5.2. Я еще не пробовал PostGIS 2.0. Мне любопытно, если функция ST_CoveredBy работает с POLYGON и MULTIPOLYGON типа география. Если кто-нибудь использует 2.0, не могли бы вы сказать мне, если вы получаете ту же ошибку, как это:
mydb=# select ST_CoveredBy(ST_GeographyFromText('MULTIPOLYGON(( (10.37795 -69.57926,8.9498 -69.54875,9.0178 -69.21643,10.4242 -69.24648,10.37795 -69.57926),(10.42436 -69.24618,9.01774 -69.2162, 9.08363 -68.88389,10.46914 -68.91344,10.42436 -69.24618)))'),ST_GeographyFromText('POLYGON((10.46915 -68.91315,9.08371 -68.88364,9.14755 -68.5513,10.5125 -68.58038,10.46915 -68.91315))'));
ERROR: geography_covers: only POLYGON and POINT types are currently supported
CONTEXT: SQL function "st_coveredby" statement 1
Я попробовал PostGIS 2.0. Эта функция все еще работает только с точками и полигонами, а не с более общими фигурами.
источник
Ответы:
Посмотрите pgsphere, он специально разработан для обработки астрономических данных.
http://pgsphere.projects.postgresql.org/
источник
В PostGIS можно хранить небесные координаты - вам просто нужно создать собственную систему координат!
PostGIS получает всю свою систему координат и информацию о проекции из таблицы,
spatial_ref_sys
которая обычно заполняется при инициализации базы данных. Но ничто не мешает вам добавлять свои собственные прогнозы - это действительно поощряется .Как и почти все ГИС / пространственные базы данных / картографические продукты, PostGIS использует Proj4 для своих потребностей проецирования, поэтому вам нужно поместить строку Proj4 в
spatial_ref_sys
таблицу. Простой сферический SRS в форме Proj4:+proj=longlat +ellps=sphere +no_defs
. PostGIS также требует версию проекции WKT, но я думаю, что это просто текст.Вам также потребуется придумать уникальный SRID для вашей новой SRS, а также «авторитет», но это может быть все, что вам нравится.
Чтобы вставить новую запись
spatial_ref_sys
, просто выполните этот SQL:Обратите внимание, что я выбрал 40000 в качестве SRID - это число, которое вы используете в своей таблице небесных объектов. Authroity - «ME», но это может быть ваше имя, организация или что-то действительно длиной до 256 символов. Следующее число, 1, это просто ваш уникальный идентификатор для этой записи относительно полномочий. Теоретически вы можете ссылаться на эту запись как ME: 1, но для всей обработки PostGIS это уникальный SRID, который имеет значение. Запись WKT, которую я создал с помощью GDAL и Python:
Теперь предостережения:
источник
LON = (RA*15) - 180
аLAT = DEC
?