#1 楼
我已经从上面的答案中测试了解决方案,并且在我的实际数据上,差异可以忽略不计。与其他答案的结果相反,我在ArcMap中使用arcpy.MakeTableView_management和arcpy.da.SearchCursor的时间相同。我已经测试了有无查询的变体,请查看查询版本的代码,以及最终的测量结果,如下:下方:
@staticmethod
def query_features(feature_class, query):
# Method 1
time.sleep(5) # Let the cpu/ram calm before proceeding!
start_time = time.clock()
count = len(list(i for i in arcpy.da.SearchCursor(feature_class, ["OBJECTID"], query)))
end_time = time.clock()
arcpy.AddMessage("Method 1 finished in {} seconds".format((end_time - start_time)))
arcpy.AddMessage("{} features".format(count))
# Method 2
time.sleep(5) # Let the cpu/ram calm before proceeding!
start_time = time.clock()
arcpy.MakeTableView_management(feature_class, "myTableView", query)
count = int(arcpy.GetCount_management("myTableView").getOutput(0))
end_time = time.clock()
arcpy.AddMessage("Method 2 in {} seconds".format((end_time - start_time)))
arcpy.AddMessage("{} features".format(count))
评论
好了,距离回答问题已有7年了,所以我希望他们对他们的SDK进行了改进!!! =)感谢您自己测试Miro。
– Michael Markieta
19 Mar 5 '19在3:31
#2 楼
我正在使用一个示例,该示例在filegeodatabase中包含一百万个随机生成的点。以下是一些使我们入门的代码:
import time
import arcpy
arcpy.env.workspace = "C:\CountTest.gdb"
time.sleep(5) # Let the cpu/ram calm before proceeding!
"""Method 1"""
StartTime = time.clock()
with arcpy.da.SearchCursor("RandomPoints", ["OBJECTID"]) as cursor:
rows = {row[0] for row in cursor}
count = 0
for row in rows:
count += 1
EndTime = time.clock()
print "Finished in %s seconds" % (EndTime - StartTime)
print "%s features" % count
time.sleep(5) # Let the cpu/ram calm before proceeding!
"""Method 2"""
StartTime2 = time.clock()
arcpy.MakeTableView_management("RandomPoints", "myTableView")
count = int(arcpy.GetCount_management("myTableView").getOutput(0))
EndTime2 = time.clock()
print "Finished in %s seconds" % (EndTime2 - StartTime2)
print "%s features" % count
和一些初步的结果: SearchCursor将无限期爬网。
我对结果并不满意,但是,DataAccess模块已在我们的GIS开发圈中广泛使用。我正在尝试使用此模块重建一些函数定义,因为它比MakeTableView + GetCount方法更灵活。
评论
不错的综述。为了完整起见,我想添加IMO应该最快的方法,但实际上是最慢的方法(慢10倍)。 arcpy.Statistics_analysis(“ RandomPoints”,r“ in_memory \ count”,[[“ OBJECTID”,“ COUNT”]])光标= arcpy.da.SearchCursor(r“ in_memory \ count”,[“ COUNT_OBJECTID”])row = cursor.next()del光标计数=行[0]
– Berend
2015年6月11日14:57在
评论
特征计数不仅仅是arcpy的属性有多愚蠢。描述对象使用带有某些OGR SQL的ogrinfo,这非常容易。数据集有大约170000条记录,并且在未索引的VARCHAR字段上进行的通配符搜索仅在几秒钟后返回。 ogrinfo“ C:\ xGIS \ Vector \ parcels \ parcels_20140829_pmerc.ovf -sql”从parcels_20140829_pmerc中选择计数(*),例如'R39200-02-%'的tms“”