我试图在QGIS中创建一个建筑物的shapefile的联接/关系,并且我想加入一个包含在每个建筑物中工作的人的非空间表(.csv -file)。因此,我的表中有多个记录,希望能够连接到shapefile中的单个功能。
我只能在QGIS中运行一个连接,其中第一个记录已连接到shapefile功能(即,构建),但随后的记录将被删除。
可以让我知道如何在QGIS中完成此联接/关系吗?

评论

我在这里有类似的问题gis.stackexchange.com/questions/5797/…建议使用RT SQL Layer插件和eVis插件。我使用了eVis插件,但这并不是理想的解决方案。

我有同样的问题,确实加入表工作。诀窍是将具有多个值的表连接到具有单个值的表(此处是从人到建筑物,而不是相反)。就我所知,问题是,通过这样做,您将无法然后将结果搜索并导出为地理参考文件,这是一个漏洞(至少对我而言)。有什么办法可以绕过这个问题?马克

您想要达到的最终结果是什么?即使您设法进行加入,也要在地图上显示它吗?做统计吗?依赖于此,可以遵循不同的工作流程,但是如果要进行联接,通常最好使用数据库。

#1 楼

我使用QGIS 1.7.0解决了此问题,方法是先将矢量层保存为逗号分隔值(CSV)表,并将几何字段转换为众所周知的文本。为此,“将矢量层另存为...”对话框的层字段必须读取GEOMETRY = AS_WKT,以使用名为WKT的列创建几何的众所周知的文本字段。

然后将CSV几何文件通过非几何属性表的属性联接选项卡下的一对多联接方式联接到非几何属性表。

生成的联接另存为另一个几何CSV文件。

在QGIS中打开此表时,每个属性记录均由其适当的矢量几何表示。

通过上述所有操作,我发现如果分隔符为逗号且WKT geometry字段名为WKT,则不需要使用Delimited Text插件来打开CSV几何文件。

有关如何完成此操作的详细信息,请参阅我的教程,网址为http://georgiawildlife.com/node/2849。

评论


好的方法,我只是使用ogr2​​ogr从Shapefiles创建CSV文件,所以做了类似的事情。然后是一个简单的R脚本,用于合并我想要的公共字段上的文件并写回CSV。然后再次使用ogr2​​ogr创建合并的shapefile。

–vpipkt
18年1月4日在13:31

这可能被评为最高,但是为此的过程由下面的@underdark回答。这是一个hack,并不是最好的选择,它速度慢且效率低下,导致文件更大,步骤更多。

–nittyjee
18年7月21日在5:02

#2 楼

在图层属性中创建的联接仅将列添加到现有要素。如果矢量图层仅具有160个要素,则联接不能增加要素的数量!

请改用虚拟层要素。它提供了真正的类似于SQL /数据库的联接。有关示例,请参阅我最近的文章:使用虚拟层的OD流图的小倍数



#3 楼

在QGIS 1.7中,有一个用于Joins的新引擎(可以在vector属性中找到它)。

现在可以像其他任何(vector)层一样将无几何表添加到项目中。

#4 楼

从2.2版开始,QGIS支持一对多关系。但是,请在“项目属性”中定义它们,而不是在“矢量层属性”中定义。然后相关记录将显示在图层的“属性表”中或通过表单标识结果。

在此处查看答案并链接到良好指南。

#5 楼

在LibreOffice Base中加入。

您无法克服试图处理一对多关系的事实。

对于非空间到非空间,值得学习。我发现最大的技巧是确保join属性字段具有完全相同的术语。

在QGIS中将空间定位数据作为一个图层打开,然后在QGIS中的属性表中选择所有记录(清除选择,反转选择),并将它们复制到LibreOffice Calc中的新表中。您会发现第一个字段是WKT,它是可在GIS中普遍使用的功能的描述。 Calc将为您提供一个对话框,以导入粘贴的表,选择制表符分隔的标签,确保不勾选逗号,因为它将咀嚼WKT字段。然后在Calc中突出显示该表,切换到Base,突出显示左侧的Tables图标并粘贴。 Base将通过一个对话框来导入表。可以通过联接保留WKT字段,当文件以.csv格式重新导入QGIS时,这些字段将用于重新定位功能。只记得投影。

这样,您将完全控制联接,并且可以“反向”执行。要在Base中进行联接,请确保唯一数据字段(1)是主键,然后如果您熟悉1对多或1对n概念,则将其指向“许多”。通过建立关系| TOOLS |来建立联接。正如我所提到的,当您发现联接字段具有相同的信息但使用不同的文本或语法表示它时,您可能想踢人。

hth

#6 楼

我认为这不可能将QGIS中具有1对多关系的表链接起来。或者,您可能要尝试使用gvSIG。在这里您可以建立1到许多链接。创建链接后,在地图中选择一个要素将突出显示链接表中的所有相关记录。

评论


由于引入了虚拟层,因此此答案不再正确。

– Underdark♦
17年5月20日在13:05