Is it possible to render each feature in a feature class using a color specified in an attribute of that feature class? All I've been able to find is how to do this through the UI. I need to do it using .NET SDK. I had hoped to use one of the RendererDefinition subclasses but none fit the bill.
Hi Douglas,
Actually there is a sample for attribute driven symbology here: Renderer - AttributeDrivenSymbology.cs even so this sample shows rotation, however, if you don't have a sample for your rendering needs, you can follow the approach outlined here:
I use the CIMViewer to take a look at a symbol that is using attribute values for its color. The CIMViewer add-in allows you to look at the cartographic information model for each CIMFeatureLayer, which in turn contains the CIMRenderer definition. I changed my layer's symbology through the Pro UI to use an attribute driven color and looking at the CIMViewer's XML output, I found that my CIMSimpleRenderer had been modified as shown below in order to support the coloring by attribute value (you can see the XML of the CIM Renderer). Also a matching 'PrimitiveName' reference was added to the symbol layer that needed the color replaced (not shown here):
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>Renderer</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:CIMSimpleRenderer<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>Patch</SPAN><SPAN class="punctuation token">></SPAN></SPAN>Default<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>Patch</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>Symbol</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:CIMSymbolReference<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>PrimitiveOverrides</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:ArrayOfCIMPrimitiveOverride<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>CIMPrimitiveOverride</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:CIMPrimitiveOverride<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>PrimitiveName</SPAN><SPAN class="punctuation token">></SPAN></SPAN>d704d106-8f6f-4ef4-8ee9-3e8c4c7a2c8c<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>PrimitiveName</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>PropertyName</SPAN><SPAN class="punctuation token">></SPAN></SPAN>FillColor<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>PropertyName</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>Expression</SPAN> <SPAN class="punctuation token">/></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>ValueExpressionInfo</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:CIMExpressionInfo<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>Expression</SPAN><SPAN class="punctuation token">></SPAN></SPAN>$feature.Color<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>Expression</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>ReturnType</SPAN><SPAN class="punctuation token">></SPAN></SPAN>Default<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>ReturnType</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>ValueExpressionInfo</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>CIMPrimitiveOverride</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>PrimitiveOverrides</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>Symbol</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:CIMPointSymbol<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> ....... <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>SymbolLayers</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:ArrayOfCIMSymbolLayer<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>CIMSymbolLayer</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:CIMVectorMarker<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> ... <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>MarkerGraphics</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:ArrayOfCIMMarkerGraphic<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>CIMMarkerGraphic</SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:</SPAN>type</SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=</SPAN><SPAN class="punctuation token">"</SPAN>typens:CIMMarkerGraphic<SPAN class="punctuation token">"</SPAN></SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><</SPAN>PrimitiveName</SPAN><SPAN class="punctuation token">></SPAN></SPAN>d704d106-8f6f-4ef4-8ee9-3e8c4c7a2c8c<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>PrimitiveName</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>CIMMarkerGraphic</SPAN><SPAN class="punctuation token">></SPAN></SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>MarkerGraphics</SPAN><SPAN class="punctuation token">></SPAN></SPAN> ... <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"></</SPAN>CIMSymbolLayer</SPAN><SPAN class="punctuation token">></SPAN></SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
If you look at the sample referenced above using the CIMView's XML output, you can come up with a snippet like the one below that changes the color using the text field "TestPoints.Color", which contains values like 'Red', 'Green', 'Blue'. Note that the 'PrimitiveName' in the primitive override has to match the one in the CIMMarkerGraphics.
<SPAN class="keyword token">protected</SPAN> <SPAN class="keyword token">override</SPAN> <SPAN class="keyword token">void</SPAN> <SPAN class="token function">OnClick</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> <SPAN class="keyword token">var</SPAN> lyr <SPAN class="operator token">=</SPAN> MapView<SPAN class="punctuation token">.</SPAN>Active<SPAN class="punctuation token">.</SPAN>Map<SPAN class="punctuation token">.</SPAN><SPAN class="token function">GetLayersAsFlattenedList</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>OfType<SPAN class="operator token"><</SPAN>FeatureLayer<SPAN class="operator token">></SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">Where</SPAN><SPAN class="punctuation token">(</SPAN>f <SPAN class="operator token">=</SPAN><SPAN class="operator token">></SPAN> f<SPAN class="punctuation token">.</SPAN>Name <SPAN class="operator token">==</SPAN> <SPAN class="string token">"TestPoints"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">FirstOrDefault</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>lyr <SPAN class="operator token">==</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN><SPAN class="punctuation token">;</SPAN> QueuedTask<SPAN class="punctuation token">.</SPAN><SPAN class="token function">Run</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN><SPAN class="operator token">></SPAN> <SPAN class="punctuation token">{</SPAN> <SPAN class="comment token">//Get the layer's renderer</SPAN> <SPAN class="keyword token">var</SPAN> renderer <SPAN class="operator token">=</SPAN> lyr<SPAN class="punctuation token">.</SPAN><SPAN class="token function">GetRenderer</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> CIMSimpleRenderer<SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> primitiveName <SPAN class="operator token">=</SPAN> Guid<SPAN class="punctuation token">.</SPAN><SPAN class="token function">NewGuid</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToString</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> cimPO <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">CIMPrimitiveOverride</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> PrimitiveName <SPAN class="operator token">=</SPAN> primitiveName<SPAN class="punctuation token">,</SPAN> PropertyName <SPAN class="operator token">=</SPAN> <SPAN class="string token">@"FillColor"</SPAN><SPAN class="punctuation token">,</SPAN> Expression <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">,</SPAN> ValueExpressionInfo <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">CIMExpressionInfo</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> Expression <SPAN class="operator token">=</SPAN> <SPAN class="string token">@"$feature.Color"</SPAN><SPAN class="punctuation token">,</SPAN> ReturnType <SPAN class="operator token">=</SPAN> ExpressionReturnType<SPAN class="punctuation token">.</SPAN>Default <SPAN class="punctuation token">}</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">(</SPAN>renderer<SPAN class="punctuation token">.</SPAN>Symbol<SPAN class="punctuation token">.</SPAN>Symbol <SPAN class="keyword token">as</SPAN> CIMPointSymbol<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>SymbolLayers<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>PrimitiveName <SPAN class="operator token">=</SPAN> primitiveName<SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> overrideList <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">CIMPrimitiveOverride</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN> overrideList<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> cimPO<SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">//Apply symbol overrides</SPAN> renderer<SPAN class="punctuation token">.</SPAN>Symbol<SPAN class="punctuation token">.</SPAN>PrimitiveOverrides <SPAN class="operator token">=</SPAN> overrideList<SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">//Apply the renderer to the feature layer</SPAN> lyr<SPAN class="punctuation token">.</SPAN><SPAN class="token function">SetRenderer</SPAN><SPAN class="punctuation token">(</SPAN>renderer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
In my first attempt at this, I tried to use UniqueValueRenderer. I can load the ramp with my colors, but I couldn't figure out how to map them to specific values. It seems I can only tell the renderer what fields to look at, and then it wants to map to the values to colors in the ramp on I guess a first-come basis. It's very possible that I am missing something in how I set it up. I'm new to this and the UniqueValueRenderer is not intuitive.
I'll experiment with the CIMViewer and this. My suspicion is that this will be beyond what I can do with the simple renderer mods used above.
If I can't figure anything out, I'll post a specific Q to the community and see if anyone else has tried this.
Thanks for your help, Wolfgang!
I am not sure if attributes in related tables are supported, however, you can try set this up through the Pro UI and then check the CIM, if it is supported. You can also use a Unique Value Renderer which you can build from your color lookup table. With a UniqueValue Renderer you also get a proper legend in the table of content. Unique Value Renderer sample
Thanks for the tip on using CIMViewer, and for your development work on that. That's a handy tool!
Mine came out slightly different than your example, due to the fact that I'm working with polys rather than point symbols. The CIMViewer made it easy to figure out what I needed to change.
<SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN> <SPAN class="keyword token">var</SPAN> renderer <SPAN class="operator token">=</SPAN> flyr<SPAN class="punctuation token">.</SPAN><SPAN class="token function">GetRenderer</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> CIMSimpleRenderer<SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> primitiveName <SPAN class="operator token">=</SPAN> Guid<SPAN class="punctuation token">.</SPAN><SPAN class="token function">NewGuid</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">ToString</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> cimPO <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">CIMPrimitiveOverride</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> PrimitiveName <SPAN class="operator token">=</SPAN> primitiveName<SPAN class="punctuation token">,</SPAN> PropertyName <SPAN class="operator token">=</SPAN> <SPAN class="string token">@"Color"</SPAN><SPAN class="punctuation token">,</SPAN> Expression <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">,</SPAN> ValueExpressionInfo <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">CIMExpressionInfo</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> Title <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Custom"</SPAN><SPAN class="punctuation token">,</SPAN> Expression <SPAN class="operator token">=</SPAN> <SPAN class="string token">@"$feature.Symbol"</SPAN><SPAN class="punctuation token">,</SPAN> ReturnType <SPAN class="operator token">=</SPAN> ExpressionReturnType<SPAN class="punctuation token">.</SPAN>Default <SPAN class="punctuation token">}</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">//TODO: Probably better to iterate the SymbolLayers looking for CIMSolidFill explicitly </SPAN> <SPAN class="comment token">//rather than relying on position.</SPAN> <SPAN class="punctuation token">(</SPAN>renderer<SPAN class="punctuation token">.</SPAN>Symbol<SPAN class="punctuation token">.</SPAN>Symbol <SPAN class="keyword token">as</SPAN> CIMPolygonSymbol<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>SymbolLayers<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN>PrimitiveName <SPAN class="operator token">=</SPAN> primitiveName<SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">var</SPAN> overrideList <SPAN class="operator token">=</SPAN> <SPAN class="keyword token">new</SPAN> <SPAN class="token class-name">CIMPrimitiveOverride</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN> overrideList<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> cimPO<SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">//Apply symbol overrides</SPAN> renderer<SPAN class="punctuation token">.</SPAN>Symbol<SPAN class="punctuation token">.</SPAN>PrimitiveOverrides <SPAN class="operator token">=</SPAN> overrideList<SPAN class="punctuation token">;</SPAN> <SPAN class="comment token">//Apply the renderer to the feature layer</SPAN> flyr<SPAN class="punctuation token">.</SPAN><SPAN class="token function">SetRenderer</SPAN><SPAN class="punctuation token">(</SPAN>renderer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Now, to push things a little further. What if the colors are in another table in the geodatabase, referenced by a field in the feature table? Is there a way to follow that key relationship inline here? Do I instead need to build some sort of dictionary from the table in which the colors are stored? I've only given dictionary renderers a cursory look so far, but they seem pretty heavy for generation on-the-fly.
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.