ArcPy是否具有用于几何的空间搜索功能?


10

我的问题:使用ArcPy我想遍历缓冲区并在每个缓冲区内选择geometry_features,然后仅对在该特定缓冲区内找到的对象进行某些操作(更新)。下面的代码解释了我想要做什么(或多或少):

def _update_connections_inside_buffers(self):
    buffers = arcpy.SearchCursor(self.__buffer_class_name)
    in_layer = "connections"
    for i_buffer in buffers:
        shape = i_buffer.shape
        # can not use a geometry to do a selection.. very inconvenient!!
        connections = arcpy.SelectLayerByLocation_management(in_layer, "WITHIN", shape) 
        self._update_connections(connections)

但是:这将不起作用,因为SelectLayerByLocation_management()不接受几何图形“ shape”作为参数,但需要一个feature_class_name(图层名称)。是否有一个arcpy方法可以使用空间谓词进行搜索。我从ESRI手册中找不到如何执行此操作。

Answers:


13

我相信可以这样做,因为我们在其中一门培训课程中使用了以下代码。如果它似乎不起作用,那么我怀疑您没有通过使用ArcMap的目录中的图层或通过ArcMap之外的MakeFeatureLayer定义图层对象。

或者,更可能是我认为是SelectLayerByLocation旁边的“ connections =”给您带来了问题,因为您将其设置为Result对象,并且在将其传递回之前未从中提取任何内容。

import arcpy
schoolsLayer = "Schools"
suburbsLayer = "Suburbs"
# get an update cursor as we will be changing values
rows = arcpy.UpdateCursor(suburbsLayer)
# loop through each suburb in the layer
for row in rows:
    polygon = row.SHAPE
    arcpy.SelectLayerByLocation_management(schoolsLayer,"INTERSECT",polygon)

2

据我所知,这只能通过使用带有arcpy的要素图层来完成。本质上,您将创建一个where子句,并使用OID(或其他唯一标识字段)对其进行更新,并遍历SelectLayerByLocation。

从PSU管理员的程序中查看本教程-如果我没有记错的话,它几乎涵盖了您所追求的一切。

无需引用几何;空间查询根据您定义的查询类型(即完全包含,共享边界等)使用几何。如果需要引用这些点的几何,一旦确定它们在缓冲区内,则将它们(OID)附加到python列表中,并使用where子句处理原始数据集。


我找到了解决问题的办法。我必须给一个feature_layer作为第一个参数,而不是引用class_layer的字符串。
user8175 2012年

1

我找到了解决问题的办法。我必须提供一个feature_layer作为第一个参数,而不是引用class_layer的字符串。”

    # Make a feature layer from the feature class
    class_layer = arcpy.env.workspace + "." + "connections"
    arcpy.MakeFeatureLayer_management(class_layer, "feature_layer")

    # Do selection using feature_layer 
    arcpy.SelectLayerByLocation_management("feature_layer", "WITHIN", p_polygon)

    # get result
    connections_found_in_polygon = arcpy.SearchCursor("feature_layer")
    self._update_connections(connections_found_in_polygon)

3
我很确定PolyGeo的答案涵盖了这一点。您应该注意要素类和要素层之间区别
blah238
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.