Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have around 1000 rasters (b&w tiffs) and most of them overlay each other. At this moment, I'm holding them in mosaic dataset and I want them to be displayed in my javascript webapp. I am able to load it as Dynamic or Image service layer and it loads all the rasters at once. In screenshot below, mosaic's attribute table has field "Name" in which names of all the rasters are held (all names are unique to only one raster). In my webapp, I want to dynamically show only one raster by specifying its name.

Part of mosaic:

In arcmap I can use layer's definition query to select only particular raster (screenshot below).

Filtered by definition query:

What would be the appropriate approach to have dataset filtered in webapp?

share|improve this question
up vote 0 down vote accepted

The best way is to publish your Mosaic Dataset as an Image Service and add it to your JavaScript API web map as an ArcGISImageServiceLayer.

If you look at the ArcGIS Server REST API, an Image Service has an operation called exportImage, which takes several parameters; among them is mosaicRule. mosaicRule is a set of options which includes a WHERE clause. This is supported in the ArcGIS JavaScript API by calling setMosaicRule, e.g. imageServiceLayer.setMosaicRule(mosaicRule), where imageServiceLayer is an instance of ArcGISImageServiceLayer and mosaicRule is an instance of the MosaicRule class.

So, if you want to select your image based on its name field, you would do something like this (as of JSAPI v3.5):

var mosaicRule = new esri.layers.MosaicRule({
    "method": esri.layers.MosaicRule.METHOD_CENTER,
    "ascending": true,
    "operation": esri.layers.MosaicRule.OPERATION_FIRST,
    "where": "name='" + rasterName + "'"

...where rasterName is the name of the individual raster you'd like to display. You'll want to do this each time you want to select a new raster (you may also have to refresh the layer manually; not sure).

share|improve this answer
Thank you a lot greenlaw! Since I'm using older API I had to use: var mr = new esri.layers.MosaicRule(); mr.method = esri.layers.MosaicRule.METHOD_CENTER; mr.ascending = true; mr.operation = esri.layers.MosaicRule.OPERATION_FIRST; mr.where = "NAME = '5270_r11976'"; – DTT Jun 27 '13 at 6:34

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.