要素类中的一对多联接到表


10

我正在使用具有高级许可证的ArcMap 10.2.2。我已经将ArcMap用于其他基本分析,但是对于该程序来说这是一个新手,仅具有基本的编码技能,除了使用ArcMap中的SQL代码生成器进行非常基本的查询外,没有SQL经验。

我有一个物种地理范围的多边形,并且有一张表格,列出了这些物种携带的病原体/疾病。某些物种携带多种病原体。在理想的世界中,我将范围的多边形连接到“物种+病原体”表中并保留多边形/空间数据,但是似乎没有GIS工具可以做到这一点(我将之后再计算重叠的病原体,因此每种物种-病原体组合都具有自己的特征,而不是具有多种病原体信息的特征很重要。这些是我的数据的样子(#1&#2,#3供以后使用):

空间特征的属性表:

空间特征的属性表

没有任何空间数据的表:

没有空间数据的表

(请注意,这些不是真实的数据,病原体-物种组合可能不是真实的。我实际上有115个多边形和519行表。物种携带1-40种病原体,因此物种在1-40行之间我的桌子)

另外,由于需要进行将来的分析,因此理想情况下,我希望能够进行此一对多联接,以便可以从表中保留额外的数据列(请参见下面的示例)看起来如何)。但是,这并不重要,因为如果我能弄清楚如何进行联接,就可以重做分析。

不含空间数据的表格,带有额外的字段

我找到了一些解决此问题的方法,但由于以下原因,它们对我不起作用:

解决方案1:David Aalbers的博客 -我对一个新手来说太过头了,无法弄清楚如何编辑较新的脚本并弄清楚如何将其导入ArcMap。我尝试了较旧的脚本,它只是生成了大量名为test,test_1,test_1_1,test_1_1_1等的空多边形。

解决方案2:一对多联接 -我尝试使用Make Query Table工具(尽管我使用表达式生成器,但我不具备SQL知识),但出现错误000383:表出现问题,找不到工作区&执行失败(MakeQueryTable)。我所有的文件都在同一个文件夹中,但是不在地理数据库中。


1
生成查询表仅适用于数据库
FelixIP 2016年

1
生成查询表需要在同一fgdb中的所有数据。
klewis

Answers:


22

要增加功能,请执行此操作(具有ArcGIS 10.1或更高版本的用户可用)。

  1. 将要素和表格放置在同一文件地理数据库中(必须将Shapefiles / Excel / DBF文件转换为地理数据库,此功能才能起作用)。
  2. 确保您的多边形有一个唯一的ID字段将被保留(您可以创建一个Long字段并在其中计算ObjectID,以使ObjectID值不会丢失)。
  3. 对匹配字段上的要素(空间数据)执行标准的表联接(属性,无空间数据)。请注意,要素(空间数据)的属性表将具有与以前相同数量的要素,但是不用担心,它们都将显示在下一步中。
  4. 将要素作为新要素类导出到相同的地理数据库中(右键单击目录中的图层,然后选择“导出”)。请注意,导出的要素的属性表中的要素数量现在具有正确的要素数量,与原始表相同(具有属性,没有空间数据),或者在进行多对多连接的情况下是完整的特征和相关记录的所有组合的特征集。

要素将在一个新的要素类中相乘,其中每个要素都将存在(即使表中没有匹配项),并且之前存在1:M匹配,要素将相乘以得出1:1。每个要素与其所有表条目的匹配项。您在步骤2中创建的唯一ID字段将使您可以将相乘的多边形与原始的单个多边形集相关联。使用新增的具有多个要素的要素类,您可以在表字段,摘要,空间连接等上进行选择。

如果要生成代表每个独特物种和疾病组合的唯一ID值,则可以使用此博客文章中描述的工具的10.2版本。有了这种类型的键,您就可以使用它来基于多字段关系对汇总表和统计信息进行标准联接,以代替使用“建立查询表”设置创建实际的多字段关系。

这是esri的一个很好的参考:https : //support.esri.com/en/technical-article/000001228


在导出到地理数据库中时完美工作!
MooseGirl '16

1
我已经修改了第4步,以声明导出应为与原始数据相同的地理数据库中的新要素类。尽管有可能允许对源数据和输出数据的存储位置进行一些更改,但遵循该步骤应始终有效。
理查德·费尔赫斯特

以前很清楚(尽管未来绝望的人们肯定会喜欢它的拼写),但是最初我没有正确连接到地理数据库文件夹(或其他东西),因为它不允许我导出到地理数据库。我重新启动,它工作正常。
MooseGirl '16

1
我补充说,加入的要素将没有正确数量的属性,而导出的要素将具有正确的数量。当我尝试此操作时,这让我非常沮丧,直到完成所有步骤。
nittyjee

它看起来像在#3中缺少“ not”,“ ...将not具有相同数量的功能...”
matt wilkie

-2

SQL查询:

SELECT spp, disease, type
FROM table1, table2
WHERE table1.bimonial = table2.spp;
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.