¿Cómo puedo, si es posible, establecer un renderizador para un ArcGISDynamicMapServiceLayer
que utiliza una función para determinar los valores de las características en lugar de sólo los valores de los atributos?
Cuando se utiliza el siguiente código, la función especificada nunca es llamada. En su lugar, el valor que se añade en último lugar se utiliza para cada característica, lo que me parece un error. Es decir, lo siguiente, que yo esperaba que representara las características usando sólo el símbolo gris por defecto, en cambio representa todas las características en rojo.
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);
});
Tras esta muestra utilizando un FeatureLayer
y añadiendo el renderizador llamando a layer.setRenderer(renderer);
. produce el resultado esperado pero no es la respuesta a esta pregunta.