精华内容
下载资源
问答
  • arcgis中字段计算器使用python-ArcGIS 字段计算器 Python 坑
    2020-11-11 14:51:32

    最近要处理个简单数据,一个字段中为文本类型,包含各种描述。要求是包含平方米的数值提取出来,变成数值,如果包含多个,则把各个值累加起来。

    比如 字段值为 “非法占用100平方米” 处理后结果为 100

    字段值为 “工棚3间” 处理结果为0

    字段值为 “工棚3间,瓦屋2间,非法占用100平方米” 处理结果100

    字段值为 “工棚100平方米,瓦屋100平方米” 处理结果为200

    由于一直写.net,上述功能在.net中做起来并不麻烦。但是觉得应该是字段计算器写写就解决的问题,懒得在用.net搭。就尝试了一下ArcGIS中的Python字段计算器

    四五年前学过一点python,虽然现在啥都不记得了

    搜索了一些arcgis字段计算器的资料,大体瞄了一眼代码,就开始写。amazing Python

    (1)python是用代码缩进表示C#中{}啊,字段计算器中的编辑页面就是个txt,啥功能也没有啊,自己一边写逻辑,一边改缩进。而且网上复制粘贴的代码,很容易缩进就乱掉了

    (2)python中,定义函数名之后有个 “:”, if条件之后也有个 “:”,而且ArcMap的字段计算器不能调试

    (3)神奇的 unicode decode error: "ascii" codesc can"t decode 0xe5 in position 异常,检索了半天资料,后来发现,是编码的问题。不知道什么原因,按错误描述,应该是ArcMap字段计算器读取的值是 ascii,而我要判断的值是 中文,就出了这个 错误,可我字段中的值明明是中文啊。该错误对新手很不友好啊

    虽然上述功能没有完全实现,也不想实现了,下面记录一下这段神奇的代码

    def fuxkPython(ss):

    flag="平方米"

    result=-1

    tp=ss.encode("utf-8");

    # tp =ss

    id=tp.find(flag)

    if(id>=0):

    jq=tp[0:id]

    if jq.isdigit():

    result= float(jq)

    return result

    amazing

    更多相关内容
  • ARCGIS字段计算器对字段重复内容自动编号的方法;L=[ ] def aaa(x): global L L.append(x) return(L.count(x)) aaa(!TBBH!) 确
  • Arcpy使用字段计算器进行赋值arcpy的字段计算器函数:示例数据简单的字段合并将函数作为条件表达式运行结果 arcpy的字段计算器函数: 字段计算器主要使用的是CaculateField_management() 这个函数,这里面有几个重要...

    arcpy的字段计算器函数:

    字段计算器主要使用的是CaculateField_management() 这个函数,这里面有几个重要的参数:

    1. 输入的表(in_table)
    2. 需要计算的字段名称(field)
    3. 计算表达式(expression)
    4. 字段计算器版本(个人常用python版本)
    5. 存放复杂表达式的代码块(code_block)

    上面的参数里,最重要的莫过于表达式了,表达式里可以我们自己定义,那么这里除了用简单的语句之外,还可以用输入一个函数作为表达式:

    def contact(field):
    	if field == u"澳门特别行政区" or field == u"香港特别行政区":
    		return "特别行政区"
    	else:
    		return "广东九市"
    

    示例数据

    当然,怎么在字段计算器里使用这个函数还是有讲究的,稍安勿躁,先来了解一下示例数据

    首先,打印一下数据的字段名称:

    Fields = arcpy.ListFields(data)
    print [field.name for field in Fields]
    --------------------------------------------------------------------------------------------
    [u'FID', u'Shape', u'OBJECTID', u'province', u'city', u'Shape_Leng', u'Shape_Area', u'test']
    

    简单的字段合并

    这里我就选择provincecity两个字段来进行简单的合并,用&符号来连接两个字段,并赋值为test字段,代码如下:

    #用AddField_management()函数给数据(data)添加test字段,类型为文本
    arcpy.AddField_management(data,'test','TEXT')
    
    #构建条件表达式
    expression = "'{}&{}'.format(!province!,!city!)"
    
    #字段合并
    arcpy.CalculateField_management(data,"test",expression,"PYTHON_9.3")
    

    这里需要注意的是:
    expression里面的format(!province!,!city!),感叹号包住的province和city表示的是字段名,切记不能写成format(“province”,“city”),这里的province和city表示字符串。
    至于CalculateField_management()里为什么没有codeblock参数,待会下面的例子就会揭晓。

    将函数作为条件表达式

    下面的需求就是将函数作为条件表达式输入,这里先来看看示例数据的属性表:

    for row in arcpy.SearchCursor(data):
        print row.getValue('province')
    

    在这里插入图片描述

    我们将澳门特别行政区和香港特别行政区归为特别行政区,其余的省份归为广东省九市(ps:这是份粤港澳大湾区的数据)。因此,轻松构建出分类赋值的函数之后,大体的代码如下:

    codeblock = '''
    def contact(field):
        if field == u"澳门特别行政区" or field == u"香港特别行政区":
        	return "特别行政区"
        else:
        	return "广东九市"
    '''
    expression = 'contact(!province!)'
    arcpy.CalculateField_management(data,"test",expression,"PYTHON_9.3",codeblock)
    

    这里可以看到我们的函数包含在codeblock的变量里,我的理解如下:

    1. 将在codeblock这个小板板上写好我们的函数
    2. 然后将板子交给CalculateField_management的总监
    3. 总监看完黑板没有问题之后就让expression的员工去执行,妥妥设计师的身份!美哉美哉~

    因此,在最后字段计算器里需要把codeblock的参数也加上去,否则expression就只知道你调用了一个函数,但函数里面是怎样的它并不知道,最后也没法运行

    这里有个特别需要注意的地方:
    (缩进!缩进!!缩进!!!)
    错误的写法:

    codeblock = """
        def contact(a):
            if a == u"香港特别行政区" or a == u"澳门特别行政区":
                return "特别行政区"
            else:
                return "广东九市"
            """
    expression = "contact(!city!)"
    arcpy.CalculateField_management(data,"test",expression,"PYTHON_9.3",codeblock)
    -------------------------------------------------------------------------------
    arcgisscripting.ExecuteError: 执行失败。参数无效。
    ERROR 000989: Python 语法错误: Parsing error IndentationError: unexpected indent (line 2)
    执行(CalculateField)失败。
    

    错误原因:在这个引号里,函数前面的缩进也会被传进expression里,并不只是传了函数,因此一开始没有注意到这点的我耗费了好几个小时,谨记谨记!!!!

    运行结果

    最后,用函数作为条件表达式的字段计算器,也是成功做出了我们想要的效果
    在这里插入图片描述

    完整代码:

    # -*- coding:utf-8 -*-
    import arcpy
    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    #设置目标数据
    data = r"D:\New Desktop\2019全国行政区划\县域粤港澳大湾区.shp"
    
    #添加一个test字段,设置为文本型
    arcpy.AddField_management(data,'test','TEXT')
    
    #打印一下数据的字段
    Fields = arcpy.ListFields(data)
    print [field.name for field in Fields]
    
    #使用字段计算器进行字段合并
    # expression = "'{} & {}'.format(!province!,!city!)"
    
    codeblock = '''
    def contact(field):
        if field == u"澳门特别行政区" or field == u"香港特别行政区":
    	return "特别行政区"
        else:
        	return "广东九市"
    '''
    #构建条件表达式
    expression = 'contact(!province!)'
    arcpy.CalculateField_management(data,"test",expression,"PYTHON_9.3",codeblock)
    
    #打印处理完的值
    for row in arcpy.SearchCursor(data):
        print row.getValue('test')
    
    展开全文
  • 今天通过举例用字段计算器(Field Calculator)中的函数对图斑进行整理,或许在实际中大家用的到。 ...
    今天通过举例用字段计算器(Field Calculator)中的函数对图斑进行整理,或许在实际中大家用的到。 问题描述 在某个表中把某个字段(如字段一)中具有相同值的记录标出来,并且按照从小到大的排序自动增加一个编号,存储在字段二中,实现如下的效果: FID 字段1 字段2 1 001 0011 2 001 0012 3 001 0013 4 002 0021 5 002 0022 6 002 0023 解决方法 在ArcGIS10中实现方法如下,字段2右键调出字段计算器,选择Python脚本,在代码块中写: UniqueDict = {} def isDuplicateIndex(inValue): UniqueDict.setdefault(inValue,0) UniqueDict[inValue] += 1 return str(inValue)+str(UniqueDict[inValue]) 1de98052d5d511f0db010d862da69f9d.png 在字段2=的语句下面写: isDuplicateIndex( !字段1! ) 即可实现问题中的要求,字段计算器是一个强大的为字段赋值的工具,支持Python和VBScript代码,并且可以在Model Builder中调用。该代码可以按照地类对图斑进行编号,或者按某个行政区的字段对图斑进行编号。 setdefault函数的用法及理解 dict.setdefault(key, default=None) 功能:如果键不存在于字典中,将会添加该键并将default的值设为该键的默认值,如果键存在于字典中,将读出该键原来对应的值,default的值不会覆盖原来已经存在的键的值。参数:key----要查找的键;default-----查找的键不存在时用于设置的默认值 有图有步骤,是不是还不错!文末下方,大家随手打个卡(点开即可关闭),码字不易,多多支持,为了能及时看到最新分享,大家可以在公众号右上角点击三个小黑点设为星标。
    展开全文
  • 问题:对DWLX中的名字设置英文考察:使用字段计算器为字段统一赋值,使用python中的多重选择语句图1 统一赋值效果图操作步骤:启用编辑;选择所需数据,右键选择“打开属性表”;在属性表中选择“添加字段”,设置...

    问题:对DWLX中的名字设置英文

    考察:使用字段计算器为字段统一赋值,使用python中的多重选择语句

    46f3d57ef4a6ead7b85f88eb275d3781.png
    图1 统一赋值效果图

    操作步骤:

    1. 启用编辑;
    2. 选择所需数据,右键选择“打开属性表”;
    3. 在属性表中选择“添加字段”,设置名字的英文字段;
    4. 在新增字段右键,选择“字段计算器”;选择语言Python,勾选“显示代码块”;

    34f1ce32c0eef07805fd5c9293c911bb.png
    图2 字段计算器

    5. 输入代码,如下图所示:

    0eaf771a99b20cfbae5e9ce0a1c08979.png
    图3 Python代码脚本截图

    完整代码如下图所示:

    def 

    6. 点击“确定”,计算完成后,点击“保存编辑内容”,最后“停止编辑”。

    总结

    1. Python是对代码缩进要求很严格的编程语言,统一采用4个空格作为缩进,若出现格式问题,首先检查代码正确性,然后保证缩进以4格为准即可。
    2. 字段等于窗口处,填入函数,即设置所需字段
    3. 理解代码含义与语句书写

    参考链接:

    ArcGIS字段计算器(Python篇) -- 群内问题汇总​blog.csdn.net
    1a1a23cc8e6167810980c7b5316bf464.png
    展开全文
  • 9.1 字段计算器综合(VB) 通过介绍VB在字段计算器中数值、字符串、日期、了解代码块的应用,让你深入学习字段计算器 9.2 字段计算器综合(python) 通过介绍python在字段计算器中数值、字符串、日期、几何(如求四...
  • Arcgis 字段计算器 python处理脚本格式

    千次阅读 2022-03-25 11:37:48
    ArcMap 10.2 属性表处理之 字段计算器python脚本。 代码块如下 #记录代码块 def Fun(filedName): if filedName==u'风景名胜': return u'Recreation' elif filedName==u'体育休闲服务': return u'Recreation' ...
  • ArcMap 字段计算器(Field Calculator)的使用总结发布时间:2018-06-25 17:31,浏览次数:1648, 标签:ArcMapFieldCalculator1.某一个字段写入 固定字符串----选择python,字符串 gxsj="2018-06-25" 点击确定。2.根据...
  • 假如我要取这个字段的前5位,首先要新建一个存放的字段。 注意:以下操作都是英文状态下的操作!!!!! 选择VB脚本,再选择字符串下的left(),然后把函数完整填写即可。left:表示从左边取5位。 如图所示,就是...
  • ARCGIS中字段计算器的使用说明

    千次阅读 2020-12-28 21:35:52
    例如 Left("arcgis",2)="ar" ,把[A]字段的前2个字符赋给[B] Len :返回字符串的长度,例如 Len("arcgis")=6 LTrim :去掉字符串左边的空格,例如 LTrim(" arcgis")="arcgis" Mid :取出字符串中间的内容,例如 Mid...
  • 接下来的文章是关于在ArcMap中的字段计算器中使用Python脚本;字段计算器中可以使用的脚本有两种,分别是Python和VB脚本;本文主要介绍的是Python脚本的使用。本文实现的功能主要是根据地类编码字段值,给地类名称...
  • 点击蓝字 关注我们ARCGIS操作技巧总结(一)一、新建数据图层字段首先我们打开Arcmap加载要新建属性字段的图层,打开属性表,点击添加字段,具体操作如下:视频演示如下:二、给属性字段批量赋值:我们在处理arcgis...
  • Arcgis字段计算器——python,属性值含中文时的条件映射 解决无法判断中文字符串相等的问题 预逻辑代码块:
  • 保留一位小数的函数如上图所示。 注意:所有操作都是英文状态下的。 使用len()函数获取字段长度。
  • arcmap字段计算器的使用

    千次阅读 2020-05-22 11:39:17
    选中图层,右键打开属性表,选择需要修改的字段,右键“字段计算器” 弹出“字段计算器”对话框,如下图,依次进行选择(strip()代表删除字段中的空格),点击确定。数据处理完毕后,可以看见选中数据的空格全部被...
  • 作为近年Esri支持得最好的脚本语言,Python能够在字段计算器中解决不少简单的属性问题(如编号、截位等)。ArcPy则是直接能够进行ArcGis二次开发。系统性文章目标太大,目前我会把之前问的字段计算器问题以及ArcPy问题...
  • arcmap字段计算器运行报错
  • 代码 def a(): number = arcgis.rand('Integer 0 25') return number 结果
  • ArcGIS字段计算器的高级应用,需要用户调用自己的函数。
  • 【序号】字段后面就是连接进来的excel表中的数据 接下来用字段计算器功能,选择需要赋值的字段,值等于excel表中的对应字段,所有值就赋进来了,每个字段都如此操作,即可完成所有字段的赋值 妙用2 根据一个图层...
  • ArcGIS字段计算器顺序编号

    千次阅读 2021-01-15 09:45:21
    ArcGIS字段计算器顺序编号 rec=0 def autoIncrement(): global rec pStart = 1 #编号的初始值 pInterval = 1 #编号的间隔值 if (rec == 0): rec = pStart else: rec = rec + pInterval return rec! ...
  • # -*- coding: utf-8 -*- z=0 def numbersize(a,b): global z if(a>b): z=a elif(a<b): z=b elif(a==b): z=a else: z=99 return z
  •   下图中,我想利用字段计算器把观测场海拔的数据赋给高程,于是我想着用字段计算器直接计算,但计算后发现只有一部分有值,而另外一部分值为null。 2、解决方法 step1 把数据导入mdb(Personal Geodatabase)...
  • 有时候,我们手中的数据是已经作好的矢量图层,但...不过那样笨了一点吧…好了,看看 如何用字段计算器进行操作吧..1.假设你现在手里有一个点状Shapefile,比如是城市数据.首先在ArcCatalog中增加一个X字段,double型...
  • 在ArcGIS中可以使用Python或VBScript来对属性表进行高级计算。 Python是ArcGIS推荐的脚本语言,例如如果要访问地理处理功能(包括...Python计算表达式字段包含在感叹号(!!)中。 在命名变量时,需要注意Python区分大小
  • 电脑现已成为我们工作、生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到ARCGIS字段计算器Python应用实例(一)的问题,如果我们遇到了ARCGIS字段计算器Python应用实例(...电脑现已成为我们工作、生活和...
  • arcgis 字段计算器技巧

    千次阅读 2020-02-21 15:12:28
    有时候将字段与表格匹配时,有的表格后面没有市啊,县啊什么的,所以要新建一个字段name2,然后右键字段计算器,选择如下就可以了
  • 有关ArcGIS 10.x中属性数据采集和字段计算器(Field Calculator)的文章,需要的读者可以参照: 《ArcGIS实验教程——实验四:数字化属性数据的采集》,文章中就属性数据采集的多种方式做了说明,其中就有字段...
  • 一、计算面积 ( 可以帮我们计算小班面积 )添加 AREA 字段,然后右键点击字段列,然后点击 CALCULATE VALUES; ---> 选择 ADVANCED --》把下面的代码输入,然后在最下面 = 处写 OUTPUT 点击 OK 就 OK 了。Dim ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,413
精华内容 6,165
关键字:

字段计算器