¿Leyendo la conexión ODBC usando QGIS? [cerrado]

16

Tengo un compañero de trabajo que administra una gran base de datos de MS Access que contiene campos X e Y para varios lugares que rastrea. Anteriormente exportamos los datos a CSV y utilizamos el complemento de texto delimitado QGIS para trazar las ubicaciones.

Ahora nos gustaría trazar estos datos directamente en QGIS conectándonos a la base de datos MS Access a través de una conexión ODBC (en lugar de exportar a CSV).

  1. ¿Puede QGIS consumir los datos de la conexión ODBC para trazar las ubicaciones XY?
  2. ¿Se puede "vincular en vivo" a la conexión ODBC para que cuando se vuelva a abrir un proyecto, la capa "responda" dinámicamente todas las ubicaciones antiguas y recién agregadas (en lugar de exportar a shapefile, lo que crearía una instantánea en el tiempo)?
  3. ¿Se pueden crear conexiones tabulares ODBC que se puedan unir a tablas espaciales dentro de QGIS?

Puede hacer todo esto en ArcGIS (herramienta "Agregar datos XY"), por lo que sería genial si esta capacidad existiera en QGIS. Simplemente no puedo encontrar ningún lugar que mencione su existencia.

No planeo pasar a una base de datos espacial. Como persona SIG, sí, sé que tiene sentido pasar a una base de datos espacial, y sí, he usado PostGIS para administrar este tipo de datos. Pero estas no son opciones en este momento. El usuario no es una persona SIG ni quiere serlo, y administra su propia base de datos en MS Access y eso no cambiará. Lo estoy y lo estoy empujando pateando y gritando al mundo SIG y quiero que sea lo más fácil posible. Puede vivir exportando a CSV, solo esperaba que hubiera una mejor solución USANDO ODBC PARA MS ACCESS y mostrando los datos XY en QGIS.

RyanKDalton
fuente
Entonces, que yo sepa, no puedes hacer lo que pides con QGIS. Estoy de acuerdo en que habría algún uso en un equivalente ODBC de importación CSV, pero para cualquier tipo de rendimiento tendría que ser una importación en lugar de una conexión dinámica, tal como lo es el complemento CSV. Por lo tanto, no es probable que haya ninguna aceptación a menos que la apoye / desarrolle usted mismo.
MerseyViking
@ MV: generalmente estoy de acuerdo contigo y veo tus puntos. Sin embargo, para los usuarios que no son SIG y que están interesados ​​principalmente en simplemente mapear sus datos y no analizarlos, el rendimiento de QGIS no sería un problema tan significativo. Me imagino que tener una conexión dinámica, "siempre en vivo" con sus datos, seguramente superará las preocupaciones de rendimiento (nuevamente pensando en esto desde una perspectiva de usuarios que no son SIG).
RyanKDalton
Excelente respuesta a una pregunta similar en QGIS 2.4 access .mdb add error
RyanKDalton

Respuestas:

7

Advertencia: no he intentado esto, así que estoy dispuesto a inclinarme ante cualquiera con experiencia directa.

Puede conectarse a una fuente de datos ODBC en el cuadro de diálogo "Agregar capa vectorial", simplemente seleccione "base de datos" como tipo de fuente y ODBC como tipo de base de datos. QGIS usa el controlador ODBC para OGR , por lo que se aplicarán las mismas advertencias: es decir, necesitará una tabla llamada GEOMETRY_COLUMNS y así sucesivamente, por lo que su colega probablemente deba modificar la base de datos.

No he usado Access desde poco después del lanzamiento de la versión 1.0, pero como no está habilitado espacialmente, probablemente encontrará que el rendimiento es un problema. Presumiblemente, no solo va a soltar Access y comenzar a usar una base de datos habilitada espacialmente, porque es poco probable que sea económicamente viable, pero si su compañero de trabajo alguna vez siente la necesidad de un cambio, le recomiendo encarecidamente que vaya a algo un poco más poderoso.

MerseyViking
fuente
@ MV- Esta es una buena información para tener. No me di cuenta de que podía agregar datos tabulares a través de la opción "agregar capa vectorial". Sin embargo, tiene razón, ya que no está habilitado espacialmente, todavía tendría que exportar de alguna manera a un formato espacial. Y tiene razón, el usuario no va a cambiar a una base de datos espacialmente habilitada porque no es un SIG ni una base de datos. Tienen suficiente formación Acceso a ser peligroso ...
RyanKDalton
7

Con las nuevas herramientas de "Procesamiento" disponibles en QGIS 2, esto se vuelve un poco más fácil. Si bien todavía no he encontrado una forma de "vincular en vivo" los datos (de modo que si cambia los valores en la tabla de MS Access, el punto se mueve automáticamente), este método parece funcionar bastante bien.

El crédito va a "Christina" y "Bernd" en la sección de comentarios de esta página (y, por supuesto, @underdark para el blog) sobre cómo crear la conexión ODBC a su base de datos MS Access:

Crear una conexión ODBC:

Para Win7, 32 bits: vaya al panel de control / herramientas administrativas / fuentes de datos (ODBC)

