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: http://i.imgur.com/RB2zl52.jpg
In arcmap I can use layer's definition query to select only particular raster (screenshot below).
Filtered by definition query: http://i.imgur.com/XDkFl8y.jpg
What would be the appropriate approach to have dataset filtered in webapp?
Best Answer
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)
, whereimageServiceLayer
is an instance ofArcGISImageServiceLayer
andmosaicRule
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):
...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).