Создание пространственного вида в PostGIS и добавление его в качестве слоя в QGIS?

49

В PostGIS 2.0 я ищу эффективный способ создания пространственно разрешенного представления, которое можно просматривать в QGIS.

Я следовал контексту части 2 ответа @Mike Toews на Как создать таблицу из существующих таблиц (применяя новые схемы) в БД postgis? и вид отображается как точечный слой (в моем случае) в диалоговом окне «Добавить слои PostGIS». Но после создания представления и пространственного включения его я получил следующую ошибку при попытке добавить представление в QGIS:

Вы должны выбрать таблицу, чтобы добавить слой

Может кто-нибудь объяснить, почему пространственное представление не будет загружаться в QGIS, и что мне нужно сделать, чтобы сделать его загружаемым как слой в QGIS?

В настоящее время я использую QGIS v1.8 из установщика OSGEO

Я смотрю построен из базы данных Geonames, загруженных в PostGIS. Таблица географических названий / пространственные данные могут быть просто выбраны / просмотрены в QGIS.

Когда я пытаюсь выбрать « mt_view », QGIS видит представление в диалоговом окне, но не позволяет мне выбрать его. Он дает пунктирную рамку вокруг области, но не выделяет и не выбирает вид.

QGIS не может выбрать mt_view в качестве слоя


Я просто заметил, что когда я запускаю свой первый запрос:

CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'

вид отображается в диалоге добавления слоя QGIS, но его нельзя выбрать. Тогда, когда я бегу:

SELECT Populate_Geometry_Columns('data.test'::regclass);

Я получаю результат «0», где, согласно документации , я думаю, что он должен возвращать «1».

RyanDalton
источник
1
Я подтверждаю проблему. В QGIS 1.8, PostGIS 2.0 и представлении, созданном из таблицы с первичным ключом, представление отображается в списке доступных слоев, но появляется сообщение об ошибке «Необходимо выбрать таблицу, чтобы добавить слой».
giohappy
2
Есть ли другой способ автоматически установить первичный ключ в окне Addgis Add Layer при работе с представлениями? Очень сложно выбрать поле первичного ключа на этом экране для любых слоев / представлений, если вы представляете себе обычного пользователя ГИС, и представление имеет множество целочисленных полей.
@Pgimenez, я бы предложил начать новый вопрос с того, что вы указали выше, а затем сослаться на этот вопрос по своему усмотрению. Это даст ему гораздо более широкую видимость.
RyanDalton
В qgis 1.8 lisboa нет способа визуализировать выпуклую оболочку? Я пытался следовать vievs в Postgis 1.5. Мне сказали использовать столбец id для публикации в Qgis. Если вы не используете столбец id, вы все равно не сможете загрузить его из-за ошибки. 1. создайте или замените представление con_hull_baeume3 (bid) как выберите '0', ST_ConvexHull (ST_Collect (geom)) FROM baeume; 2. создать или заменить представление con_hull_baeume4 (bid) в качестве выбранной ставки, ST_ConvexHull (ST_Collect (geom)) FROM baeume group by bid; но этот делает выпуклый корпус на каждой из геометрических точек. Я имею в виду просто использовать 'select ST_ConvexHull (ST_Collect (geom)) FROM baeume;' работает
Улан
1
Добро пожаловать! Пожалуйста, опубликуйте это как новый вопрос, так как он не отвечает на первоначальный. По крайней мере, если это вопрос, так как последнее утверждение не ясно, удалось ли вам или нет.
lynxlynxlynx

Ответы:

54

Я могу подтвердить, что невозможно просто выбрать вид из списка.

Кажется необходимым сначала выбрать «столбец первичного ключа». Затем таблица становится доступной для выбора:

введите описание изображения здесь

Подземье
источник
1
Вау, я бы никогда этого не увидел. Спасибо! Я отредактировал заголовок, чтобы отразить проблему с QGIS, а не с представлением PostGIS.
RyanDalton
Похоже, это проблема для QGIS 1.8 (которую я еще не использовал). Эти шаги не требуются для 1.7.
Майк Т
Правильно, 1,7 попытался угадать первичный ключ. Но это не сработало.
Подземье
В дополнение к этому @underdark, принимает ли QGIS другие типы ПК?
Георгий Сильва
1
В QGIS3 столбец озаглавлен «идентификатор функции», а не «столбец первичного ключа», и (по крайней мере, для меня) он находится за пределами окна по умолчанию (то есть невидимо) и не указывает на то, что столбцов было больше! Я думаю, что я буду регистрировать запрос функции, который будет предложен для этих деталей (если необходимо) после выбора. Похоже, что разработчики предполагают, что люди позаботятся о том, чтобы в первом столбце был уникальный ключ.
Рассел Фултон
5

(Обновление моего ответа немного)

До тех пор, пока поле OBJECTID (row_number) будет первым в определении столбца представления , QGIS будет выбирать его, не прося вас добавить его из меню «Добавить векторный слой».

CREATE OR REPLACE VIEW dqmt.addressverify AS 
 SELECT row_number() OVER (ORDER BY newaddresses.addressid) AS objectid,
    newaddresses.addressid
  , geom
   FROM dqmt.newaddresses;

Я просто исправил некоторые старые представления, которые были нарушены в соответствии с первоначальным вопросом, но перемещение поля OBJECTID в начало представления устранило проблему!

DPSSpatial
источник
Я также использовал синтаксис row_number () over () для многих представлений. Я обычно использовал «gid» для моего поля первичного ключа. Все ли другие ваши взгляды используют "objectid" в качестве своего первичного ключа?
RyanDalton
обычно objectid - который работал в примере выше - но попробует gid ... это что-то, что QGIS распознает перед любым другим полем 'id'?
DPSSpatial
GID не имеет никакого влияния на это ...
DPSSpatial
Просто придумываю возможности. спасибо за проверку
RyanDalton
(Поздно, но ...) по-моему, я думаю, что если таблица, которая загружается, имеет PRIMARY KEYопределенное значение, QGIS постоянно ее подхватывает: она никогда не может «выбрать» PK на любой из моих таблиц, которые имеют ПК, хотя почти все мои ПК есть VARCHAR. Этого не может быть с a, VIEWпотому что в PostgreSQL VIEWs не может быть CONSTRAINTs. Я уверен, что именно поэтому необходимо выбирать PK для VIEWs вручную при импорте в QGIS через кнопку «Добавить слои PostGIS», поэтому я импортирую их, используя скрипт Python.
GT.
4

Ваш вид отображается в geometry_columnsтаблице? Согласно руководству, представление должно автоматически отображаться в версии 2.0, но я не пробовал.

Попробуйте выполнить следующее, чтобы проверить:

SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims 
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';
Ян Тертон
источник
Да, выполнение этой проверки с моей точки зрения возвращает: the_geom, Point, 4269,2
RyanDalton
3

Используется ли в вашем представлении уникальное целочисленное поле, например «gid» или PK, эквивалентное одной из таблиц в вашем представлении?

Я знаю, что в предыдущих версиях QGIS у меня были проблемы с добавлением видов на карту, когда не было уникального целочисленного поля. Однако я получил другое сообщение об ошибке, указывающее на эту проблему, но, возможно, стоит проверить, чтобы охватить все базы.

Ando
источник
Да, в таблице geonames есть «geonameid», который является уникальным идентификатором, и для этого поля установлено ограничение PRIMARY KEY.
RyanDalton