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 element
Step 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 name
3. Results
Once retrieved, the attachments can be used by your code in custom analytics for example.