FeatureLayer FeatureCollection Unique renderer

3052
2
Jump to solution
01-27-2016 06:40 AM
GlenReid
New Contributor II

I have a feature layer created from a feature collection similar to the sample.  It works great:

var featureCollection = {
    "layerDefinition": null,
    "featureSet": {
        "features": [],
        "geometryType": "esriGeometryPoint"
    }
};

featureCollection.layerDefinition = {
    "geometryType": "esriGeometryPoint",
    "objectIdField": "ObjectID",
    "drawingInfo": {
        "renderer": {
            "type": "simple",
            "symbol": {
                "type": "esriPMS",
                "url": "resources/images/ship.png",
                "contentType": "image/png",
                "width": 16,
                "height": 16
            }
        }
    },
    "fields": [{
        "name": "ObjectID",
        "alias": "ObjectID",
        "type": "esriFieldTypeOID"
    }, {
        "name": "description",
        "alias": "Description",
        "type": "esriFieldTypeString"
    }, {
        "name": "title",
        "alias": "Title",
        "type": "esriFieldTypeString"
    }]
};

I'd now like to change this from a simple renderer to a unique value renderer.  Does anyone have an example that can get me started?

Thanks.

0 Kudos
1 Solution

Accepted Solutions
ChrisSmith7
Frequent Contributor

Glen,

Once you create your featureLayer from your featureCollection, try something like this:

var defaultSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_CIRCLE);
defaultSymbol.setColor(new Color([255, 0, 0, 0.25]));
defaultSymbol.setSize("4.2");

var renderer = new UniqueValueRenderer(defaultSymbol, "symbolField");
renderer.addValue("0", new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 6, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.75]), 1), new Color([255, 0, 0, 0.5])));
renderer.addValue("1", new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 6, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 71, 171, 0.75]), 1), new Color([0, 71, 171, 0.5])));

featureLayer.setRenderer(renderer);

In my example, I have a field named "symbolField" in a point featureLayer with either a "0" or "1" value. Based on these values, either a blue or red symbol renders in the map.

View solution in original post

2 Replies
ChrisSmith7
Frequent Contributor

Glen,

Once you create your featureLayer from your featureCollection, try something like this:

var defaultSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_CIRCLE);
defaultSymbol.setColor(new Color([255, 0, 0, 0.25]));
defaultSymbol.setSize("4.2");

var renderer = new UniqueValueRenderer(defaultSymbol, "symbolField");
renderer.addValue("0", new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 6, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 0, 0, 0.75]), 1), new Color([255, 0, 0, 0.5])));
renderer.addValue("1", new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 6, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 71, 171, 0.75]), 1), new Color([0, 71, 171, 0.5])));

featureLayer.setRenderer(renderer);

In my example, I have a field named "symbolField" in a point featureLayer with either a "0" or "1" value. Based on these values, either a blue or red symbol renders in the map.

GlenReid
New Contributor II

Worked like a charm, thanks Chris.

0 Kudos