Проекции пользователя в PostGIS
-
- Активный участник
- Сообщения: 212
- Зарегистрирован: 11 авг 2015, 16:13
- Репутация: 45
Проекции пользователя в PostGIS
Есть большое количество данных в нестандартных проекциях. В частности, всякие разновидности проекции Меркатора. Они определены в базе QGIS поэтому при хранении в виде Shape-ов проблем при добавлении в проект не возникает.
Если сохранять объекты с нестандартными проекциями в базу данных Postgree, то проекция теряется, т.к. в таблице PostGIS - "spatial_ref_sys" такой проекции нет. Пробовал тупо вручную прописать, но не получилось.
Как перенести пользовательскую проекцию из qgis.db в spatial_ref_sys, чтобы при импорте-экспорте слоев в базу данных сохранялась пользовательская проекция?
Есть ли какие-либо утилиты или плагины для управления или импорта проекций в PostGIS?
Если сохранять объекты с нестандартными проекциями в базу данных Postgree, то проекция теряется, т.к. в таблице PostGIS - "spatial_ref_sys" такой проекции нет. Пробовал тупо вручную прописать, но не получилось.
Как перенести пользовательскую проекцию из qgis.db в spatial_ref_sys, чтобы при импорте-экспорте слоев в базу данных сохранялась пользовательская проекция?
Есть ли какие-либо утилиты или плагины для управления или импорта проекций в PostGIS?
-
- Завсегдатай
- Сообщения: 297
- Зарегистрирован: 03 июн 2015, 10:19
- Репутация: 72
-
- Активный участник
- Сообщения: 212
- Зарегистрирован: 11 авг 2015, 16:13
- Репутация: 45
Re: Проекции пользователя в PostGIS
Спасибо, я видел эту ссылку. Во многом уже разобрался, но не до конца.
1. Как добавить пользовательскую проекцию, чтобы она была аналогична назначенной в QGIS?
Открываю qgis.db в DB Browser for SQLite, открываю spatial_ref_sys в pgAdmin4, добавляю новую запись spatial_ref_sys, пишу srid, auth_srid такие же как в qgis, копирую содержимое поля proj4 из одной таблицы в другую. Теперь надо скопировать в srtext описание в формате WKT. Стоп! Они сильно отличаются! Что делать? Сначала написал новый по аналогии с полями в spatial_ref_sys, потом пробовал вставить как есть - без разницы. Сохраняем исправления. У вас есть новая проекция с вашим srid. (Причем, для этого можно даже не знать язык sql
2. Однако, при экспорте в базу данных слоя с вашей проекцией qgis все-равно выставляет srid=0, но если вы используете утилиту shp2pgsql, даже через ее GUI, то можете вручную выставить srid нужное значение. При этом атрибуты геометрии в базе данных будут содержать ссылку на вашу новую проекцию.
Если все-таки размещали слой в базу при помощи средств qgis, то srid можно исправить и проверить при помощи запроса:
SELECT UpdateGeometrySRID('mm_bathymetry_vectors','Reprojected', 'geom', 100000);
SELECT Find_SRID('mm_bathymetry_vectors', 'Reprojected', 'geom')
Ответ будет 100000.
3. После всего этого, вставляя слой в проект вы получите слой содержащий проекцию. НО это будет пользовательская проекция без названия и srid !!! Возможно это сделано специально или из базы читается только proj4.
Вот и возникают вопросы:
Как упростить весь этот процесс? Можно ли согласовать пользовательские проекции?
Конечно, можно хранить в базе данные без указания проекции, а в проекте уже вручную присваивать, пока не забудешь что там была за проекция...
1. Как добавить пользовательскую проекцию, чтобы она была аналогична назначенной в QGIS?
Открываю qgis.db в DB Browser for SQLite, открываю spatial_ref_sys в pgAdmin4, добавляю новую запись spatial_ref_sys, пишу srid, auth_srid такие же как в qgis, копирую содержимое поля proj4 из одной таблицы в другую. Теперь надо скопировать в srtext описание в формате WKT. Стоп! Они сильно отличаются! Что делать? Сначала написал новый по аналогии с полями в spatial_ref_sys, потом пробовал вставить как есть - без разницы. Сохраняем исправления. У вас есть новая проекция с вашим srid. (Причем, для этого можно даже не знать язык sql
2. Однако, при экспорте в базу данных слоя с вашей проекцией qgis все-равно выставляет srid=0, но если вы используете утилиту shp2pgsql, даже через ее GUI, то можете вручную выставить srid нужное значение. При этом атрибуты геометрии в базе данных будут содержать ссылку на вашу новую проекцию.
Если все-таки размещали слой в базу при помощи средств qgis, то srid можно исправить и проверить при помощи запроса:
SELECT UpdateGeometrySRID('mm_bathymetry_vectors','Reprojected', 'geom', 100000);
SELECT Find_SRID('mm_bathymetry_vectors', 'Reprojected', 'geom')
Ответ будет 100000.
3. После всего этого, вставляя слой в проект вы получите слой содержащий проекцию. НО это будет пользовательская проекция без названия и srid !!! Возможно это сделано специально или из базы читается только proj4.
Вот и возникают вопросы:
Как упростить весь этот процесс? Можно ли согласовать пользовательские проекции?
Конечно, можно хранить в базе данные без указания проекции, а в проекте уже вручную присваивать, пока не забудешь что там была за проекция...
- Эдуард Казаков
- Гуру
- Сообщения: 546
- Зарегистрирован: 23 апр 2014, 17:11
- Репутация: 532
- Откуда: Planet Earth
- Контактная информация:
Re: Проекции пользователя в PostGIS
Извините, что с вопросом, а не советом - а какой замыслел в том, чтобы в одной БД данные хранить а) в разных б) экзотических системах координат? Обычно в PostGIS поступают так: хранят всё в одной унифицированной СК, про которую все знают, а если вдруг понадобится в другой, конвертируют на лету в запросе к данным, либо возлагают это на клиентское приложение.
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 04 июн 2021, 16:52
- Репутация: -1
- Откуда: Харьков
- Контактная информация:
Re: Проекции пользователя в PostGIS
Напишите в специальном разделе и предложите небольшую плата за эту работу. Я думаю желающие появятся
-
- Активный участник
- Сообщения: 212
- Зарегистрирован: 11 авг 2015, 16:13
- Репутация: 45
Re: Проекции пользователя в PostGIS
Все просто:Эдуард Казаков писал(а): ↑04 июн 2021, 16:41какой замыслел в том, чтобы в одной БД данные хранить а) в разных б) экзотических системах координат?
а) как правило, данные получаются из разных источников, имеют разные СК. Чаще всего часть в географических, часть в проективных координатах.
б) есть такая штука - отчетная система координат. Иногда даже задают системы преобразования координат. В ArcGIS была даже такая табличка - точность преобразований для каждой СК. Поэтому выбирается СК обеспечивающая требуемую точность, пусть даже и экзотическая. Другая причина, использование бумажной карты. Например, для морских работ используют проекцию Меркатора, но без масштабной рамки будет очень не просто измерить на ней расстояние.Масштаб вашего проекта будет соблюдаться только на экваторе. Поэтому создается новая проекция со средней широтой района работ (+ts). Тут-то все и начинается. Кто-то перевел в эту проекцию, какая-то программа не позволила и оставили в нулевом Меркаторе, что-то осталось в градусах.
Замысел в том, чтобы не заморачиваться со всем этим, а хранить как есть, но чтобы процесс был простым и прозрачным.
Про это я уже написал:Эдуард Казаков писал(а): ↑04 июн 2021, 16:41если вдруг понадобится в другой, конвертируют на лету в запросе к данным, либо возлагают это на клиентское приложение.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей