ImageServer Integration
Converting ArcGIS ImageServer services to STAC collections
ArcGIS ImageServer services provide access to raster datasets, satellite imagery, and multidimensional scientific data. This page covers ImageServer-specific configuration and examples.
Prerequisites: Before using ImageServer integration, complete the ArcGIS Server Integration setup including pyarc2stac installation and basic usage patterns.
ImageServer Specialization
ImageServer integration is specifically designed for:
- Multidimensional Data: Time series datasets with multiple variables and datacube extensions
- Scientific Rasters: Climate data with complex temporal dimensions
- Variable-Rich Datasets: Services with multiple data variables requiring individual render configurations
- Temporal Analysis: Datasets requiring sophisticated time series handling
Example: Soil Moisture ImageServer
This example demonstrates ImageServer integration using a NASA disasters test service with multidimensional soil moisture data:
# Soil moisture ImageServer with multidimensional data
image_server_url = "https://gis.earthdata.nasa.gov/UAT/rest/services/disasters_test/lis_vsm_percentile_10cm/ImageServer"
# ImageServer-specific inspection
collection = reader.generate_stac()
# Check datacube variables (ImageServer specialty)
if 'cube:variables' in collection.extra_fields:
variables = collection.extra_fields['cube:variables']
print(f"Variables: {list(variables.keys())}")
for var_name, var_info in variables.items():
print(f" {var_name}: {var_info.get('dimensions', [])}")
# Check temporal dimensions (key for ImageServer)
if 'cube:dimensions' in collection.extra_fields:
dimensions = collection.extra_fields['cube:dimensions']
time_dim = dimensions.get('StdTime', {})
print(f"Time step: {time_dim.get('step', 'Unknown')}")
print(f"Time extent: {time_dim.get('extent', 'Unknown')}")Configuration Structure
Complete Example Configuration
Based on the disasters test soil moisture ImageServer:
{
"type": "Collection",
"id": "disasters_test_lis_vsm_percentile_10cm",
"stac_version": "1.1.0",
"description": "Soil moisture percentile data for disaster monitoring",
"stac_extensions": [
"https://stac-extensions.github.io/render/v2.0.0/schema.json",
"https://stac-extensions.github.io/datacube/v2.2.0/schema.json"
],
"links": [
{
"rel": "wms",
"href": "https://gis.earthdata.nasa.gov/UAT/services/disasters_test/lis_vsm_percentile_10cm/ImageServer/WMSServer",
"type": "image/png",
"title": "Visualized through a WMS",
"wms:layers": [
"lis_vsm_percentile_10cm",
"VSM_Percentile_0_10cm"
],
"wms:styles": ["default"]
},
{
"rel": "via",
"href": "https://gis.earthdata.nasa.gov/UAT/rest/services/disasters_test/lis_vsm_percentile_10cm/ImageServer",
"type": "text/html",
"title": "Parent ArcGIS server url"
}
],
"renders": {
"lis_vsm_percentile_10cm": {
"layers": "lis_vsm_percentile_10cm"
},
"vsm_percentile_0_10cm": {
"layers": "VSM_Percentile_0_10cm"
}
},
"cube:variables": {
"lis_vsm_percentile_10cm": {
"type": "data",
"attrs": {
"Count": 27,
"Minimum": 45857,
"Maximum": 45886,
"Interval": 1,
"IntervalUnit": "Days",
"HasRegularIntervals": False,
"HasRanges": False
},
"dimensions": ["StdTime"]
},
"VSM_Percentile_0_10cm": {
"type": "data",
"attrs": {
"Count": 31,
"Minimum": 45857,
"Maximum": 45887,
"Interval": 1,
"IntervalUnit": "Days",
"HasRegularIntervals": True
},
"dimensions": ["StdTime"]
}
},
"cube:dimensions": {
"StdTime": {
"type": "temporal",
"step": "P1D",
"extent": ["2025-07-19T00:00:00Z", "2025-08-17T00:00:00Z"],
"values": [
"2025-07-19T00:00:00Z",
"2025-07-20T00:00:00Z",
"2025-07-21T00:00:00Z"
]
}
},
"dashboard:is_periodic": true,
"dashboard:time_density": "day",
"dashboard:time_interval": "P1D",
"extent": {
"spatial": {
"bbox": [[-124.94, 25.05, -67.07, 52.93]]
},
"temporal": {
"interval": [["2025-07-19T00:00:00Z", "2025-08-18T00:00:00Z"]]
}
},
"license": "not-applicable",
"item_assets": {}
}Key Configuration Elements
Datacube Extension
The datacube extension describes multidimensional data structure:
{
"cube:variables": {
"variable_name": {
"type": "data",
"attrs": {
"Count": 31,
"Minimum": 45857,
"Maximum": 45887,
"Interval": 1,
"IntervalUnit": "Days",
"HasRegularIntervals": true
},
"dimensions": ["StdTime"]
}
},
"cube:dimensions": {
"StdTime": {
"type": "temporal",
"step": "P1D",
"extent": ["2025-07-19T00:00:00Z", "2025-08-17T00:00:00Z"],
"values": ["2025-07-19T00:00:00Z", "2025-07-20T00:00:00Z"]
}
}
}Render Configuration
Defines how variables should be visualized:
{
"renders": {
"variable_name": {
"layers": "ArcGIS_Layer_Name"
}
}
}WMS Integration
Provides Web Map Service endpoints for visualization:
{
"links": [{
"rel": "wms",
"href": "https://server.com/WMSServer",
"type": "image/png",
"title": "Visualized through a WMS",
"wms:layers": ["layer1", "layer2"],
"wms:styles": ["default"]
}]
}ImageServer-Specific Best Practices
Multidimensional Data Handling
Variable Validation: Ensure all variables have proper dimensions
if 'cube:variables' in collection.extra_fields: variables = collection.extra_fields['cube:variables'] for var_name, var_info in variables.items(): if 'dimensions' not in var_info: print(f"⚠️ Variable {var_name} missing dimensions")Temporal Dimension Verification: Check time series configuration
if 'cube:dimensions' in collection.extra_fields: dimensions = collection.extra_fields['cube:dimensions'] if 'StdTime' in dimensions: time_info = dimensions['StdTime'] if 'step' not in time_info: print("⚠️ Missing temporal step information")
ImageServer-Specific Troubleshooting
Multidimensional Data Issues
Missing Variable Information
Warning: No variables found in multidimensional service
Solution: Check multidimensional configuration:
md_info = requests.get(f"{image_server_url}/multidimensionalInfo?f=pjson").json()
variables = md_info.get('multidimensionalInfo', {}).get('variables', [])
if not variables:
print("⚠️ Service may not be properly configured for multidimensional access")Datacube Extension Issues
Error: Unable to create datacube dimensions
Solution: Verify temporal dimension configuration and ensure service has time-enabled data.
ImageServer Resources
For general ArcGIS Server integration support, troubleshooting, and additional resources, see the ArcGIS Server Integration page.