Skip to main content

Stacking Profiles

Stacking profiles determine the order images are layered in the Maxar:Imagery layer. They consist of a stack of layers which are filled with imagery. Each layer in the stack has defined rules to filter images and how to order them. If a given rule does not fill all of the pixels, the next rule is tried until either the image is filled or the list of rules is exhausted.

Using stacking profiles

When making API requests, you can request a given stacking profile be used by adding the parameter profile to your WMS request.

profile=Most_Aesthetic_Color

Example WMS request
https://api.maxar.com/basemaps/v1/ogc/wms?service=wms&request=GetMap&version=1.3.0&bbox=-13640313.39894550852,4546650.010356360115,-13636538.06416588835,4550119.459330277517&crs=EPSG:3857&layers=Maxar:Imagery&height=1719&width=1580&format=image/vnd.jpeg-png&profile=Most_Aesthetic_All

Standard stacking profiles

These are the standard profiles available:

Most_Aesthetic_All

  • For all of the following layers, sort the images by least cloud cover and then most recent capture date.
  • For the first layer try to fill the bounds with Vivid Advanced 15 mosaic imagery.
  • Next fill any empty areas with Vivid Standard 30 mosaic imagery.
  • Next try with Daily Take imagery with low cloud cover (less than 10%).
  • Next try with any other imagery with low cloud cover (less than 10%).
  • Next try with any other Daily Take imagery.
  • Next fill any empty areas with any other imagery available.
  • Finally if any pixels are still empty, use Landsat imagery.
Details

Layer Rules

[
{
"custom_name": "VIVID_ADVANCED_15",
"filters": "productName='VIVID_ADVANCED_15'",
"enabled": true,
"order": 0
},
{
"custom_name": "VIVID_STANDARD_30",
"filters": "productName='VIVID_STANDARD_30'",
"enabled": true,
"order": 1
},
{
"custom_name": "DAILY_TAKE with cloud cover < 0.1",
"filters": "productName = 'DAILY_TAKE' AND cloudCover < 0.1",
"enabled": true,
"order": 2
},
{
"custom_name": "Non DAILY_TAKE with cloud cover < 0.1",
"filters": "NOT productName = 'DAILY_TAKE' AND cloudCover < 0.1",
"enabled": true,
"order": 3
},
{
"custom_name": "DAILY_TAKE with cloud cover > 0.1",
"filters": "productName = 'DAILY_TAKE' AND cloudCover >= 0.1",
"enabled": true,
"order": 4
},
{
"custom_name": "Non DAILY_TAKE with cloud cover > 0.1",
"filters": "NOT productName = 'DAILY_TAKE' AND cloudCover >= 0.1",
"enabled": true,
"order": 5
},
{
"custom_name": null,
"filters": "sensorCode='LANDSAT'",
"enabled": true,
"order": 6
}
]

Sort Order

ASC:cloudCover,DESC:acquisitionDate

Most_Aesthetic_Color

  • For all layers, sort the images by least cloud cover and then most recent capture date.
  • For all layers, only select color imagery.
  • First try to fill the bounds with any Maxar Daily Take images that have less than 10% cloud cover.
  • Next fill any empty areas with other color images that have less than 10% cloud cover.
  • Next try with any remaining Maxar Daily Take images that did not meet the first rule for cloud cover.
  • Next try with Vivid Advanced 15 mosaic imagery.
  • Next try with Vivid Standard 30 mosaic imagery.
  • Finally if any pixels are still empty, use Landsat imagery.
Details

Layer Rules

