使用QGIS读取ODBC连接?[关闭]


16

我有一个同事,他管理着一个大型MS Access数据库,该数据库包含他跟踪的各个位置的X&Y字段。我们先前已将数据导出到CSV,并使用QGIS分隔文本插件来绘制位置。

现在,我们希望通过ODBC连接(而不是导出为CSV)连接到MS Access数据库,从而在QGIS中直接绘制此数据。

  1. QGIS可以使用ODBC连接中的数据来绘制XY位置吗?
  2. 是否可以将其“实时链接”到ODBC连接,以便在重新打开项目时,该层动态“重新绘制”所有旧的和新添加的位置(与导出到shapefile相对,后者会及时创建快照)?
  3. 是否可以创建可以连接到QGIS中空间表的表格式ODBC连接?

您可以在ArcGIS中完成所有这些操作(“添加XY数据”工具),因此,如果QGIS中存在此功能,那就太好了。我只是找不到任何提及它存在的地方。

我不打算迁移到空间数据库。我自己是GIS人士,是的,我知道转移到空间数据库是有意义的,是的,我使用PostGIS来管理此类数据。但是这些不是现在的选择。该用户既不是GIS人员,也不是想要成为的人,他在MS Access中管理自己的数据库,并且该数据库不会更改。我正在并且正在吸引他大声疾呼进入GIS世界,并希望尽可能简化这一过程。他可以接受导出为CSV的功能,我只是希望有一个更好的解决方案,即使用ODBC FOR MS ACCESS并在QGIS中显示XY数据。


据我所知,您不能像QGIS那样做。我同意在ODBC中等同于CSV导入会有一些用途,但是对于任何形式的性能,它都必须是导入而不是动态连接-就像CSV插件一样。因此,除非您自己支持/开发它,否则不会有任何吸收。
MerseyViking,

@ MV-我通常同意您的观点,并查看您的观点。但是,对于主要对简单地映射其数据而不分析数据感兴趣的非gis用户,QGIS的性能将不再是一个重要的问题。我可以想象与他们的数据建立动态的“始终在线”连接几乎可以肯定会超过性能问题(再次从非GIS用户的角度考虑)。
RyanKDalton 2011年

Answers:


7

警告:我还没有尝试过,所以我愿意向任何有直接经验的人鞠躬。

您可以在“添加矢量层”对话框中连接到ODBC数据源,只需选择“数据库”作为源类型,选择ODBC作为数据库类型。QGIS使用OGRODBC驱动程序,因此同样需要注意一些事项-也就是说,您将需要一个名为GEOMETRY_COLUMNS的表,依此类推,因此您的同事可能需要修改数据库。

从1.0版发布不久以来,我就没有使用过Access,但是由于它没有在空间上启用,因此您可能会发现性能是一个问题。大概您不会只是放弃Access并开始使用具有空间功能的数据库,因为这在经济上不太可行,但是如果您的同事感到有改变的欲望,我强烈建议您再做一遍强大。


@ MV-这是一个很好的信息。我没有意识到您可以通过“添加矢量层”选项添加表格数据。没错,但是,由于未启用空间功能,因此您仍然必须以某种方式导出为空间格式。没错,用户不会切换到启用空间的数据库,因为它们既不是GIS也不是数据库。他们刚刚进行过足够的访问培训,很危险……
RyanKDalton

7

借助QGIS 2中提供的新“处理”工具,这变得更加容易。虽然我仍然没有找到一种“实时链接”数据的方法(这样,如果您更改MS Access表中的值,该点会自动移动),但这种方法似乎效果很好。

此页面的注释部分中的“克里斯蒂娜”和“伯恩德” (以及博客的@underdark)将为您介绍如何创建与MS Access数据库的ODBC连接:

创建一个ODBC连接:

对于Win7(32位):转到控制面板/管理工具/数据源(ODBC)

