ArcGIS Python脚本七之查询和选择数据

目录

一、构造正确的属性查询语句

二、创建要素图层和表视图

三、使用Select Layer by Attribute工具选择要素和行

四、使用Select Layer by Location工具选择要素

五、结合空间查询和属性查询选择要素


    从地理图层中选择要素或者从独立属性表中选择行是最常见的GIS操作之一。

    可以通过构造查询条件来选择要素,如属性查询空间查询

  • 属性查询    ——    使用SQL语句来选择要素或行
  • 空间查询    ——    根据要素之间的空间关系来选择要素

    此外,也可以同时使用属性查询空间查询
 

一、构造正确的属性查询语句

    ①需要注意完整的查询语句应该用单引号引起来:

qry = '"SVCAREA" = \'North\''

    ②"NULL"值与“0”是不一样的,"NULL"值表明数据为空,而“0”值表明数据的值为0

    ③SQL通配符:

  • 个人地理数据库中    ——    使用" * "字符代替多个字符,使用" ? "字符代替单个字符。
  • 除个人地理数据库以外    ——    使用" % "字符代替多个字符,使用" - "字符代替单个字符

二、创建要素图层和表视图

    在单独的Python脚本中调用”Select Layer by Attribute“或"Select Layer by Location”工具时,要求创建一个中间数据集,而不是直接使用要素类或表。

    这些中间数据集是临时性的,被称为要素图层表视图

    要素类不同,这些临时的数据集并不是磁盘上或地理数据库中实际的文件,而是要素类在内存中的表示

    它们只有在Python脚本中运行时才是有效的,在工具执行完成后就会从内存中移除。

   Make Feature Layer”工具用于生成要素类的内存副本,生成的临时要素图层(内存副本)可以用来构造查询、选择集和连接表等。

    “Make Table View”工具用于创建表的内存副本。

    除了通过Python脚本调用,也可以在工具箱中找到该工具:

    使用“Make Feature Layer"工具的语法如下所示:

    使用"Make Table View”工具的语法如下所示:

示例

import arcpy        # 导入arcpy站点包

arcpy.env.workspace = "C:\ArcpyBook\data\CityOfSanAntonio.gdb"    # 设置工作空间

try:
    flayer = arcpy.MakeFeatureLayer_management("Burglary", "Burglary_Layer")
except Exception as e:
    print(e.message)

示例

import arcpy        # 导入arcpy站点包

arcpy.env.workspace = "C:\ArcpyBook\data\CityOfSanAntonio.gdb"    # 设置工作空间
try:
    tView = arcpy.MakeTableView_management("Crime2009Table", "Crime2009TView")
except Exception as e:
    print(e.message)

    “Make Feature Layer"和"Make Table View"工具分别创建了要素类的内存副本。

    当在Python脚本中调用"Select Layer by Attribute"和"Select Layer by Location"工具时,都需要将这些临时内存副本作为参数。

三、使用Select Layer by Attribute工具选择要素和行

    "Select Layer by Attribute"工具需要使用要素图层或表视图和选择类型等参数来选择记录。

    默认情况下,选择类型是"NEW SELECTION",即创建新选择集。此外还有一些其他的选择类型:

    示例

import arcpy  # 导入arcpy站点包

""" 将工作空间设置为CityOfSanAntonio地理数据库 """
arcpy.env.workspace = "C:\ArcpyBook\data\CityOfSanAntonio.gdb"

try:
    qry = '"SVCAREA" = \'North\''
    flayer = arcpy.MakeFeatureLayer_management("Burglary", "Burglary_Layer") # 创建Burglary要素类的内存副本
    """ 调用“Select Layer by Attribute”工具,传入刚创建的要素图层、选择类型和查询语句等3个参数 """
    arcpy.SelectLayerByAttribute_management(flayer, "NEW_SELECTION", qry)
    """ 使用"Get Count"工具获取图层中选择记录的总数并将其输出。"""
    cnt = arcpy.GetCount_management(flayer)
    print("The number of selected records is: " + str(cnt))

except Exception as e:
    """ 添加except语句和输出错误信息的代码行 """ 
    print(e.message)

四、使用Select Layer by Location工具选择要素

    当使用"Select Layer by Location"工具选择要素时,可以指定不同的空间关系类型来获取满足条件的要素:

    在"Select Layer by Location"窗口中,只有输入要素图层这一个必选参数,其他都是可选参数,如空间关系搜索距离选择要素(用于选择输入要素图层中的要素)和选择类型等。

    示例:

