## 空间数据查询

### 实验内容

• 构造正确的属性查询语句；
• 创建要素图层和表视图；
• 使用Select Layer by Attribute选择要素；
• 使用Select Layer by Location选择要素；
• 结合空间查询和属性查询选择要素。

### 代码

#### 1 构造正确的属性查询语句

# SVCAREA = 'North'   # 匹配SVCAREA属性为North的点
# "SVCAREA" = 'North'
# SVCAREA LIKE 'N%'   # 匹配SVCAREA属性以N开头的点
# OBJECTID < 719 AND SVCAREA = 'North'    # 匹配OBJECTID<719并且SVCAREA='North'的点


#### 2 创建要素图层和表视图

# 要素图层
import arcpy
arcpy.env.workspace = r"E:\ArcPyStudy\Data\ArcpyBook\data\CityOfSanAntonio.gdb"
try:
flayer = arcpy.MakeFeatureLayer_management("Burglary","Burglary_Layer")
print("Create Done")
except:
print("Create Error")
# 表视图
import arcpy
arcpy.env.workspace = r"E:\ArcPyStudy\Data\ArcpyBook\data\CityOfSanAntonio.gdb"
try:
tView = arcpy.MakeTableView_management("Crime2009Table","Crime2009TView")
print("Create Done")
except:
print("Create Error")


#### 3 使用Select Layer by Attribute选择要素

import arcpy
arcpy.env.workspace = r"E:\ArcPyStudy\Data\ArcpyBook\data\CityOfSanAntonio.gdb"
try:
qry = '"SVCAREA" = \'North\''
flayer = arcpy.MakeFeatureLayer_management("Burglary","Burglary_Layer")
arcpy.SelectLayerByAttribute_management(flayer)
cnt = arcpy.GetCount_management(flayer)
print("The number of selected records is:" + str(cnt))
except:
print("Error")


#### 4 使用Select Layer by Location选择要素

import arcpy
arcpy.env.workspace = r"E:\ArcPyStudy\Data\ArcpyBook\data\CityOfSanAntonio.gdb"
try:
flayer = arcpy.MakeFeatureLayer_management("Burglary","Burglary_Layer")
arcpy.SelectLayerByLocation_management(flayer,"COMPLETELY_WITHIN",r"E:\ArcPyStudy\Data\ArcpyBook\Ch7\EdgewoodSD.shp")
cnt = arcpy.GetCount_management(flayer)
print("The number of selected records is:" + str(cnt))
except:
print("Error")


#### 5 结合空间查询和属性查询选择要素

import arcpy
arcpy.env.workspace = r"E:\ArcPyStudy\Data\ArcpyBook\data\CityOfSanAntonio.gdb"
try:
qry = '"DOW" = \'Mon\''
flayer = arcpy.MakeFeatureLayer_management("Burglary","Burglary_Layer")
arcpy.SelectLayerByLocation_management(flayer,"COMPLETELY_WITHIN",r"E:\ArcPyStudy\Data\ArcpyBook\Ch7\EdgewoodSD.shp")
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) 