在ArcGIS Desktop中,有一个名为从选定要素创建图层的工具。使用此工具,我可以将选区转换为ArcMap中的图层。
我的猜测是在图层的某个位置嵌入了“要素列表”,隔离了要在地图中显示的要素。
我本以为“功能列表”将where
作为的列表存储在定义查询的子句中objectids
。例如:where objectid in(123,456,789,...)
。然而,这种情况并非如此。
如果图层没有WHERE
子句或定义查询,那么如何存储要素列表?
在ArcGIS Desktop中,有一个名为从选定要素创建图层的工具。使用此工具,我可以将选区转换为ArcMap中的图层。
我的猜测是在图层的某个位置嵌入了“要素列表”,隔离了要在地图中显示的要素。
我本以为“功能列表”将where
作为的列表存储在定义查询的子句中objectids
。例如:where objectid in(123,456,789,...)
。然而,这种情况并非如此。
如果图层没有WHERE
子句或定义查询,那么如何存储要素列表?
Answers:
从选定要素创建图层不会创建动态图层。生成的层根本不是动态的。它基于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(';'))
FIDSet
。这是一个字符串,但很容易转换为列表: OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))
我了解Create Layer from Selected Features
这种参考的最佳方式是创建一个临时图层以选择要素
创建临时层使您可以进行选择等操作,而不会影响原始数据源。该层不会出现在ArcCatalog内容中,因为它是在内存中创建的,并且仅引用存储在磁盘上的数据。这些图层可用作工作会话中其他地理处理工具的输入。退出应用程序后,内存中的层将被删除。
“制作要素图层”工具位于“数据管理工具”工具箱中的“图层和表视图”工具集中。右键单击“制作要素图层”工具,然后单击“打开”,或双击它以打开该工具。
可以读取该磁盘空间的机制是如何访问“结果集”
另外,如前所述,Esri涵盖了使用所选功能,
在此示例中,从选定要素创建的图层仅用作临时工作数据集(例如,用作地理处理模型的输入)。新层将列出所选要素的FeatureID(FID)或ObjectID(OID),并且在更新或更改原始数据源时将无效。
另外,这里还有更多讨论作为一般阅读,与工作空间有关,使用内存中工作in_memory
空间。如果您有兴趣,这只是为了提供其他信息。