Select to view content in your preferred language

UniqueValueRenderer - multiple attribute rendering?

7619
11
03-12-2012 12:16 PM
evanpicard
Emerging Contributor
This -

esri.renderer.UniqueValueRenderer(defaultSymbol, attributeField, attributeField2?, attributeField3?, fieldDelimeter?)

Creates a new UniqueValueRenderer object. Typically features are rendered based on the unique values of one attribute field. However up to three fields can be combined to generate a unique value. For example, if two fields are used which store the values A and B; and X, Y, and Z respectively, then the unique values for the renderer can be A:X, A:Y, A:Z, B:X, B:Y and B:Z, assuming ":" is the field delimiter.


would lead me to believe that this -

var salesRepsRend = new esri.renderer.UniqueValueRenderer (new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CROSS, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,0,0.25])),"PCText", "Ldr_type", "Name" ":");


salesRepsRend.addValue("0:0", new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,255,0.25])));
salesRepsRend.addValue("1:0", new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_X, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,255,0.25])));
salesRepsRend.addValue("0:1", new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,255,0.25])));





should work.  which is not the case.

I'm really only interested in rendering based on 2 fields, PCText and Ldr_type, but I get "esri.layers.FeatureLayer: unable to find ':' field in the layer 'fields' information [url: " if i don't fill in the third attribute.

so my problem is that it doesnt render uniquely, everything renders with the default renderer. 

Any ideas?

Thanks,
Evan
0 Kudos
11 Replies
shwetasharma
New Contributor
sorry for not posting the code before...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9"/>
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples
      on iOS devices-->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
    <title>
      Unique Value Renderer
    </title>
    <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.8/js/dojo/dijit/themes/claro/claro.css"/>
    <script type="text/javascript">
      var djConfig = {
        parseOnLoad: true
      };
    </script>
    <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.8">
    </script>
    <script type="text/javascript" charset="utf-8">
      dojo.require("esri.map");
      dojo.require("esri.layers.FeatureLayer");
      var map;
      //var ddname=Beed;

      function init() {
        map = new esri.Map("map", {
          extent:new esri.geometry.Extent({"xmin":69.84,"ymin":15.05,"xmax":82.98,"ymax":22.26,"spatialReference":{"wkid":4326}}),
          slider: false
        });
        dojo.connect(map, "onLoad", initOperationalLayers);
        map.addLayer(new esri.layers.ArcGISDynamicMapServiceLayer("http://mrsacgis1/ArcGIS/rest/services/Planning/rdd/MapServer"));
      }


      function initOperationalLayers() {
        var defaultSymbol = new esri.symbol.SimpleFillSymbol().setStyle(      esri.symbol.SimpleFillSymbol.STYLE_NULL);
        defaultSymbol.outline.setStyle(esri.symbol.SimpleLineSymbol.STYLE_NULL);

        //create renderer
        var renderer = new esri.renderer.UniqueValueRenderer(defaultSymbol, "SDE.village_mosaic.DIST_NAME","SDE.SECTOR_RDD.PERE_RD","");

        //add symbol for each possible value
        renderer.addValue("Pune:0", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([255, 0, 0, 1])));
        renderer.addValue("Pune:1", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([0, 0, 0, 1])));
        renderer.addValue("Pune:2", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([0, 0, 255, 1])));


        var featureLayer = new esri.layers.FeatureLayer("http://mrsacgis1/ArcGIS/rest/services/Planning/rdd/MapServer/2", {
          mode: esri.layers.FeatureLayer.MODE_SNAPSHOT,
          outFields: ["SDE.village_mosaic.DIST_NAME","SDE.SECTOR_RDD.PERE_RD"]
        });

        featureLayer.setRenderer(renderer);
        map.addLayer(featureLayer);

      }
      dojo.addOnLoad(init);
    </script>
  </head>

  <body>
    <div id="map" class="claro" style="width:1000px; height:800px; border:1px solid #000;">
    </div>
  </body>

</html>

Here SDE.village_mosaic.DIST_NAME field is string and SDE.SECTOR_RDD.PERE_RD is integer.

I am using this link as reference:
  http://help.arcgis.com/en/webapi/javascript/arcgis/help/jssamples_start.htm#jssamples/renderer_uniqu...
The only difference is i am using ArcGISDynamicMapServiceLayer instead ArcGISTiledMapServiceLayer but it is working fine for a single field.
i am new in this field plz help....
0 Kudos
evanpicard
Emerging Contributor
I *think* the problem is you've got a blank "" for your delimeter, but you've got ":" in your addvalue statements.


http://help.arcgis.com/en/webapi/javascript/arcgis/help/jsapi/uniquevaluerenderer.htm#fieldDelimiter




        var renderer = new esri.renderer.UniqueValueRenderer(defaultSymbol, "SDE.village_mosaic.DIST_NAME","SDE.SECTOR_RDD.PERE_RD","");

        //add symbol for each possible value
        renderer.addValue("Pune:0", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([255, 0, 0, 1])));




try this:
        var renderer = new esri.renderer.UniqueValueRenderer(defaultSymbol, "SDE.village_mosaic.DIST_NAME","SDE.SECTOR_RDD.PERE_RD", null, ":");
                                              


Let us know if it works.
and if it does, please check this as an answer, it would be my first!
Evan 🙂
0 Kudos