Создание одного представления для трех таблиц из разных СК

Ответить
VorSer
Интересующийся
Сообщения: 24
Зарегистрирован: 18 июл 2017, 12:26
Репутация: 0

Создание одного представления для трех таблиц из разных СК

Сообщение VorSer » 09 ноя 2017, 00:46

В БД (postgresql 9.6+postgis) есть три таблицы (table1, table2, table3) с полигонами, каждая их которых содержит геометрию в одной из трех зон МСК (SRID прописаны вручную в spatial_ref_sys).
Все изменения вносятся оператором в таблицы, для просмотра (то есть возможность редактирования не нужна в данном случае совсем) удобнее было бы все данные в одном слое.
Подскажите, возможно ли и как создать одно представление (view0) в EPSG:4326 этих таблиц с сохранением всей атрибутивной информации?
Не будет ли путаницы с первичными ключами, так как в качестве ключа служит int_id (счетчик) у каждой таблицы свой, соответственно уникальность его проверяется в рамках одной таблицы?
Последний раз редактировалось VorSer 24 ноя 2017, 21:09, всего редактировалось 1 раз.

trir
Гуру
Сообщения: 3117
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 500
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Создание одного представления для трех таблиц из разных СК

Сообщение trir » 09 ноя 2017, 04:35

ST_Transform
Не будет ли путаницы с первичными ключами
это же представление

VorSer
Интересующийся
Сообщения: 24
Зарегистрирован: 18 июл 2017, 12:26
Репутация: 0

Re: Создание одного представления для трех таблиц из разных СК

Сообщение VorSer » 09 ноя 2017, 15:23

Код: Выделить всё

CREATE VIEW view0 AS select ST_Transform(geom, 4326) from table1, table2, table3;
В результате "ERROR: column reference "geom" is ambiguous"
Если оставить одну таблицу, то запрос выполняется, но в представлении 1 колонка ST_Transform, которая не содержит геометрии, а при попытке просмотра представления:
"ERROR: Input geometry has unknown (0) SRID"

trir
Гуру
Сообщения: 3117
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 500
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Создание одного представления для трех таблиц из разных СК

Сообщение trir » 09 ноя 2017, 15:39

"ERROR: Input geometry has unknown (0) SRID"
geometry ST_Transform(geometry geom, text from_proj, text to_proj);
"ERROR: column reference "geom" is ambiguous"
откуда geom?

Union

VorSer
Интересующийся
Сообщения: 24
Зарегистрирован: 18 июл 2017, 12:26
Репутация: 0

Re: Создание одного представления для трех таблиц из разных СК

Сообщение VorSer » 10 ноя 2017, 00:53

В общем, кое-как получилось

Код: Выделить всё

Create view view_0 AS
(select 
ST_transform
(geom, '+proj=tmerc +lat_0=0 +lon_0=32.48333333 +k=1 +x_0=1250000 +y_0=-6012900.566 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs'::text, 4326) AS geom,
name, name_print, map_area from table_1)
UNION ALL
(select ... from table_2)
UNION ALL
(select ... from table_3)
Что смущает:
1. Поле id из представления пришлось убрать: заброс обрабатывается, вьюха создается, но QGIS отказывается её подгружать. Подозреваю, что она его считает первичным ключем и пытается индексировать, а значения повторяются...
2. Почему-то QGISовский менеджер БД пишет, что у этой вьюхи "В полях геометрии нет записей!". Что характерно, слой загружается и показвается как надо и где надо.
Буду благодарен за разъяснения.

freeExec
Гуру
Сообщения: 581
Зарегистрирован: 23 апр 2011, 10:32
Проекты: 1
Репутация: 79
Откуда: Ульяновск

Re: Создание одного представления для трех таблиц из разных СК

Сообщение freeExec » 10 ноя 2017, 10:10

Можно сделать у других таблиц SELECT id+X000000000 ...

Ответить

Вернуться в «PostGIS/PostgreSQL»