How can I, if possible, set a renderer for an ArcGISDynamicMapServiceLayer
which uses a function to determine feature values instead of just attribute values?
When using the following code, the function specified never gets called. Instead, the value to be added last is used for every feature, which kind of seems like a bug to me. That is, the following, which I expected to render features using the default gray symbol only, instead renders all features red.
var map, mapService;
require(["esri/map", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/layers/LayerDrawingOptions", "esri/renderers/UniqueValueRenderer", "esri/symbols/SimpleFillSymbol", "dojo/_base/Color", "dojo/domReady!"],
function (Map, ArcGISDynamicMapServiceLayer, LayerDrawingOptions, UniqueValueRenderer, SimpleFillSymbol, Color) {
var drawingOptions, optionsArray = [];
map = new Map("mapDiv", {
basemap: "osm",
center: [0, 0],
zoom: 5
});
mapService = new ArcGISDynamicMapServiceLayer(
"http://x.x.x.x:6080/arcgis/rest/services/Service_Name/MapServer",
{id: "test"});
map.addLayers([mapService]);
// The renderer displays polygons with a GRAY fill per default.
var defaultSymbol = new SimpleFillSymbol().setColor(new Color("#999999"));
// There are only two specified categories, using YELLOW and RED fill.
var yellowSymbol = new SimpleFillSymbol().setColor(new Color("#ffff00"));
var redSymbol = new SimpleFillSymbol().setColor(new Color("#ff0000"));
var renderer = new UniqueValueRenderer(defaultSymbol, function (feature) {
console.log("!");
return "other";
});
renderer.addValue({value: "yellow",
symbol: yellowSymbol,
label: "Category One (Yellow)", description: ""});
renderer.addValue({value: "red",
symbol: redSymbol,
label: "Category Two (Red)", description: ""});
drawingOptions = new LayerDrawingOptions();
drawingOptions.renderer = renderer;
optionsArray[0] = drawingOptions;
map.getLayer("test").setLayerDrawingOptions(optionsArray);
});
Following this sample, using a FeatureLayer
instead and adding the renderer by calling layer.setRenderer(renderer);
. produces the expected result but is not the answer to this question.