基于arcpy包在arcmap里面实现图层的随机选取

最近在处理矢量数据的时候,偶然发现了一片新大陆—arcpy,这个包是真的好用,主要是你刚用完就可以在arcmap里面直接生成脚本,然后调用当前mxd文档的图层进行操作,不要太方便啊。相比与以前用的GDAL确实要人性化很多。
好了,不废话了,进入正题吧。下面的将会从头到尾介绍怎么编写脚本、将脚本和arcmap的工具绑定、以及设置参数的操作。
首先,编写脚本。这里得注意,arcmap支持的Python脚本支持支ANSI的编码格式(在代码里面找了一万次问题,TMD最后才发现是编码问题,心态雪崩),好了,直接上代码吧。(这里推荐两种编辑器,一种是记事本、还有一种是notepad++,保存的时候注意编码格式设置为ANSI就好)
下面提供两个版本的代码,供大家灵活选用。
版本1,直接设置好所有参数,通过arcmap调用

import arcpy, os, time
import random
from arcpy import env
# 设置图层操作环境,自己新建一个gdb就完事了
env.workspace = "D:\test\env_geodatabase.gdb"
inFeatures = "testPoint"
fieldName = "RD"
fieldPrecision = 9
fieldAlias = "random number"
#给输入的图层新建一个字段,具体参数的意义可以自己去网上查,这里不多说了
arcpy.AddField_management(inFeatures, fieldName, "DOUBLE", fieldPrecision, "", "",fieldAlias, "NULLABLE")
#定义游标,从第一行开始遍历,并为fileName字段赋值,随机范围[0,1]
cursor = arcpy.UpdateCursor(inFeatures)
for row in cursor:
    row.setValue(fieldName, random.random())
    cursor.updateRow(row)
#生成图层要素,并通过属性选择方法选取小于fildName<0.5的要素(理论上是随机挑选一半)
arcpy.MakeFeatureLayer_management(inFeatures, "lyr") 
arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", ' "RD" < 0.5 ')
# 将挑选出的要素输出(gdb数据库中)
arcpy.CopyFeatures_management("lyr", "RD_Train")

下一个版本,所有的参数都是通过工具栏的方式选择或者输入(没用过的可能不知道我在说啥,下面会附上详细的操作图),并且将输出的图层要素添加到当前mxd中。
代码如下。注释就不详细写了。

import arcpy, os, time
import random
from arcpy import env

print 'project start:' + str(time.ctime()) 
#获取图层要素、属性名、输出文件夹、输出文件名参数
inFeatures = arcpy.GetParameterAsText(0)
fieldName = arcpy.GetParameterAsText(1)
outworkspace = arcpy.GetParameterAsText(2)
outfilename = arcpy.GetParameterAsText(3)
#添加字段
arcpy.AddField_management(inFeatures, fieldName, "DOUBLE")
#为字段赋值
cursor = arcpy.UpdateCursor(inFeatures)
for row in cursor:
    row.setValue(fieldName, random.random())
    cursor.updateRow(row)
 #属性选择并输出  
arcpy.MakeFeatureLayer_management(inFeatures, "lyr") 
arcpy.SelectLayerByAttribute_management("lyr", "NEW_SELECTION", fieldName+' < 0.5' )
outPath = os.path.join(outworkspace, outfilename)
arcpy.CopyFeatures_management("lyr", outPath)
 #将输出文件导入当前工程文档中  
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0] #注意这里的Layers一定要和数据框的名字对应,在中文版的arcmap中,数据框的Name初始为‘图层’
addLayer = arcpy.mapping.Layer(outPath+'.shp')
arcpy.mapping.AddLayer(df,addLayer,"TOP")
print 'project end' + str(time.ctime()) 

好了,代码上完了,现在要开始操作了。第一步,(哈哈哈哈哈哈),当然是打开arcmap。
第二步,新建工具箱。在这里插入图片描述
第三步,添加脚本
在这里插入图片描述
第四步,设置参数
在这里插入图片描述
四个参数对应四个设置。字段属性需要设置为double
在这里插入图片描述

第五步,运行脚本。红色是随机挑选的结果。

在这里插入图片描述

在这里插入图片描述
红色是随机挑选的结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon_tttea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值