Чтение ODBC-соединения с использованием QGIS? [закрыто]

16

У меня есть сотрудник, который управляет большой базой данных MS Access, которая содержит поля X & Y для различных местоположений, которые он отслеживает. Ранее мы экспортировали данные в CSV и использовали текстовый плагин QGIS с разделителями для построения местоположений.

Теперь мы хотели бы отобразить эти данные непосредственно в QGIS, подключившись к базе данных MS Access через соединение ODBC (в отличие от экспорта в CSV).

  1. Может ли QGIS использовать данные из соединения ODBC для построения местоположений XY?
  2. Может ли он быть «живым» связан с соединением ODBC, чтобы при повторном открытии проекта слой «динамически» реплотировал все старые и вновь добавленные местоположения (в отличие от экспорта в шейп-файл, который создавал бы моментальный снимок)?
  3. Можете ли вы создать табличные ODBC-соединения, которые можно присоединить к пространственным таблицам в QGIS?

Вы можете делать все это в ArcGIS (инструмент «Добавить данные XY»), поэтому было бы здорово, если бы эта возможность существовала в QGIS. Я просто не могу найти нигде, где упоминается о его существовании.

Я не планирую переходить на пространственную базу данных. Как сам ГИС, да, я знаю, что имеет смысл перейти к пространственной базе данных, и да, я использовал PostGIS для управления такого рода данными. Но это не варианты прямо сейчас. Пользователь не ГИС и не хочет им быть, и он управляет своей собственной базой данных в MS Access, и это не изменится. Я втягиваю его и кричу в мир ГИС и хочу сделать его максимально легким. Он может жить с экспортом в CSV, я просто надеялся, что есть лучшее решение, использующее ODBC FOR MS ACCESS и отображающее данные XY в QGIS.

RyanKDalton
источник
Тогда, насколько мне известно, вы не можете делать то, что просите в QGIS. Я согласен, что в ODBC-эквиваленте импорта CSV будет какое-то применение, но для любой производительности это должен быть импорт, а не динамическое соединение - как плагин CSV. Таким образом, вряд ли будет какое-либо усвоение, если вы сами его не поддержите / не разработаете.
MerseyViking
@ MV- Я вообще с тобой согласен и вижу твои очки. Однако для пользователей не-ГИС, которые в первую очередь заинтересованы в простом отображении своих данных, а не в анализе данных, производительность QGIS не будет столь значительной проблемой. Я полагаю, что наличие динамического «всегда живого» подключения к их данным почти наверняка перевесит проблемы с производительностью (опять же, думая об этом с точки зрения пользователей, не являющихся ГИС).
RyanKDalton
Отличный ответ на аналогичный вопрос при доступе к QGIS 2.4. Ошибка добавления
mdb

Ответы:

7

Предостережение: я не пробовал этого, поэтому я готов поклониться любому, кто имеет непосредственный опыт.

Вы можете подключиться к источнику данных ODBC в диалоговом окне «Добавить векторный слой», просто выберите «база данных» в качестве типа источника и ODBC в качестве типа базы данных. QGIS использует драйвер ODBC для OGR , поэтому будут применяться те же предостережения - то есть вам понадобится таблица с именем GEOMETRY_COLUMNS и т. Д., Поэтому вашему коллеге, вероятно, потребуется изменить базу данных.

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

MerseyViking
источник
@ MV- Это хорошая информация. Я не знал, что вы можете добавить табличные данные с помощью опции «Добавить векторный слой». Вы правы, хотя, поскольку он не включен пространственно, вам все равно придется каким-то образом экспортировать в пространственный формат. И вы правы, пользователь не собирается переключаться на пространственно включенные БД, потому что они не являются ни ГИС, ни базой данных. У них достаточно тренировок на Access, чтобы быть опасными ...
RyanKDalton
7

С новыми инструментами «Обработка», доступными в QGIS 2, это становится немного проще. Хотя я до сих пор не нашел способ «живого связывания» данных (чтобы при изменении значений в таблице MS Access точка перемещалась автоматически), этот метод, похоже, работает довольно хорошо.

В разделе «Комментарии» этой страницы (и, конечно, @underdark для блога) мы говорим «Кристине» и «Бернду» о том, как создать соединение ODBC с вашей базой данных MS Access:

Создайте соединение ODBC:

Для Win7, 32 бит: перейдите в панель управления / инструменты администрирования / источники данных (ODBC)

Для Win7, 64-битный: вместо использования по умолчанию «панели управления / административные инструменты / источники данных (ODBC)» - в 64-битных версиях вы должны использовать C: \ Windows \ SysWOW64 \ odbcad32.exe!

  1. Нажмите на вкладку DSN пользователя, а затем «добавить»
  2. Прокрутите вниз до Microsoft Access Driver (* mdb) и нажмите «Готово»
  3. Дайте соединению имя, затем выберите «выбрать», чтобы перейти к местоположению базы данных, затем нажмите «ОК», чтобы выйти из диалога и снова, чтобы закрыть окно DSN.

