Class DictionaryRenderer

  • All Implemented Interfaces:
    JsonSerializable

    public final class DictionaryRenderer
    extends Renderer
    Defines a renderer based on a SymbolStyle.

    The DictionaryRenderer uses attributes from source data (such as fields of features in a feature table or attributes of graphics in a graphics overlay) to display unique multilayer symbols based on those attributes. This is achieved through an associated DictionarySymbolStyle.

    The DictionarySymbolStyle is created using a given specification such as "mil2525d". Each specification depends on attribute names that define the symbology and text of each feature. For example, the mil2525d specification looks for attributes named "identity", "symbolset", "symbolentity", and "modifier1", among many others. These attributes reference different symbols in the style file that are assembled to create a unique symbol. In order to display features using the DictionaryRenderer, you must make sure the DictionaryRenderer and associated DictionarySymbolStyle know which attributes in your data to use. This can be achieved in multiple ways:

    • Pre-author your data so that the attribute names match the attributes needed by the specification. In the case of the mil2525d specification, author a feature service (or other data source) with a field named "identity", another named "symbolset", and so on. In this scenario, you create a FeatureTable from the source data, create a FeatureLayer from the FeatureTable, apply the DictionaryRenderer to the FeatureLayer, and the symbols are generated automatically and applied to the layer in the view. The same workflow applies for Graphics in a GraphicsOverlay. Ideally when creating graphics on the fly, you can give the attributes names that match the specification. When fields in the FeatureTable and attributes in Graphics have expected names, the DictionaryRenderer automatically finds them.
    • Manually map your attribute names to those expected by the specification. You can map as many attribute names as necessary for the specification, but only need to map attribute names that do not match the specification (all matching attribute names will be automatically matched by the renderer). For example, an expected attribute "symbolset" might appear as the "symbol_set" field in your FeatureTable. In this scenario, you can create a ServiceFeatureTable from a feature service, create a FeatureLayer from that feature table, create a DictionaryRenderer by manually mapping the "symbol_set" name to the "symbolset" name expected by the specification, and finally apply the renderer to the FeatureLayer.

    A DictionaryRenderer can be applied to pre-authored data, such as feature services, mobile geodatabases (generated from ArcMap or a sync-enabled feature service), and feature layers in a mobile map package. You can also apply it to a GraphicsOverlay, which allow for on-the-fly graphic generation.

    Since:
    100.0.0 for JavaSE and 100.2.0 for Android
    • Constructor Detail

      • DictionaryRenderer

        public DictionaryRenderer​(DictionarySymbolStyle dictionarySymbolStyle)
        Creates an instance of DictionaryRenderer.
        Parameters:
        dictionarySymbolStyle - dictionary symbol style, can't be null
        Throws:
        IllegalArgumentException - if dictionarySymbolStyle is null
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android for JavaSE and 100.2.0 for Android
      • DictionaryRenderer

        public DictionaryRenderer​(DictionarySymbolStyle dictionarySymbolStyle,
                                  Map<String,String> symbologyFieldOverrides,
                                  Map<String,String> textFieldOverrides)
        Creates an instance of DictionaryRenderer.
        Parameters:
        dictionarySymbolStyle - dictionary symbol style, can't be null
        symbologyFieldOverrides - symbology fields to be overridden
        textFieldOverrides - text fields to be overridden
        Throws:
        IllegalArgumentException - if dictionarySymbolStyle or symbologyFieldOverrides or textFieldOverrides is null
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
    • Method Detail

      • getDictionarySymbolStyle

        public DictionarySymbolStyle getDictionarySymbolStyle()
        Gets the dictionary symbol style.
        Returns:
        the dictionary symbol style
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • setDictionarySymbolStyle

        public void setDictionarySymbolStyle​(DictionarySymbolStyle dictionarySymbolStyle)
        Sets the dictionary symbol style.
        Parameters:
        dictionarySymbolStyle - dictionary symbol style
        Throws:
        IllegalArgumentException - if dictionarySymbolStyle is null
        Since:
        100.5.0
      • getSymbologyFieldOverrides

        public Map<String,String> getSymbologyFieldOverrides()
        Gets the symbology fields to be overridden.

        In case your source data's symbology field names do not match what the DictionarySymbolStyle specification expects, use this to override. For example, if the expected name in specification is "symbolset", and the value is your field's name is "symbol_set", set the override as:

         getSymbologyFieldOverrides().put("symbolset", "symbol_set");
         
        Returns:
        a map containing the symbology field name and its override, empty by default
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • getTextFieldOverrides

        public Map<String,String> getTextFieldOverrides()
        Gets the text fields to be overridden.

        In case your source data's text field names do not match what the DictionarySymbolStyle specification expects, use this to override. For example, if the expected name in specification is "staffcomment", and the value is your field's name is "staff_comment", set the override as:

         getTextFieldOverrides().put("staffcomment", "staff_comment");
         
        Returns:
        a map containing the text field name and its override, empty by default
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • isTextVisible

        public boolean isTextVisible()
        Gets whether the text in the symbols is visible.
        Returns:
        the text visibility, default is true
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • setTextVisible

        public void setTextVisible​(boolean visible)
        Sets whether the text in the symbols is visible.
        Parameters:
        visible - text visibility
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • getTextVisibilityMinScale

        public double getTextVisibilityMinScale()
        Gets the minimum scale for text in the symbol to be visible.

        The return value is scale if the view is a Map, and distance (in meters) if the view is a Scene.

        Returns:
        the text visibility min scale, default is 0.0
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • setTextVisibilityMinScale

        public void setTextVisibilityMinScale​(double minScale)
        Sets the minScale for text in the symbol to be visible.

        Use this property to apply scale dependency for the text in the symbols. This value is scale if the view is a Map, and distance (in meters) if the view is a Scene.

        Parameters:
        minScale - min scale
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • getTextVisibilityMaxScale

        public double getTextVisibilityMaxScale()
        Gets the text visibility max scale.

        The return value is scale if the view is a Map, and distance (in meters) if the view is a Scene.

        Returns:
        the text visibility max scale, default is 0.0
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android
      • setTextVisibilityMaxScale

        public void setTextVisibilityMaxScale​(double maxScale)
        Sets the text visibility max scale.

        Use this property to apply scale dependency for the text in the symbols. This value is scale if the view is a Map, and distance (in meters) if the view is a Scene.

        Parameters:
        maxScale - max scale
        Since:
        100.0.0 for JavaSE and 100.2.0 for Android