通过“所选要素”工具创建图层:如何存储要素列表?


12

在ArcGIS Desktop中,有一个名为从选定要素创建图层的工具。使用此工具,我可以将选区转换为ArcMap中的图层。

我的猜测是在图层的某个位置嵌入了“要素列表”,隔离了要在地图中显示的要素。

我本以为“功能列表”将where作为的列表存储在定义查询的子句中objectids。例如:where objectid in(123,456,789,...)。然而,这种情况并非如此。

如果图层没有WHERE子句或定义查询,那么如何存储要素列表?


2
菜单项和地理处理工具之间存在很大差异。你说的是以前的话。您可以使用存储在fidset中的数据制作图层。
FelixIP

2
我很确定在创建选择层时不会存储WHERE子句,并且一旦创建了该层,就无法找到用于创建它的原始选择。我希望我能以答案的形式被证明是错误的,因为最近我正在处理一个非常老的选择层,并且找出用于创建它的功能的原始选择会很方便。
Dan C

1
Fidset是图层的属性。它是 ; 分隔的字符串,用于存储选择FID。
FelixIP

从选定要素创建图层不会创建动态图层。生成的层根本不是动态的。它基于FIDset。如果更改源数据,则FID将更改,并且选择层将中断。这与查询层不同,它存储一个where子句
jbalk

Answers:


14

从选定要素创建图层不会创建动态图层。生成的层根本不是动态的。它基于FIDset。

如果更改源数据,则FID将更改,并且选择层将中断。

选择层中没有where子句。它基于FIDset(使用“从所选要素创建图层”时选择的FID)。

请注意,如果您在源数据中添加或删除记录,则FID将更改,并且您的选择层将显示不正确的记录。

您正在将选择层与查询层混淆,查询层存储where子句并且是动态的。

编辑:选择图层的功能列表存储在内存中。不宜将选择层用于临时工作,这是不好的做法,因为一旦选择层中断,就无法恢复原始选择。

要在选择层中查找要素列表,可以使用许多不同的方法,包括SearchCursor来构建ID列表。

像这样:

OIDlist = []
with arcpy.da.SearchCursor(layer, 'OBJECTID') as scur:
    for row in scur:
        OIDlist.append(row[0])

来自crmackey的评论:

还有一种内置方法与describe一起获取FIDSet。这是一个字符串,但很容易转换为列表:

OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))

1
还有一个内置的describe方法来获取FIDSet。这是一个字符串,但很容易转换为列表: OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))
crmackey


11

我了解Create Layer from Selected Features这种参考的最佳方式是创建一个临时图层以选择要素

创建临时层使您可以进行选择等操作,而不会影响原始数据源。该层不会出现在ArcCatalog内容中,因为它是在内存中创建的,并且仅引用存储在磁盘上的数据。这些图层可用作工作会话中其他地理处理工具的输入。退出应用程序后,内存中的层将被删除。

“制作要素图层”工具位于“数据管理工具”工具箱中的“图层和表视图”工具集中。右键单击“制作要素图层”工具,然后单击“打开”,或双击它以打开该工具。

可以读取该磁盘空间的机制是如何访问“结果集”

另外,如前所述,Esri涵盖了使用所选功能

在此示例中,从选定要素创建的图层仅用作临时工作数据集(例如,用作地理处理模型的输入)。新层将列出所选要素的FeatureID(FID)或ObjectID(OID),并且在更新或更改原始数据源时将无效

另外,这里还有更多讨论作为一般阅读,与工作空间有关,使用内存中工作in_memory空间。如果您有兴趣,这只是为了提供其他信息。


2

我的猜测是,from的图层Create Layer From Selected Features不是基于WHERE子句或逻辑条件的,因为可以在不涉及逻辑的情况下创建选择集。

例如,您可以使用主菜单通过例如拖动框来手动添加/删除选择集中的任何功能,该框可能来自先前的“按属性/位置选择”之一。

我的猜测是,选择集(IFeatureSelection)只是一个广泛的结果集(包含原始层ID的副本),而不是定义结果集的规则。因此,链接文档中的警告是,如果原始层的ID更改,则ID可能变得无效。

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.