对于Win7,为64位:对于64位版本,必须使用C:\ Windows \ SysWOW64 \ odbcad32.exe 而不是使用默认的“控制面板/管理工具/数据源(ODBC)”方式。

  1. 点击用户的DSN标签,然后“添加”
  2. 向下滚动到Microsoft Access Driver(* mdb),然后单击“完成”
  3. 给连接起一个名字,然后选择“选择”以浏览到数据库的位置,然后单击“确定”退出对话框并再次关闭dsn窗口。

将图层加载到QGIS中:

  1. 转到添加矢量层并选择数据库选项。
  2. 确保数据库的“类型”框显示“ ODBC”,然后单击“新建”
  3. 在名称框中,输入连接名称
  4. 主机是本地主机
  5. 数据库名称是您在步骤4中创建的dsn的名称。
  6. 其他所有框均应为空白,但您可以勾选“保存密码”框。
  7. 测试连接并记下任何错误。成功后,单击“确定”返回“添加矢量层”对话框
  8. 单击“打开”以打开此连接,如果要求输入密码,请单击“确定”。请记住您的图层(从数据库表中选择),请记住该图层可能没有任何几何形状。

将XY数据转换为点:

  1. 将表放在目录中,然后转到“处理”->“工具箱”->“地理算法”->“矢量”->“创建”->“表中的点图层”。
  2. 填写如下表格:

表中的点数层


如果您对此方法有疑问,请检查QGIS 2.4访问.mdb添加错误
RyanKDalton 2014年

非常感谢您将ms访问连接到QGIS的帮助。我使用国家/地区的三个字母代码作为连接层,并且工作得很好

如果我有一个包含“线”或“多边形”的表格,那么如何生成地图?
MichaelR

5

虽然我仍然想听听是否还有其他选项,但是我确实遇到了一条消息,其中提到可以使用eVis插件来实现

该文档在“ 数据库连接”部分中描述了如何连接到MS Access或ODBC连接以从数据库创建XY点位置,而无需创建静态快照。我只需键入“ select * from”,然后eVis弹出一个对话框,要求输入图层名称和XY字段。

不幸的是,这似乎并未创建与MS Access db的“实时链接”连接,因为下一次打开项目时,QGIS感到困惑(“无法打开一个或多个项目层”)。但是,解决方案是创建用户可以选择的预定义XML查询

因此,尽管这不是一个完美的解决方案,但比导出到CSV更好。将来,我认为将Delimited Text插件扩展为接受ODBC连接以达到此目的将是很棒的。


啊! 知道这真的很有用。它涉及一些麻烦,但至少应该是一次性的。如果您在QGIS中更改视图,是否会重新加载数据?还是只是缓存它,直到您手动重新运行查询?
MerseyViking

@ MV-通过实验可以看出,eVis似乎在QGIS中创建了一个缓存层。例如,在使用eVis加载图层后,我从Access DB中删除了一条记录,刷新了QGIS屏幕,并且“删除”点仍然存在。但是,当我创建一个新的缓存层时,未显示删除的点(按预期)。平移和缩放对缓存的图层显示没有影响。
RyanKDalton 2011年

4

另一种方法是将数据移至postgis。您可以使用postgresql copy-command直接读取csv文件。然后您可以从xy字段创建点。

然后,如果您想在访问中使用某些报告或其他功能,则可以通过访问权限连接到Postgis。

这样做的好处是,如果您出于某种原因仍希望查看正在访问的数据,则可以将空间数据所在的位置放到空间数据库中,然后使用odbc back来访问以处理非空间数据。

postgres / postgresql提供了很棒的教程来访问postgresonline.com中的连接。可以在bostongis.org上找到同一作者的关于对postgis / postgresql进行授权的教程

/尼克拉斯


0

有几种转换产品可以将ms-access数据转换为postgres或SQLite,然后再转换回。将数据从一侧快速移到另一侧。使用这些应用程序之一,可以让您选择在数据快照上运行QGIS。


1
你能推荐这样的工具吗?
詹斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.