如何利用ArcGIS Python间隔选择属性表要素?


QQ截图20170320113130.jpg

我想如图所示,在属性表中选择两个要素,然后空一行,再选择两行要素,这样如何利用ArcGIS Python实现呢?本人ArcGIS Python小白,希望大神赐教,能够学习一下
已邀请:

turtle

赞同来自: 江宝骅

前提:根据截图来看,属性表是经过排序处理过,假设对字段A进行降序排列后的结果
思路:
1. 新建辅助字段用来存放排序后的序号(从1开始依次递增);
2. 根据题主要求计算该辅助字段,与3取余数计算;
3.选择余数不为0的即可
示例代码:
打开arcmap内置的python窗口,将下面的代码复制进去右键load脚本

Snap1.png
rows=arcpy.UpdateCursor("lyr",sort_fields="A D")
timer=0
for row in rows:
timer += 1
row.setValue("id",timer)
rows.updateRow(row)
del row
del rows

rows=arcpy.UpdateCursor("lyr")
for row in rows:
newValue=row.getValue("id")%3
row.setValue("id",newValue)
rows.updateRow(row)
del row

del rows


##内置python窗口中用来执行选择操作
arcpy.SelectLayerByAttribute_management("lyr","NEW_SELECTION",'"id"<>0')

print "ok!"
假设图层名称为lyr,排序方式为以字段A进行降序排序,根据需要修改
updateCursor方法中的排序方式可以参考
http://resources.arcgis.com/zh ... 0000/

天涯印象 - 90后

赞同来自:

Runtime error 
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "d:\program files (x86)\arcgis\desktop10.4\arcpy\arcpy\__init__.py", line 1218, in UpdateCursor
return gp.updateCursor(dataset, where_clause, spatial_reference, fields, sort_fields)
File "d:\program files (x86)\arcgis\desktop10.4\arcpy\arcpy\geoprocessing\_base.py", line 366, in updateCursor
self._gp.UpdateCursor(*gp_fixargs(args, True)))
RuntimeError: ERROR 999999: Error executing function.


@turtle您好,我这运行报错啊
rows=arcpy.UpdateCursor("lyr",sort_fields="A D")
这行语句A指的是A字段么? D是向下down的意思?

QQ图片20170322160806.png

我现在建了个lyr要素类,代码改了一下Id
import arcpy.da

rows=arcpy.UpdateCursor("lyr",sort_fields="A D")
timer=0
for row in rows:
timer += 1
row.setValue("Id",timer)
rows.updateRow(row)
del row
del rows

rows=arcpy.UpdateCursor("lyr")
for row in rows:
newValue=row.getValue("Id")%3
row.setValue("Id",newValue)
rows.updateRow(row)
del row

del rows


##内置python窗口中用来执行选择操作
arcpy.SelectLayerByAttribute_management("lyr","NEW_SELECTION",'"Id"<>0')

print "ok!"


在Python窗口中运行就报错
 
…………………………分割线…………………………分割线…………………………分割线…………………………
我想到了一个不用编程的办法,可以在Excel里面弄一个字段,填充112竖着,112112112112……然后挂接起来,按属性选择1,这样就能选两个隔一个了,不过我还是想知道如何用python实现啊
 
  
……………………分割线………………分割线………………分割线………………
import arcpy
rows=arcpy.UpdateCursor("ElePoint1959",sort_fields="OBJECTID D")
timer=0
for row in rows:
timer += 1
row.setValue("Id",timer)
rows.updateRow(row)
del row
del rows

rows=arcpy.UpdateCursor("ElePoint1959")
for row in rows:
newValue=row.getValue("Id")%9 #9的倍数
row.setValue("Id",newValue)
rows.updateRow(row)
del row

del rows
arcpy.SelectLayerByAttribute_management("ElePoint1959", "NEW_SELECTION","Id=0") #选择语句要加引号
print "ok" #执行完毕
这样写就能直接把Id=0的行xua选择出来了,每9行zh中选择一行,满足要求!好用!非常感谢@turtle的解答,根据他的指导修正改进了代码

要回复问题请先登录注册