import arcpy     # 导入arcpy站点包

arcpy.env.workspace = "C:\ArcpyBook\data\CityOfSanAntonio.gdb"  # 设置工作空间

try:
    """ 创建要素类的内存副本"""
    flayer = arcpy.MakeFeatureLayer_management("Burglary", "Burglary_Layer")

    """ 调用SelectLayerbyLocation工具"""
    arcpy.SelectLayerByLocation_management(flayer, "COMPLETELY_WITHIN", "C:\ArcpyBook\Ch7\EdgewoodSD.shp")
    
    """ 调用Get Count工具获取图层中选择记录的总数并将其输出"""
    cnt = arcpy.GetCount_management(flayer)
    print("The number of selected records is: " + str(cnt))
except Exception as e:
    """ 输出错误信息 """
    print(e.message)
    

    

    在上述示例中,没有定义可选的搜索距离选择类型参数。在默认情况下,选择类型是“NEW SELECTION"。而搜索距离没有默认值,需要用户来定义。

    现在指定一个搜索距离来说明它是如何工作的:

import arcpy     # 导入arcpy站点包

arcpy.env.workspace = "C:\ArcpyBook\data\CityOfSanAntonio.gdb"  # 设置工作空间

try:
    """ 创建要素类的内存副本"""
    flayer = arcpy.MakeFeatureLayer_management("Burglary", "Burglary_Layer")

    """ 调用SelectLayerbyLocation工具"""
    arcpy.SelectLayerByLocation_management(flayer, "WITHIN_A_DISTANCE", "C:\ArcpyBook\Ch7\EdgewoodSD.shp", "1 MILES")
    
    """ 调用Get Count工具获取图层中选择记录的总数并将其输出"""
    cnt = arcpy.GetCount_management(flayer)
    print("The number of selected records is: " + str(cnt))
except Exception as e:
    """ 输出错误信息 """
    print(e.message)
    

    另外,可以调用"Copy Features"工具将临时图层写入一个新的要素类中:

import arcpy     # 导入arcpy站点包

arcpy.env.workspace = "C:\ArcpyBook\data\CityOfSanAntonio.gdb"  # 设置工作空间

try:
    """ 创建要素类的内存副本"""
    flayer = arcpy.MakeFeatureLayer_management("Burglary", "Burglary_Layer")

    """ 调用SelectLayerbyLocation工具"""
    arcpy.SelectLayerByLocation_management(flayer, "WITHIN_A_DISTANCE", "C:\ArcpyBook\Ch7\EdgewoodSD.shp", "1 MILES")
    
    """ 调用Copy Features工具将临时图层写入到一个新的要素类中"""
    arcpy.CopyFeatures_management(flayer, "C:\ArcpyBook\Ch7\EdgewoodBurglaries.shp")
except Exception as e:
    """ 输出错误信息 """
    print(e.message)
    

五、结合空间查询和属性查询选择要素

    有些情况下,需要结合属性查询空间查询两种查询条件来选择要素。例如,要选择Edgewood学校星期一发生的所有盗窃案,就需要依次使用"Select Layer by Location"和"Select Layer by Attribute"工具并应用"SUBSET_SELECTION"选择类型。

    示例:

import arcpy    # 导入arcpy站点包

""" 设置工作空间 """
arcpy.env.workspace = "C:\ArcpyBook\data\CityofSanAntonio.gdb"

try:
    qry = '"DOW" = \'Mon\''

    """ 创建要素图层 """
    flayer = arcpy.MakeFeatureLayer_management("Burglary", "Burglary_Layer")

    """ 执行Select Layer by Location工具 """
    arcpy.SelectLayerByLocation_management(flayer, "COMPLETELY_WITHIN", "C:\ArcpyBook\Ch7\EdgewoodSD.shp")

    """ 执行Select Layer by Attribute工具, 查找与之前定义的qry查询变量相匹配的所有盗窃案,这是一个子集查询"""
    arcpy.SelectLayerByAttribute_management(flayer, "SUBSET_SELECTION", qry)

    """ 输出选择记录的总数 """ 
    cnt = arcpy.GetCount_management(flayer)
    print("The total number of selected records is: " + str(cnt))
except Exception as e:
    print(e.message)

    输出:

    结果:

猜你喜欢

转载自blog.csdn.net/qq_35732147/article/details/85095959
今日推荐