Retrieve Attachments From Features in a Vector
Learn how to access attachments from existing features and make use of the data within custom analytics.
1. Description
This article explains how to retrieve attachments from features in a vector, especially in order to use the attachments in custom analytics.
Examples of attachments that can be retrieved:
- Images (ex: .jpg) attached to a feature with the Infield Mobile App
- Images (ex: .jpg), files (ex: .pdf) attached to a feature directly in the platform in the interface
A feature here corresponds to a polygon, line, or point of a vector file. Example: one microplot of a microplots file.
2. Workflow
Step 1 - Connect to the SDK:
import alteia sdk = alteia.SDK(config_path=MY_CONFIG_PATH)
Step 2 - Initialize variables:
PROJECT_ID = 'MY_PROJECT_ID' PATH_TO_STORE_ATTACHMENTS = 'MY_PATH' VECTOR_NAME = 'NAME_OF_MY_VECTOR'
Find the collection of the features to retrieve attachments from features. The collection is linked to the map-service vector.
Step 3 - Search the vector map-service:
vector = sdk.datasets.search(
filter={
'project': {'$eq': PROJECT_ID},
'source.name': {'$eq': 'map-service'},
'name': {'$eq': VECTOR_NAME}
}
)[0] # return a list so take only the first elementStep 4 - Extract the collection ID and then the features IDs to iterate on them to extract attachments:
# Extract collection ID
collection_id = vector.components[0]['collection']['id']
# Describe collection to find features
collection = sdk.collections.describe(collection_id)
# Return a list of features ID
features = collection.features
# Iterate on features
for feat in features:
f = sdk.features.describe(feat)
if hasattr(f, 'attachments'): # Keep only features with attachments
attachments_ids = f.attachments # returns a list of attachments ID
for a in attachments_ids:
d = sdk.datasets.describe(a) # attachment is considered as a dataset
sdk.datasets.download_component(
d._id,
component=d.components[0]['name'],
target_path=PATH_TO_STORE_ATTACHMENTS,
target_name=d.components[0]['filename'],
overwrite=True) # false by default but the download fail if there is the same attachment name3. Results
Once retrieved, the attachments can be used by your code in custom analytics for example.