我试图在QGIS中创建一个建筑物的shapefile的联接/关系,为此,我想加入一个包含在每个建筑物中工作的人的非空间表(.csv)。因此,我在表中有多个记录,希望能够连接到shapefile中的单个功能。我只能在QGIS中运行一个联接,在该联接中,第一个记录被连接到shapefile功能(即建筑物),但随后的记录被删除。
有人可以让我知道如何在QGIS中完成此联接/关系吗?
我试图在QGIS中创建一个建筑物的shapefile的联接/关系,为此,我想加入一个包含在每个建筑物中工作的人的非空间表(.csv)。因此,我在表中有多个记录,希望能够连接到shapefile中的单个功能。我只能在QGIS中运行一个联接,在该联接中,第一个记录被连接到shapefile功能(即建筑物),但随后的记录被删除。
有人可以让我知道如何在QGIS中完成此联接/关系吗?
Answers:
我使用QGIS 1.7.0解决了此问题,方法是首先将矢量层保存为逗号分隔值(CSV)表,并将几何字段转换为众所周知的文本。为此,“将矢量层另存为...”对话框的层字段必须读取GEOMETRY = AS_WKT,以使用名为WKT的列创建几何的众所周知的文本字段。
然后,将CSV几何文件通过非几何属性表的属性联接选项卡下的一对多联接联接到非几何属性表。
生成的联接另存为另一个几何CSV文件。
在QGIS中打开此表时,每个属性记录均由其适当的矢量几何表示。
通过执行所有这些操作,我发现如果分隔符为逗号并且WKT geometry字段名为WKT,则不需要CSV几何文件即可使用Delimited Text插件。
有关如何完成此操作的详细信息,请参见http://georgiawildlife.com/node/2849上的我的教程。
ogr2ogr
从Shapefiles创建CSV文件做过类似的事情。然后是一个简单的R脚本,用于合并我想要的公共字段上的文件并写回CSV。然后ogr2ogr
再次创建合并的shapefile。
在图层属性中创建的联接仅将列添加到现有要素。如果矢量图层仅具有160个要素,则联接不能增加要素的数量!
请改用虚拟层功能。它提供了真正的类似于SQL /数据库的联接。有关示例,请参阅我最近的文章:使用虚拟层的OD流图的小倍数
从2.2版开始,QGIS支持一对多关系。但是,请在“项目属性”中定义它们,而不是在“矢量层属性”中定义。然后相关记录将出现在图层的“属性表”中或通过表单标识结果。
在此处查看答案并链接到好的指南。
在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