由ArcMap属性字段自增引出字段计算器使用Python的技巧
1.前言
前些日子有人问我ArcMap中要让某个字段的值实现自增有什么方法?我首先想到像SQL Server中对于数值型字段可以设置自增。所以我打开ArcCatalog查看发现只提供默认值,没办法只能看一下字段计算器中是否有更好的方法。开始我的方法是在字段计算器中将要自增的值等于默认的OBJECTID值,但是问题又来啦,如果删除一个对象后OBJECTID值变乱,又不能实现自增。本人学习的主要语言是c#,对于字段计算器所支持的VB脚本和Python不了解,对于c#来说写一个for循环很容易实现自增。最后参照帮助文档找到了Python的实现方法,下面分享给大家。
2.帮助文档解析
打开计算字段示例文档找到(累加计算和顺序计算)
首先分析帮助文档提供的代码(注意:红色部分为注释)
Parser:
Python #程序语言
Expression:
autoIncrement() #表达式方法
Code Block: #下面这部分是具体实现,注意在放字段计算器时只需要下面这部分
rec=0
def autoIncrement(): #定义方法名
global rec
pStart = 1 #初始值, 可以调整
pInterval = 1 #自增间隔, 可以调整
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
下面是如何在字段计算器中使用
目的实现ghg的字段的自增
打开字段计算器进行设置如下
注意:Python 将强制要求缩进作为语法的一部分。请使用两个或四个空格来定义每个逻辑级别。将语句块的开头和结尾对齐并且保持一致。
查看结果实现自增
3.提升
其实使用Python十分的方便,如果没有Python要实现自增对于一个大项目来说很耗人力的。说到这里上面的那种方法中自定义函数没有输入参数,如果我们需要输入参数该怎么写呢。查看帮助文档有一个计算数值型字段的累加值的例子我们分析一下。
Parser:
Python
Expression:
accumulate(!FieldA!) #该函数需要输入字段做参数
Code Block: #下面这部分是具体实现,注意在放字段计算器时只需要下面这部分
total = 0
def accumulate(increment):
global total
if total:
total += increment
else:
total = increment
return total
目的实现OBJECTID累加值赋值给ghg的字段
注意:Python 计算表达式字段将使用惊叹号 (!!) 括起。
结果:
4.Python该怎么使用
对于有有编程经验的人来说入门简单的Python语法很容易,他和java,c#等语言基础语法很像,
例如控制流,if 语句 2. while语句 3. for 循环 for..in 4. break语句 5. continue语句 几乎主流语言都有。
在ArcMap中也可以使用其他Python的库,例如random函数,可以实现随机值。
例如:通过 numpy 站点包来计算 0.0 和 1.0 之间的随机浮点值。
Parser:
Python
Expression:
getRandomValue()
Code Block:
import numpy.random as R
def getRandomValue():
return R.random()
5.总结
语言是一种工具,你只要你精通一门语言,对于编程你会多一份自信。不管使用什么语言你都可以解决问题。使用编程的思想会大大的提高你的工作效率,所以朋友们你至少要学会一门语言,为了更好地工作。
参考资料:ArcGIS10.2 帮助库
由ArcMap属性字段自增引出字段计算器使用Python的技巧的更多相关文章
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- sql server sql查询数据库的表,字段,主键,自增,字段类型等信息
1.查询数据表的属性(名称.说明.是否主键.数据类型.是否自增) SELECT t1.name columnName,case when t4.id is null then 'false' else ...
- oracle 字段自增 两段代码搞定
(这几天做了个小小课程设计时用的是oracle数据库,第一次用,发现oracle和我们以前用的sql server .mysql是有如此多不同的地方,下面是遇到的问题之一和解决方法,和大家分享下) 用 ...
- SQL语句增删改字段、表、修改默认值
收集转载: 1.修改字段,默认值 .修改字段默认值 alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束 alter table 表名 ad ...
- Django静态文件配置-request方法-ORM简介-字段的增删改查
app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...
- 1.4.2 solr字段类型--(1.4.2.1)字段类型定义和字段类型属性
1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...
- 如何往有自增标识字段的表插入数据时,同时给自增标识字段插入值呢,在Inset Into语句前后加上SQL语句:SET IDENTITY_INSERT TableName ON和SET IDENTITY_INSERT TableName OFF
当要往有设置自增标识字段的表插入数据,并希望同时设置好自增字段的值时,可以在insert into 的SQL语句前后分别加上一句sql语句,SET IDENTITY_INSERT TableName ...
- mongo 让字段自增或自减
查询语句 db.getCollection("A表").update( { id: 1 }, { $inc: { pid: 1} } ) 作用:根据条件让A表中的pid字段自增1 ...
- mysql数据库单表只有一个主键自增id字段,ibatis实现id自增
mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid"> insert into user_id ...
随机推荐
- Hoops随便记的
段 包含图形的段·几何·属性:颜色,可见性,选择功能等等·子段:更低层的段段的名称·段可以进行命名·可以像文件系统一样表示路径:绝对路径.相对路径.通配符当前段(激活的段)·你可以在任何一个时间来处理 ...
- 基于lcov实现的增量代码UT覆盖率检查
背景介绍 配合CppUTest单元测试框架,lcov提供了一套比较完整的工程工具来对UT覆盖率进行度量.但对有些团队来说,历史负担太重,大量的遗留代码没有相应的UT.在这种情况下,对新增代码进行覆盖率 ...
- Code[VS] 1230 题解
1230 元素查找 题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过. 输入描述 Input Description 第一行两个整 ...
- placeholder js简单实现
window.onload = function() { var input = document.getElementById("input"); input.onblur = ...
- #研发解决方案#iDB-数据库自动化运维平台
郑昀 创建于2015/12/2 最后更新于2015/12/2 关键词:数据库,MySQL,自动化运维,AutoDDL,刷库,帐号授权,审核,回滚 提纲: 数据库自动化运维什么?别人家是怎么玩的? 我们 ...
- 反射 Class类和Class实例
- [ios]利用alertView 插入数据都数据库。笔记
利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...
- [转]Android ListView 与 RecyclerView 对比浅析—缓存机制
从源码角度剖析ListView 与 RecyclerView 缓存机制的不同 https://zhuanlan.zhihu.com/p/23339185 原文地址:http://dev.qq.com/ ...
- php与js中函数参数的默认值设置
php函数参数默认值设置: <?phpfunction test($val=3){ echo $val."<br/>";}test(11);test();?& ...
- MVC自定义分页(附表跳转页Loading提示)
之前我发表了一篇MVC无刷新分页的文章,里面用的是MvcPager控件,但是那个受那个控件限制,传值只能用PagedList,各方面都受到了限制,自由度不够高,现在还是做MVC无刷新分页,但是想直接用 ...