[
{
"custom_name": "RGB DAILY_TAKE with cloudCover < 0.1",
"filters": "productName = 'DAILY_TAKE' AND (productType = 'Pan Sharpened Natural Color' OR bandDescription IN ('Natural Color','Pan Sharpened Natural Color')) AND cloudCover < 0.1",
"enabled": true,
"order": 0
},
{
"custom_name": "Non DAILY_TAKE RBG",
"filters": "NOT productName = 'DAILY_TAKE' AND (productType = 'Pan Sharpened Natural Color' OR bandDescription IN ('Natural Color','Pan Sharpened Natural Color')) AND cloudCover < 0.1",
"enabled": true,
"order": 1
},
{
"custom_name": "DAILY_TAKE RBG with cloudCover >= 0.1",
"filters": "productName = 'DAILY_TAKE' AND (productType = 'Pan Sharpened Natural Color' OR bandDescription IN ('Natural Color','Pan Sharpened Natural Color')) AND cloudCover >= 0.1",
"enabled": true,
"order": 2
},
{
"custom_name": "VIVID_ADVANCED_15",
"filters": "productName='VIVID_ADVANCED_15'",
"enabled": true,
"order": 3
},
{
"custom_name": "VIVID_STANDARD_30",
"filters": "productName='VIVID_STANDARD_30'",
"enabled": true,
"order": 4
},
{
"custom_name": "Landsat to fill remaining gaps in mosaic coverage.",
"filters": "sensorCode='LANDSAT'",
"enabled": true,
"order": 5
}
]

Sort Order

ASC:cloudCover,DESC:acquisitionDate

Most_Recent

  • For all layers, sort the images by most recent capture date.
  • First try to fill the bounds with any non-mosaic images.
  • Finally use Landsat imagery.
Details

Layer Rules

[
{
"custom_name": "Non-mosaic",
"filters": "NOT rasterType = 'Mosaic Product'",
"enabled": true,
"order": 0
},
{
"custom_name": "Landsat to fill remaining gaps in mosaic coverage.",
"filters": "sensorCode='LANDSAT'",
"enabled": true,
"order": 1
}
]

Sort Order

DESC:acquisitionDate

Least_Cloud_Cover

  • For all layers, sort the images by lowest cloud cover and then most recent capture date.
  • First try to fill the bounds with any non-mosaic images.
  • Finally use Landsat imagery.
Details

Layer Rules

[
{
"custom_name": "Non-mosaic",
"filters": "NOT rasterType = 'Mosaic Product'",
"enabled": true,
"order": 0
},
{
"custom_name": "Landsat to fill remaining gaps in mosaic coverage.",
"filters": "sensorCode='LANDSAT'",
"enabled": true,
"order": 1
}
]

Sort Order

ASC:cloudCover,DESC:acquisitionDate

Only_Mosaics

  • For all layers, sort the mosaics by most recent creation date.
  • First try to fill the bounds with any custom mosaics.
  • Next try with Vivid Advanced 15 mosaics.
  • Next try with Vivid Standard 30 mosaics.
  • Finally use Landsat imagery.
Details

Layer Rules

[
{
"custom_name": null,
"filters": "rasterType='Mosaic Product' AND NOT productName IN ('VIVID_ADVANCED_15', 'VIVID_STANDARD_30')",
"enabled": true,
"order": 0
},
{
"custom_name": null,
"filters": "productName IN ('VIVID_ADVANCED_15')",
"enabled": true,
"order": 1
},
{
"custom_name": null,
"filters": "productName IN ('VIVID_STANDARD_30')",
"enabled": true,
"order": 2
},
{
"custom_name": null,
"filters": "sensorCode='LANDSAT'",
"enabled": true,
"order": 3
}
]

Sort Order

DESC:createdDate

If a profile is not specified in an API request, Most_Aesthetic_All is used.

Mixing stacking profiles and request parameters

Stacking profiles apply CQL filters and WMS sortby parameters to the request. If your request also includes these parameters, they are combined with the stacking profile parameters. CQL filters are appended with AND logic. User sortby fields are appended to the stacking profile fields, which means the stacking profile sorting has precedence. To sort on other fields requires not using a stacking profile.

If using custom CQL filters causes unexpected results, it is possible that you have created a query that can not return results. For example, combining a stacking profile that only returns color images with a custom CQL filter that only matches Worldview-1 panchromatic images would make for an impossible query.