FeatureSet 对象是要素类的轻量级表示。 FeatureSet 对象是特殊的数据元素,其中不仅包含方案(几何类型、字段和空间参考),还包含数据(包括几何)。 RecordSet 对象与之相似,但形式类似于表格。 在脚本工具中使用时,要素集和记录集可以用于以交互方式定义要素和记录。
注:
服务器工具使用要素集和记录集进行通信,这意味着在使用服务器工具时,必须使用这些对象创建数据或将数据加载到这些对象中。
FeatureSet 和 RecordSet 类具有两个相同的方法。
属性 | 说明 |
---|---|
load | 将要素类导入 FeatureSet 对象。 |
save | 导入到地理数据库要素类或 shapefile。 |
属性 | 说明 |
---|---|
load | 将表导入 RecordSet 对象。 |
save | 导出地理数据库表或 dBASE 文件。 |
创建和使用 FeatureSet 和 RecordSet 对象
FeatureSet 和 RecordSet 对象可以直接用于地理处理工具的输入。 可以根据需要和应用情景以多种方式创建对象;可以通过提供给类构造函数的参数或通过下方示例中描述的各种方法来创建。 load 方法可用于将不同的要素集或行加载到对象,而 save 方法可用于保留磁盘上的要素或行。 此外,类构造函数和类 load 方法接受多种数据源,如 FeatureSet 和 RecordSet 主题中所述。
创建空 FeatureSet 对象。
feature_set = arcpy.FeatureSet()
根据输入要素类创建 FeatureSet 对象。
feature_set = arcpy.FeatureSet("c:/base/roads.shp")
使用 SQL 表达式将一组要素加载到 FeatureSet 对象。
feature_set.load("c:/base/roads.shp", "CITY = 'Redlands'")
GetParameterValue
要使用工具输入的特定方案创建 FeatureSet 或 RecordSet 对象,请通过 GetParameterValue 函数使用合适的方案创建空 FeatureSet 或 RecordSet 对象。
import arcpy
# Add a custom server toolbox
arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal", "servertools")
# Get the default input from a tool
in_recordset = arcpy.GetParameterValue("bufferpoints", 0)
GetParameter
使用脚本工具时,可以使用 GetParameter 函数从工具中获取 FeatureSet 和 RecordSet 对象。
import arcpy
# Get the RecordSet from a script tool
in_recordset = arcpy.GetParameter(0)
结果类 getInput 和 getOutput 方法
使用服务器工具时,可以明确询问其输出。 当输出为 FeatureSet 或 RecordSet 对象时,Result 对象 getOutput 方法可用于在 FeatureSet 或 RecordSet 对象中返回工具输出。 此外,Result 对象的 getInput 方法可用于获取输入 FeatureSet 或 RecordSet 对象。
import time
import arcpy
# Add a toolbox from a server
arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal",
"servertools")
# Use GetParameterValue to get a featureset object with the default
# schema of the first parameter of the tool 'bufferpoints'
in_featureset = arcpy.GetParameterValue("bufferpoints", 0)
# Load a shapefile into the featureset
in_featureset.load("c:/base/roads.shp")
# Run a server tool named BufferPoints with featureset created above
result = arcpy.BufferPoints_servertools(in_featureset, "5 feet")
# Check the status of the result object every 0.2 seconds until it
# has a value of 4 (succeeded) or greater
while result.status < 4:
time.sleep(0.2)
# Get the output FeatureSet back from the server and save to a
# local geodatabase
out_featureset = result[0]
out_featureset.save("c:/temp/base.gdb/towers_buffer")
示例:使用光标和内存中的要素类将数据加载到数据集。
import arcpy
arcpy.env.overwriteOutput = True
arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal",
"servertools")
# List of coordinates
coordinates = [[-117.196717216, 34.046944853],
[-117.186226483, 34.046498438],
[-117.179530271, 34.038016569],
[-117.187454122, 34.039132605],
[-117.177744614, 34.056765964],
[-117.156205131, 34.064466609],
[-117.145491191, 34.068261129],
[-117.170825195, 34.073618099],
[-117.186784501, 34.068149525],
[-117.158325598, 34.03489167]]
# Create an in_memory feature class to initially contain the coordinate pairs
feature_class = arcpy.CreateFeatureclass_management(
"in_memory", "tempfc", "POINT")[0]
# Open an insert cursor
with arcpy.da.InsertCursor(feature_class, ["SHAPE@XY"]) as cursor:
# Iterate through list of coordinates and add to cursor
for (x, y) in coordinates:
cursor.insertRow([(x, y)])
# Create a FeatureSet object and load in_memory feature class
feature_set = arcpy.FeatureSet(feature_class)
results = arcpy.BufferPoints_servertools(feature_set)