Страница 1 из 1
Создание одного представления для трех таблиц из разных СК
Добавлено: 09 ноя 2017, 00:46
VorSer
В БД (postgresql 9.6+postgis) есть три таблицы (table1, table2, table3) с полигонами, каждая их которых содержит геометрию в одной из трех зон МСК (SRID прописаны вручную в spatial_ref_sys).
Все изменения вносятся оператором в таблицы, для просмотра (то есть возможность редактирования не нужна в данном случае совсем) удобнее было бы все данные в одном слое.
Подскажите, возможно ли и как создать одно представление (view0) в EPSG:4326 этих таблиц с сохранением всей атрибутивной информации?
Не будет ли путаницы с первичными ключами, так как в качестве ключа служит int_id (счетчик) у каждой таблицы свой, соответственно уникальность его проверяется в рамках одной таблицы?
Re: Создание одного представления для трех таблиц из разных СК
Добавлено: 09 ноя 2017, 04:35
trir
ST_Transform
Не будет ли путаницы с первичными ключами
это же представление
Re: Создание одного представления для трех таблиц из разных СК
Добавлено: 09 ноя 2017, 15:23
VorSer
Код: Выделить всё
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"
Re: Создание одного представления для трех таблиц из разных СК
Добавлено: 09 ноя 2017, 15:39
trir
"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
Re: Создание одного представления для трех таблиц из разных СК
Добавлено: 10 ноя 2017, 00:53
VorSer
В общем, кое-как получилось
Код: Выделить всё
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овский менеджер БД пишет, что у этой вьюхи "В полях геометрии нет записей!". Что характерно, слой загружается и показвается как надо и где надо.
Буду благодарен за разъяснения.
Re: Создание одного представления для трех таблиц из разных СК
Добавлено: 10 ноя 2017, 10:10
freeExec
Можно сделать у других таблиц SELECT id+X000000000 ...