Чи може QGIS читати просторові види?


11

У мене створена просторова база даних, яка охоплює кілька років даних про злочини. Щоб полегшити сценарій у реальному світі, коли я можу спростити взаємодію з користувачем, вводячи Погляд, який просто обмежує проміжок часу або які типи злочинів повертаються, я хочу знати, чи можна QGIS прочитати цей вид, як це чи будь-яка інша просторова таблиця в моїй базі даних. Сенс у тому, що я, очевидно, не хочу створювати окрему таблицю для кожного можливого перегляду, який я можу використовувати, і я намагаюся спростити це, не вимагаючи від користувача знання бази даних та відповідного SQL для підмноження самих даних. Аналогічний робочий процес у світі ArcGIS може створювати окремі файли шарів, які користувач міг би відкрити в ArcMap, які мають доступ до бази даних (скажімо, SQL Server) і представляють лише обмежений набір даних.

Я створив View у своїй базі даних, але він не відображається у списку класів функцій, які я можу імпортувати, коли я підключаюся до просторового db у QGIS. Можливо, Перегляд не вважається просторовим? (Це те, що я хочу розглянути пізніше, але я подумав, що вже це зробив; я просто не згадую висновок.) У будь-якому випадку, як можна повторити тип робочого потоку, який я хочу, або подібну альтернативу ArcGIS ?

Відповіді:


15

Я думаю, ви повинні зареєструвати подання в таблиці geometry_column, щоб мати можливість використовувати його в QGIS.

Хороший ресурс - "Написання власного просторового огляду " із наступним прикладом:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column)
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry');

У будь-якому випадку ви повинні зареєструвати цей VIEW у стовпцях views_geometry_column, щоб він став справжнім просторовим видом.


Це, здається, питання. Я створив подання і перевірив мета-таблиці. Очевидно, геометрія з виду не вказана. Як зареєструвати геометрію подання? Я спробував RecoverGeometryColumn, але це говорить про те, що таблиця не існує. Я думав, що я працюю на версії 2.4, але, мабуть, я працюю з бета-версією Spatialite 3.0. Можливо, я неправильно реалізую команду? Може, це не працює на поглядах? (Краще!); для наочності моєю командою було SELECT RecoverGeometryColumn ('tblName', 'SHAPE', 2226, 'POINT', 2);
Брайан Гудріч

4
Існує спеціальна таблиця для обробки зображень на основі геометрії. Використовуйте наступний синтаксис ВСТАВИТИ В VIEWS_GEOMETRY_COLUMNS ЦІННОСТІ ('{ІМ’Я ТАБЛИЦЯ}', '{ІМЕЙ ГОЛОВНОЇ КОЛІМИ}', '{ТИП ГЕОМИ}', 2, {SRID}, 0);
Nathan W

приклад: ВСТАВИТИСЯ В VIEWS_GEOMETRY_COLUMNS ЦІННОСТІ ('Towns_v1', 'Geometry', 'POINT', 2, 32632, 0);
Nathan W

Використовуйте, SELECT * FROM views_geometry_columns;щоб побачити, що потрібно вставити. Більше інформації на сайті gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/…
Nathan W

2

Можливо, вам також доведеться вставити унікальний ідентифікатор у подання, подібне до того, що тут обговорюється: Чи можливо в PostGIS створити представлення з унікальним ідентифікатором?


Якщо я явно не виберу ПК у створенні перегляду, не вдалося б перенести унікальний ідентифікатор? Принаймні для простого вибору запиту, який я роблю тут.
Брайан Гудріч

@ BryanGoodrich - Спробуйте, але це не працює таким чином з поглядами PostGIS, наскільки я знайшов.
RyanKDalton

Погляд був створений "ВИБРАТИ * ВІД злочину, де ...", і я підмножую за допомогою пункту "куди". Це повернуло стовпець PK (ім'я рядка, яке я згенерував з імен стовпців таблиці R, яку я використовував для заповнення БД SQLite). Проблема така, як підкреслено: вона потребує геометрії в мета-таблицях. Це те, що QGIS використовує для ідентифікації просторових таблиць, а представлення не містить записів у цих мета-таблицях.
Брайан Гудріч

Добре знати. Дякуємо, що поставили запитання та отримали хорошу відповідь
RyanKDalton

2

реєстрація подання в геометричних колонках на сьогодні (рік 2015), здається, вимагає додаткового поля "read_only", наприклад:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry', 1);

1
Не могли б ви додати посилання на допоміжну документацію? Дякую!
андеркап

2

Для SpatialLite 4.x необхідні дві зміни вихідної відповіді - додавання read_onlyстовпця та зміна всіх вставлених значень на малі регістри. Оновлений SQL виглядатиме так:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'rowid', 'local_councils', 'geometry', 1);

read_onlyПоле приймає значення 0 або 1. (коментар знайомства Сандро Furieri в в Google Groups для подальших роз'яснень.)

Більш детально про ці та інші зміни 4.x можна ознайомитись у вікі про перехід на 4.0 .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.