Para Win7, 64 bits: en lugar de usar el "panel de control / herramientas administrativas / fuentes de datos (ODBC)" predeterminadas, ¡con las versiones de 64 bits, debe usar C: \ Windows \ SysWOW64 \ odbcad32.exe!

  1. Haga clic en la pestaña DSN del usuario y luego 'agregar'
  2. Desplácese hacia abajo hasta Microsoft Access Driver (* mdb) y haga clic en 'finalizar'
  3. Asigne un nombre a la conexión, luego elija 'seleccionar' para buscar la ubicación de la base de datos, luego haga clic en 'ok' para salir del diálogo y nuevamente para cerrar la ventana dsn.

Cargue la capa en QGIS:

  1. Vaya a agregar capa vectorial y seleccione la opción de base de datos.
  2. Asegúrese de que el cuadro 'tipo' de la base de datos diga 'ODBC' y haga clic en 'nuevo'
  3. En el cuadro de nombre, escriba un nombre para la conexión
  4. El anfitrión es localhost
  5. El nombre de la base de datos es el nombre del dsn que creó en el paso 4
  6. Todos los demás cuadros deben estar en blanco, pero puede marcar el cuadro 'guardar contraseña'.
  7. Pruebe la conexión y tome nota de cualquier error. Cuando tenga éxito, haga clic en 'ok' para volver al diálogo 'agregar capa vectorial'
  8. Haga clic en 'abrir' para abrir esta conexión y, si se le solicita una contraseña, haga clic en 'ok'. Elija su capa (tabla de la base de datos), teniendo en cuenta que puede no tener ninguna geometría.

Convierta los datos XY a Puntos:

  1. Con la tabla en la tabla de contenido, vaya a "Procesamiento" -> Caja de herramientas -> Geoalgoritmos -> Vector -> Creación -> "Capa de puntos de la tabla".
  2. Complete el formulario como se ve a continuación:

Capa de puntos de la mesa

RyanKDalton
fuente
Si tiene problemas con este enfoque, consulte QGIS 2.4 access .mdb add error
RyanKDalton
Muchas gracias por la ayuda para conectar ms access a QGIS. Estoy usando códigos de tres letras del país como la capa de unión y funcionó muy bien
Si tuviera una tabla con Línea o Polígono, ¿cómo podría generar el mapa?
MichaelR
5

Si bien todavía estoy interesado en saber si hay otras opciones disponibles, me encontré con una publicación de mensaje que mencionaba que esto era posible usando el complemento eVis .

La documentación describe en la sección Conexión de la base de datos cómo puede conectarse a una conexión MS Access u ODBC para crear ubicaciones de puntos XY desde la base de datos, sin crear una instantánea estática. Simplemente escribí "seleccionar * de" y eVis apareció un cuadro de diálogo que pregunta por el nombre de la capa y los campos XY.

Desafortunadamente, esto no parece crear una conexión "vinculada en vivo" a la base de datos de MS Access porque la próxima vez que se abre el proyecto, QGIS está confundido ("no se puede abrir una o más capas de proyecto"). Sin embargo, la solución a esto es crear una consulta XML predefinida que el usuario pueda seleccionar.

Entonces, aunque no es una solución perfecta, este es un paso mejor que exportar a CSV. En el futuro, creo que sería genial ver el complemento de texto delimitado expandido para aceptar conexiones ODBC para este propósito.

RyanKDalton
fuente
Ah! Eso es realmente útil saberlo. Implica algunos aros, pero al menos debería ser una configuración única. ¿Volverá a cargar los datos si cambia la vista en QGIS? ¿O simplemente lo almacena en caché hasta que vuelva a ejecutar la consulta manualmente?
MerseyViking
@ MV: por lo que puedo decir a través de la experimentación, eVis parece crear una capa en caché en QGIS. Por ejemplo, después de cargar la capa con eVis, eliminé uno de los registros de Access DB, actualicé la pantalla QGIS y el punto "eliminado" persistió. Pero cuando creé una nueva capa en caché, el punto eliminado no se mostró (como se esperaba). La panorámica y el zoom no tuvieron efecto en la visualización de la capa en caché.
RyanKDalton
4

un enfoque alternativo sería mover los datos a postgis. puede leer el archivo csv directamente con el comando postgresql copy. entonces puede crear puntos desde los campos xy.

luego, si desea utilizar algunos informes u otra funcionalidad en el acceso, puede conectarse a postgis desde el acceso.

el beneficio sería que colocas los datos espaciales donde pertenecen, en una base de datos espacial y luego usas odbc back para acceder a manejar los datos no espaciales si por alguna razón aún quieres ver tus datos en acceso.

Hay excelentes tutoriales para postgis / postgresql para acceder a la conexión en postgresonline.com. tutoriales sobre impöorting a postgis / postgresql que puede encontrar por los mismos autores en bostongis.org

/ Nicklas

Nicklas Avén
fuente
0

Hay varios productos de conversión que pueden convertir datos de acceso de ms a postgres o SQLite y viceversa. Mueven los datos muy rápidamente de un lado a otro. El uso de una de estas aplicaciones puede darle la opción de ejecutar QGIS en una instantánea de los datos.

AndrewM
fuente
1
¿podrías sugerir una herramienta así?
Jens