FeatureSet
Summary
FeatureSet objects are a lightweight representation of a feature class. They are a data element that contains not only schema, but also the data. The FeatureSet object is also how feature data is sent and received from the server.
Discussion
Keep the following in mind when using the FeatureSet object:
Using the
FeatureSetobject as input to a tool or function that modifies the input, such as Calculate Field orUpdateCursor, will modify the original feature class.Loading a new feature class into a
FeatureSetobject will not overwrite the original feature class. Theloadmethod will only change the reference to the feature class, not the original feature class.
Syntax
FeatureSet({table_path}, {where_clause}, {time_filter}, {renderer}, {is_renderer}, {geojson_geometry_type})
| Name | Explanation | Data type |
|---|---|---|
|
table_path (Optional) |
The features to load into the The input can be a catalog path to a feature class, a URL to a hosted feature layer, a JSON with the syntax Esri JSON and GeoJSON are standards for encoding feature (geometry and attribute) data as a |
String |
|
where_clause (Optional) |
An SQL expression used to select a subset of records. For more information about SQL syntax, see SQL reference for query expressions used in ArcGIS. The default value is None. |
String |
|
time_filter (Optional) |
The time instant or the time extent to query. The time filter can only be applied to hosted feature layers, and the layer must be time enabled. Format a time instant as a string, for example, A null value specified for the start time or the end time will represent infinity for the start or the end time, respectively, for example, The default value is None. |
String |
|
renderer (Optional) |
The output Learn more about JSON renderers and JSON definition objects. The default value is None. |
String |
|
is_renderer (Optional) |
Specifies the type of the value used with the The default value is None. |
Boolean |
|
geojson_geometry_type (Optional) |
The geometry type of the GeoJSON file that will be loaded. A single GeoJSON file may contain multiple types of geometry records. Only the records of the specified geometry type will be loaded. By default, this is the geometry type of the first record. This option is only supported if the
Only the listed GeoJSON geometry types are supported. The default value is None. |
String |
Properties
| Name | Explanation | Data type |
|---|---|---|
|
JSON (Read only) |
Returns an Esri JSON representation of the geometry as a string. Tip:The returned string can be converted to a dictionary using the |
String |
|
GeoJSON (Read only) |
Returns a GeoJSON representation of the geometry as a string. Tip:The returned string can be converted to a dictionary using the |
String |
Methods
load({table_path}, {where_clause}, {time_filter}, {renderer}, {is_renderer}, {geojson_geometry_type})
Loads a table into the FeatureSet object.
| Name | Explanation | Data type |
|---|---|---|
|
table_path (Optional) |
The features to load into the The input can be a catalog path to a feature class, a URL to a hosted feature layer, a JSON with the syntax Esri JSON and GeoJSON are standards for encoding feature (geometry and attribute) data as a |
String |
|
where_clause (Optional) |
An SQL expression used to select a subset of records. For more information about SQL syntax, see SQL reference for query expressions used in ArcGIS. The default value is None. |
String |
|
time_filter (Optional) |
The time instant or the time extent to query. The time filter can only be applied to hosted feature layers, and the layer must be time enabled. Format a time instant as a string, for example, A null value specified for the start time or the end time will represent infinity for the start or the end time, respectively, for example, The default value is None. |
String |
|
renderer (Optional) |
The output Learn more about JSON renderers and JSON definition objects. The default value is None. |
String |
|
is_renderer (Optional) |
Specifies the type of the value used with the The default value is None. |
Boolean |
|
geojson_geometry_type (Optional) |
The geometry type of the GeoJSON file that will be loaded. A single GeoJSON file may contain multiple types of geometry records. Only the records of the specified geometry type will be loaded. By default, this is the geometry type of the first record. This option is only supported if the
Only the listed GeoJSON geometry types are supported. The default value is None. |
String |
save(table_path)
Exports to a table.
| Name | Explanation | Data type |
|---|---|---|
|
table_path |
The output table that will be created. |
String |
Code sample
Load data into a feature class and insert into a FeatureSet object.
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 memory feature class to initially contain the coordinate pairs
feature_class = arcpy.management.CreateFeatureclass(
"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.servertools.BufferPoints(feature_set)
Load a subset of data from ArcGIS Living Atlas of the World into a FeatureSet object and set the symbology.
import arcpy
# Set data
in_data = "https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/USA_States_Generalized/FeatureServer/0"
query = "STATE_NAME = 'California'"
renderer = '''{
"renderer": {
"type": "simple",
"symbol": {
"type": "esriSFS",
"style": "esriSFSSolid",
"color": [
255,
0,
0,
255
],
"outline": {
"type": "esriSLS",
"style": "esriSLSSolid",
"color": [
110,
110,
110,
255
],
"width": 2
}
},
"label": "",
"description": "",
"rotationType": "geographic",
"rotationExpression": ""
}
}'''
# Create FeatureSet with query and renderer
feature_set = arcpy.FeatureSet(in_data, query, renderer=renderer, is_renderer=True)
Create a FeatureSet object from an Esri JSON string.
import arcpy
# Set data
esri_json = '''{
"objectIdFieldName": "objectid",
"globalIdFieldName": "globalid",
"geometryType": "esriGeometryPoint",
"spatialReference": {
"wkid": 102100,
"latestWkid": 3857
},
"fields": [
{
"name": "objectid",
"alias": "OBJECTID",
"type": "esriFieldTypeOID"
},
{
"name": "requestid",
"alias": "Service Request ID",
"type": "esriFieldTypeString",
"length": 25
},
{
"name": "requesttype",
"alias": "Problem",
"type": "esriFieldTypeString",
"length": 100
},
{
"name": "comments",
"alias": "Comments",
"type": "esriFieldTypeString",
"length": 255
}
],
"features": [
{
"geometry": {
"x": -9809161.170230601,
"y": 5123045.5266209831
},
"attributes": {
"objectid": 246362,
"requestid": "1",
"requesttype": "Sidewalk Damage",
"comments": "Pothole"
}
},
{
"geometry": {
"x": -9074857.9234435894,
"y": 4982391.2604217697
},
"attributes": {
"objectid": 246382,
"requestid": "2",
"requesttype": "Pothole",
"comments": ""
}
}
]
}'''
# Create FeatureSet from Esri JSON
feature_set = arcpy.FeatureSet(data_json)
Create a FeatureSet object from a GeoJSON string.
import arcpy
geo_json = '''{
"crs": {
"properties": {
"name": "EPSG: 3857"
},
"type": "name"
},
"features": [
{
"geometry": {
"coordinates": [
-9809161.170230601,
5123045.526620984
],
"type": "Point"
},
"id": 246362,
"properties": {
"comments": "Pothole",
"objectid": 246362,
"requestid": "1",
"requesttype": "Sidewalk Damage"
},
"type": "Feature"
},
{
"geometry": {
"coordinates": [
-9074857.923443586,
4982391.260421775
],
"type": "Point"
},
"id": 246382,
"properties": {
"comments": "",
"objectid": 246382,
"requestid": "2",
"requesttype": "Pothole"
},
"type": "Feature"
}
],
"type": "FeatureCollection"
}'''
# Create FeatureSet from Geo JSON
feature_set = arcpy.FeatureSet(geo_json, geojson_geometry_type="POINT")
Create a FeatureSet object from a time-enabled hosted feature layer using the time_filter parameter.
import arcpy
url = {"url": "https://services.arcgis.com/O9GvsOYzrcFwdwqx/arcgis/rest/services/MyTimeEnabledLayer/FeatureServer/0"}
filter = "Country = 'United States'"
in_start, in_end = 1672473600000, 1718434800000
time_filter = f"{in_start}, {in_end}"
# Create FeatureSet using a time filter
feature_set = arcpy.FeatureSet(table_path=url, time_filter=time_filter)