1 votos

Configuración de un renderizador que utiliza una función para una capa dinámica en la API JavaScript de ArcGIS

¿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.

1voto

Gareth Jenkins Puntos 1480

Una capa dinámica se renderiza en el servidor, que no soporta la misma funcionalidad que una capa gráfica, que se renderiza en el navegador. El navegador puede ejecutar fácilmente una función JavaScript en tiempo de renderizado para obtener el resultado deseado; sin embargo, comunicar/ejecutar la función a/en el servidor es muy difícil, si no imposible: puede tener todo tipo de código, referencias a otro ámbito, etc.

La documentación de Esri no menciona esta distinción específicamente, pero el objeto LayerDrawingOptions está básicamente proporcionando un paso intermedio de transformación (lo que puede) de un renderizador a opciones que un servidor entiende para una capa dinámica. Esto contrasta con la capa gráfica que tiene el renderizador establecido directamente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X