Questions tagged «cursor»

数据库程序员使用游标来处理数据库系统查询返回的各个行。


2
与以前的版本相比,如何提高数据访问游标的性能?
数据访问模块是ArcGIS 10.1版引入的。ESRI对数据访问模块的描述如下(源): 数据访问模块arcpy.da是用于处理数据的Python模块。它允许控制编辑会话,编辑操作,改进的光标支持(包括更快的性能),用于在NumPy数组之间来回转换表和要素类的功能,以及对版本控制,副本,域和子类型工作流的支持。 但是,关于为何为什么游标性能比上一代游标如此提高的信息很少。 上图显示了在新da方法UpdateCursor与旧方法UpdateCursor 上进行基准测试的结果。本质上,脚本执行以下工作流程: 创建随机点(10、100、1000、10000、100000) 从正态分布中随机采样,然后使用光标将值添加到随机点属性表中的新列 针对新的和旧的UpdateCursor方法,对每个随机点方案运行5次迭代,并将平均值写入列表 绘制结果 使用da更新光标在幕后发生了什么,以将光标性能提高到图中所示的程度? import arcpy, os, numpy, time arcpy.env.overwriteOutput = True outws = r'C:\temp' fc = os.path.join(outws, 'randomPoints.shp') iterations = [10, 100, 1000, 10000, 100000] old = [] new = [] meanOld = [] meanNew = [] for x in iterations: arcpy.CreateRandomPoints_management(outws, …

5
使用ArcPy遍历1600万条记录?
我有一个包含8列和约1,670万条记录的表。我需要在列上运行一组if-else方程。我已经使用UpdateCursor模块编写了一个脚本,但是在记录了几百万条之后,它的内存不足。我想知道是否有更好的方法来处理这1670万条记录。 import arcpy arcpy.TableToTable_conversion("combine_2013", "D:/mosaic.gdb", "combo_table") c_table = "D:/mosaic.gdb/combo_table" fields = ['dev_agg', 'herb_agg','forest_agg','wat_agg', 'cate_2'] start_time = time.time() print "Script Started" with arcpy.da.UpdateCursor(c_table, fields) as cursor: for row in cursor: # row's 0,1,2,3,4 = dev, herb, forest, water, category #classficiation water = 1; herb = 2; dev = 3; forest = …

3
删除字典理解范围内SearchCursor中使用的光标?
如果最好使用with语句打开游标以确保将其删除,如下所示: with arcpy.da.UpdateCursor(fc,fields) as cursor: 然后,如果将游标用作像这样的理解中的可迭代对象: d = {k:v for (k,v) in arcpy.da.SearchCursor(fc,fields)} 在理解中使用光标后是否有必要删除它?
12 arcpy  cursor 

1
用Python修改属性表的最快方法?
不久前,我编写了一个快速的Python函数,用于将属性表转换为python字典,其中的键来自用户指定的唯一ID字段(通常是OID字段)。另外,默认情况下,所有字段都复制到字典中,但是我包含了一个参数,只允许指定一个子集。 def make_attribute_dict(fc, key_field, attr_list=['*']): dict = {} fc_field_objects = arcpy.ListFields(fc) fc_fields = [field.name for field in fc_field_objects if field.type != 'Geometry'] if attr_list == ['*']: valid_fields = fc_fields else: valid_fields = [field for field in attr_list if field in fc_fields] if key_field not in valid_fields: cursor_fields = valid_fields + …

4
ArcGIS Python SearchCursor文件锁定?
我有一个脚本,该脚本从shapefile的字段获取值以返回给用户。 似乎只有当arcpy.SearchCursor称为ArcMap 10.0时,该文件才会锁定,并且在脚本运行完成后不会将其删除。要解除锁定,我必须关闭ArcMap。在脚本中,我在使用SearchCursor对象以及行对象后将其删除。 我使用脚本的方式是它尝试在后续运行中删除工作空间文件夹,但是由于锁定而无法执行……直到我关闭ArcMap。 有什么建议可以让这个锁消失吗?

2
使用datetime.date.today()中的今天的日期计算Date字段?
我正在使用arcpy.CalculateField_management将当前日期添加到属性表的工具的一部分。我在互联网上徘徊了很多,似乎找不到解决此问题的方法。 使用此代码时,我得到的值是“ 12:00:00 AM” input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013' today = datetime.date.today() dte = today.strftime('%m/%d/%Y') arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON") 使用此代码时,我从今天的“ 10/07/2014”获取值“ 06/19/1905” input = r'C:\GIS\CARGIS\SHAPES.gdb\CRASH_ON_2013' today = datetime.date.today() dte = str(today) arcpy.CalculateField_management(input,"DTCARXTRCT",dte,"PYTHON") 对我在做什么错有任何想法吗?我想避免使用更新游标,但是如果这是最后一个选择,那么会这样做。

5
在带有大表的Python中使用ArcGIS游标时如何提高性能?
我在文件地理数据库中有一个很大的点要素类(〜4 000 000条记录)。这是具有100m分辨率的常规点网格。 我需要在这一层上进行某种概括。为此,我创建了一个新网格,其中每个点位于4个“旧”点的中间: * * * * o o o * * * * o o o * * * * [*] =原始网格点-[o] =新网格点 每个新点的属性值都是基于旧网格中其4个相邻点的加权值来计算的。因此,我在我的新网格的所有点上循环,并针对它们中的每一个,在我的旧网格的所有点上循环,以查找邻居(通过比较属性表中的X和Y的值)。一旦找到4个邻居,我们就会跳出循环。 这里没有方法上的复杂性,但是我的问题是,根据我的第一个测试,该脚本将持续数周才能完成... 您是否有提高效率的可能性?我脑海中浮现出一些想法: 索引字段X和Y =>我这样做了,但是没有注意到任何明显的性能变化 进行空间查询以查找邻居,而不是基于属性的查询。这真的有帮助吗?ArcGIS中应该执行哪些空间功能?我怀疑,例如,缓冲每个新点会更有效 将要素类转换为NumPy数组。有帮助吗?到目前为止,我与NumPy的合作并不多,除非有人告诉我这可能真的有助于减少处理时间,否则我不愿涉足其中 还要别的吗?

6
使用ArcPy或ModelBuilder移动/偏移点位置?
我有一些具有文本注释功能的非地理参考CAD图层(请参阅此问题)。我创建了一个模型,将文本转换为点,但是将注释转换为Point要素类后,我看到CAD文本锚点与CAD文本的中心(点所在的位置)不一致。 因此,我想以编程方式(使用ArcPy或ModelBuilder )使用将提供的X,Y值相对于其当前位置(delta x,y)[移动]特征。 这将使我可以将GIS点移回它们所属的位置,而不是移到偏移的CAD锚点。 如何完成这项任务? @PolyGeo 使用SHAPE @ XY IN 10.1 提供了一个很好的答案,但目前我正在运行10.0。有10.0个想法吗?

1
如何使用ArcPy删除选定的行?
我想删除要素类中的所有行,但保留第1至5行。另一方面,我想保留前五行并删除其他行。我知道我必须使用搜索光标和更新光标,但是我不能使用它们。如何使用ArcPy删除行?
10 arcpy  cursor 
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.