zoukankan      html  css  js  c++  java
  • ArcPy批量选择指定属性的要素

    在GIS数据处理中,选择数据是十分频繁的操作,常用的是"按属性选择"和"按位置选择",这两个功能虽然比较强大,但有时也不能满足实际需求。比如可能时常会遇到这样一种情景:将指定OID(假设3和6)的要素选择出来。

    1、按属性SQL选择

    最容易想到的是使用按属性选择构造WHERE子句("OBJECTID=3 OR OBJECTID=6")即可通过SQL选择出来。

    2、属性连接

    那么问题来了,如果给定的ID有100个,而且它们没有什么规律,构造SQL语句会不会手软呢?这也不难办,使用属性连接也可以选择出来。

    3、自定义选择工具

    有没有简便一点的、可重复使用的方式,不用连接、不用手动构造SQL子句,那就用代码自动来构造查询语句吧。

    很简单很实用的工具,代码如下:

    # -- coding:cp936 --
    # ---------------------------------------------------------------------------
    # Fun   : SelectFeatures
    # Author: gisweis
    # Date  : 2020.10.25
    # Email : 
    # Notes : 
    # ---------------------------------------------------------------------------
    
    import os
    import sys
    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    import  arcpy
    import  string
     
    try:
        #参数1:输入的图层或表
        table=arcpy.GetParameterAsText(0)
        #参数2:输入的字段名称
        field=arcpy.GetParameterAsText(1)
        #参数2:输入的编号文本
        txt=arcpy.GetParameterAsText(2)
    
        oid_fieldname = arcpy.Describe(table).OIDFieldName
        L=[]
        
        with open(txt, "r") as f:
            for line in f.readlines():
                line = line.strip('
    ')
                if len(line) >0:
                    L.append(' '+field+'=' + line + ' OR')
            L.append(' '+ oid_fieldname +'<0')
            where=''.join(L)
            arcpy.AddMessage(where)
            arcpy.SelectLayerByAttribute_management(table,"NEW_SELECTION",where)
    except arcpy.ExecuteError:
        arcpy.GetMessages()
    

     

  • 相关阅读:
    面向对象设计模式之Facade外观模式(结构型)
    Android 多线程:使用Thread和Handler
    Android源码分析之Handler
    Android View的几个位置坐标关系
    LinearLayout布局问题
    Android app被系统kill的场景
    改变Activity启动时的默认动画
    ViewStub源码分析
    Android measure过程分析
    点击ViewGroup时其子控件也变成pressed状态的原因分析及解决办法
  • 原文地址:https://www.cnblogs.com/liweis/p/13905715.html
Copyright © 2011-2022 走看看