Загрузите слой в QGIS:

  1. Перейти, чтобы добавить векторный слой и выберите опцию базы данных.
  2. Убедитесь, что в поле «Тип» базы данных указано «ODBC», и нажмите «Новый».
  3. В поле имени введите имя для подключения
  4. Хост localhost
  5. Имя базы данных - это имя DSN, созданного на шаге 4
  6. Все остальные поля должны быть пустыми, но вы можете поставить галочку напротив «сохранить пароль».
  7. Проверьте соединение и запишите все ошибки. В случае успеха нажмите «ОК», чтобы вернуться в диалог «Добавить векторный слой».
  8. Нажмите «Открыть», чтобы открыть это соединение, и, если запрашивается пароль, нажмите «ОК». Выберите свой слой (таблицу из базы данных), учитывая, что он может не иметь никакой геометрии.

Преобразовать данные XY в баллы:

  1. С таблицей в оглавлении перейдите в «Обработка» -> «Инструменты» -> «Геоалгоритмы» -> «Вектор» -> «Создание» -> «Слой точек из таблицы».
  2. Заполните форму, как показано ниже:

Слой точек из таблицы

RyanKDalton
источник
Если у вас есть проблемы с этим подходом, проверьте QGIS 2.4 доступ. Ошибка добавления
MDB
Большое спасибо за помощь по подключению ms доступа к QGIS. Я использую трехбуквенные коды стран в качестве слоя объединения, и он работал очень хорошо
Если бы у меня была таблица с линией или многоугольником, как я мог тогда сгенерировать карту?
MichaelR
5

Хотя мне все еще интересно узнать, есть ли другие доступные варианты, я наткнулся на сообщение, в котором упоминалось, что это возможно с помощью плагина eVis .

В разделе «Подключение к базе данных» описывается, как подключиться к подключению MS Access или ODBC для создания местоположений точек XY из базы данных без создания статического снимка. Я просто набрал «select * from», и eVis открыло диалоговое окно, которое запрашивает имя слоя и поля XY.

К сожалению, похоже, что это не создает «живое» соединение с базой данных MS Access, потому что при следующем открытии проекта QGIS сбит с толку («невозможно открыть один или несколько слоев проекта»). Однако решение этой проблемы заключается в создании предопределенного XML-запроса, который может выбрать пользователь.

Так что, хотя это и не идеальное решение, это на один шаг лучше, чем экспорт в CSV. Я думаю, что в будущем было бы здорово увидеть расширение плагина с разделителями для поддержки ODBC-соединений.

RyanKDalton
источник
Ах! Это действительно полезно знать. Он включает в себя несколько обручей, но, по крайней мере, он должен быть одноразовым. Будет ли он перезагрузить данные, если вы измените представление в QGIS? Или он просто кеширует, пока вы не перезапустите запрос вручную?
MerseyViking
@ MV - Из того, что я могу сказать из экспериментов, кажется, что eVis создает кэшированный слой в QGIS. Например, после того, как я загрузил слой с помощью eVis, я удалил одну из записей из БД Access, обновил экран QGIS, и точка «удаления» сохранилась. Но когда я создал новый кэшированный слой, удаленная точка не отображалась (как и ожидалось). Панорамирование и масштабирование не влияли на отображение кэшированного слоя.
RyanKDalton
4

альтернативный подход - перенести данные в postgis. Вы можете прочитать csv-файл напрямую с помощью команды копирования postgresql. тогда вы можете создавать точки из полей XY.

затем, если вы хотите использовать некоторые отчеты или другие функции в доступе, вы можете подключиться к postgis из доступа.

выгода будет состоять в том, что вы помещаете пространственные данные, где они принадлежат, в пространственную базу данных, а затем используете odbc обратно для доступа к обработке непространственных данных, если вы по какой-то причине все еще хотите видеть свои данные в доступе.

Для postgis / postgresql есть отличные учебные пособия для доступа к соединению на postgresonline.com. руководства по импорту в postgis / postgresql вы можете найти у тех же авторов на bostongis.org

/ Никлас

Никлас Авен
источник
0

Существует несколько продуктов преобразования, которые могут преобразовывать данные ms-access в postgres или SQLite и обратно. Перемещение данных очень быстро с одной стороны на другую. Использование одного из этих приложений может дать вам возможность запустить QGIS на снимке данных.

AndrewM
источник
1
Не могли бы вы предложить такой инструмент?
Йенс,