Export ArcGIS Online Feature Layer to Feature Class Without Attachments using the ArcGIS API for Python

Table of Contents

Introduction

Today’s blog post is inspired by a question posed on Esri Communities. The question asks how to export hosted feature layers using only the ArcGIS API for Python, and specifically states not to use ArcPy. The usual method to extract data from ArcGIS Online is to export an item (a feature service) to a file geodatabase, that sits as a file geodatabase content item in ArcGIS Online, and then export that file geodatabase item to disk. The problem with this workflow is that there are no options to omit attachments, so if attachments are enabled for a layer and present, then they are going to be extracted each time.

In the workflow below, we will use the ArcGIS API for Python to convert a feature layer to a a feature class in a file geodatabase. The only caveat here, is that the file geodatabase must already exists. 

We will use the GeoAccessor module available with the ArcGIS API for Python. The GeoAccessor module enables spatial capabilities on a pandas dataframe and we can create a GeoAccessor object from a hosted feature layer, and then use the spatial dataframe (sdf) returned and call the GeoAccessor to_featureclass() method to export the data without any attachments.

Unlock the full potential of ArcGIS Online by mastering the art of efficient Content Management with the ArcGIS API for Python. In this comprehensive course, you will embark on a journey to streamline your geospatial workflows, enhance data organization, and maximize the impact of your ArcGIS Online platform.

Geospatial Professionals, GIS Analysts, Data Managers, and enthusiasts will discover the power of automation and script-based operations to efficiently manage content in ArcGIS Online. Throughout this course, you will gain practical, hands-on experience in leveraging the ArcGIS API for Python to perform a wide range of content management tasks with ease.

The code

Check out the code below and follow the comments.

				
					from arcgis import GIS
from arcgis.features import GeoAccessor

## ouput gdb
out_gdb = r"C:\path\to\your\output.gdb"

## if these exist in the fields we will remove them from the sdf
## you can more in here based on experience
remove_cols = ["FID", "OBJECTID", "OID"]

## connect to AGOL
agol = GIS("home")

## grab a feature service item
item = agol.content.get("FS_ITEM_ID")

## access a layer - you can iterate through all
fl = item.layers[0]

## get the name of the layer, replace spaces with underscores because we all
## know the feature class naming rules
fl_name = fl.properties.name.replace(" ", "_")

## convert layer to spatial data frame
sdf = GeoAccessor.from_layer(fl)

## check if the columns to drop exists and get a list of those that exist
cols_to_drop = [col for col in remove_cols if col in sdf.columns]

## drop those columns
sdf = sdf.drop(columns=cols_to_drop)

## get rid of unwanted Shape_ fields
shape_cols = sdf.filter(like='Shape_').columns
sdf = sdf.drop(columns=shape_cols)

"""
See the to_feature_class() method for GeoAccessor for more info
https://developers.arcgis.com/python/api-reference/arcgis.features.toc.html#arcgis.features.GeoAccessor.to_featureclass
"""

## export to featureclass
sdf.spatial.to_featureclass(
    location = "{0}\\{1}".format(out_gdb, fl_name)
)
				
			

The workflow in action

Let’s see it in action. Below we have a feature layer containing the County Boundaries in Ireland. If you notice KILDARE has 3 attachments.

After running the script we can check the output in ArcGIS Pro. Our feature layer has been exported from ArcGIS Online to a feature class with no attachments.

Unlock the full potential of ArcGIS Online by mastering the art of efficient Content Management with the ArcGIS API for Python. In this comprehensive course, you will embark on a journey to streamline your geospatial workflows, enhance data organization, and maximize the impact of your ArcGIS Online platform.

Geospatial Professionals, GIS Analysts, Data Managers, and enthusiasts will discover the power of automation and script-based operations to efficiently manage content in ArcGIS Online. Throughout this course, you will gain practical, hands-on experience in leveraging the ArcGIS API for Python to perform a wide range of content management tasks with ease.

Leave a Comment

Your email address will not be published. Required fields are marked *