I am trying to automate updates to a polyline hosted feature layer in AGOL using an API. I think I have the format of the json to update correct, however, I'm having trouble with the final step of pushing the updates to the existing hosted feature layer (line 39).
# Main function to fetch API, decode polylines, and publish to ArcGIS Online
def main():
# Make request to API
response = requests.get(api_url)
if response.status_code == 200:
# Assuming API response is JSON with 'features' containing polyline data
features = response.json()
# Extract features from the API data
#features = api_data.get('features', [])
#if not features:
# print("No features found in API response.")
# return
try:
# Truncate existing features in the feature layer
feature_layer.manager.truncate()
# Prepare new features to add
geojson_features = []
for feature in features:
encoded_polyline = feature.get('EncodedPolyline')
description = feature.get('Description')
if encoded_polyline and description:
# Decode polyline from 'EncodedPolyline' field
decoded_polyline = decode_polyline(encoded_polyline)
# Convert to GeoJSON Feature format
geojson_feature = to_geojson_feature(decoded_polyline, description)
geojson_features.append(geojson_feature)
# Add new GeoJSON features to the feature layer
print(json.dumps(geojson_features))
result = feature_layer.edit_features(adds=json.dumps(geojson_features))
print(f"Features updated successfully in ArcGIS Online hosted feature layer.")
except Exception as e:
print(f"Failed to update feature layer: {str(e)}")
else:
print("Failed to fetch data from API.")
This is what the print(json.dumps(geojson_features)) returns:
[{"type": "Feature", "geometry": {"type": "LineString", "coordinates": [[40.77248, -111.8377], [40.77254, -111.83776], [40.7728, -111.83804], [40.77248, -111.8377]]}, "properties": {"Description": "Blue Detour"}},
***I removed most of the coordinates for simplicity, and only included the first feature, the rest of the features have the same format
This is what is returned for the feature_layer.edit_features(adds=json.dumps(geojson_features)):
pass in features as list of Features, dicts or PropertyMap Parameters not valid for edit_features
@EarlMedina I replaced adds=temp_line with adds=[temp_line] and this is what I got (sorry for the atrocious highlighting). I also printed temp_line just to see what it looked like:
Any chance you're at the UC? Haha
Hey sorry,
We may be overcomplicating things here.
How about you add this import:
from arcgis.features import FeatureSet
and then try to parse your data with one of the below. I think you may be able to parse your original geojson with "from_geojson"
FeatureSet.from_dict() FeatureSet.from_geojson() FeatureSet.from_json()
Supply the result to the "adds" param.