com.supermap.mapping

类 SymbolLayerDrawing

  • java.lang.Object
    • com.supermap.data.InternalHandle
      • com.supermap.data.InternalHandleDisposable
        • com.supermap.mapping.SymbolLayerDrawing
  • 所有已实现的接口:
    IDisposable


    public class SymbolLayerDrawing
    extends com.supermap.data.InternalHandleDisposable
    符号图层绘制方案类。

     

    符号图层绘制能力可实现分层渲染几何对象符号,并支持自定义符号子层的分层渲染顺序,用来呈现某些特定的地物关系,例如:线状地物交叉连接的显示效果。12.0.0 版本仅线统一风格图层、单值和分段专题图层支持符号图层绘制。

     

    SymbolLayerDrawing符号图层绘制方案类,它是符号图层绘制的核心接口,定义了图层分层渲染几何对象符号的方案,SymbolLayerDrawing对象可包含一个或多个SymbolLayerDrawingGroup对象,每一个SymbolLayerDrawingGroup对象可包含一个或多个SymbolLayerDrawingItem对象,每一个SymbolLayerDrawingItem对象管理一个符号子层信息。

     

    SymbolLayerDrawingGroup符号图层绘制分组对象,用于对符号子层进行分组,由SymbolLayerDrawingItem对象对应管理其下每一个符号子层信息;同一对象管理的符号子层将渲染在同一虚拟渲染层上;不同对象管理的符号子层渲染在不同虚拟渲染层上,SymbolLayerDrawingGroup对象与虚拟渲染层是一对一的关系。

     

    虚拟渲染层实现了符号分层渲染的新绘制方式,当图层按照几何对象从数据库返回的顺序,逐一绘制每一个几何对象符号时,当前几何对象符号的子层将按其分组(SymbolLayerDrawingGroup)情况绘制在不同的虚拟渲染层上,所有几何对象绘制完成后,图层将按照SymbolLayerDrawingGroup对象索引值从小到大的顺序将对应的虚拟渲染层叠加到地图中显示。

     

     

     

    关于SymbolLayerDrawing对象的初始化

     

    图层第一次调用Layer.getSymbolLayerDrawing()方法后,将初始化一个符号图层绘制方案并由SymbolLayerDrawing对象返回,初始化重点是创建SymbolLayerDrawingGroup对象,按照规则将符号子层分配给SymbolLayerDrawingGroup对象。图层类型不同、符号子层数目不同,初始化结果不同,具体如下:

     

    • 统一风格图层
    统一风格图层将基于图层符号的子层初始化SymbolLayerDrawing对象。

    根据符号子层数量初始化对应数量的SymbolLayerDrawingGroup对象,按符号子层索引值从小到大的顺序,将子层逐一分配给索引值从小到大的对应SymbolLayerDrawingGroup对象,如上图所示。
    • 单值/分段专题图层
    单值和分段专题图层将基于专题图子项和符号的子层初始化SymbolLayerDrawing对象。

     

    按照专题子项索引值从大到小的顺序,依次初始化多个SymbolLayerDrawingGroup对象,每个对象分配一个符号子层,如下图所示,先为分段专题图子项ThemeRangeItem[3]的两个符号子层创建SymbolLayerDrawingGroup[0]和SymbolLayerDrawingGroup[1]对象,并按符号子层索引值从小到大的顺序,将子层依次分配给索引值从小到大的对应SymbolLayerDrawingGroup对象,以此类推。

     

    其中,单值专题图存在缺省风格,初始化时,则先为缺省风格符号的子层创建对应的SymbolLayerDrawingGroup对象,其余初始化操作遵循上述规则。

     

    示范代码:
    以下代码示例如何调整线单值专题图的初始化符号图层绘制方案,获得所有单值子项线几何对象交叉连接显示效果。

    // 地图中第一个图层为线单值专题图
    Layer layerThemeUnique = m_map.getLayers().get(0);
    // 初始化线单值专题图的符号图层绘制方案
    SymbolLayerDrawing symbolLayerDrawing = layerThemeUnique.getSymbolLayerDrawing();
    // 启用线单值专题图符号图层绘制,分层渲染几何对象符号
    symbolLayerDrawing.setEnabled(true);
    
    // 调整初始化方案下的SymbolLayerDrawingGroup对象索引顺序
    symbolLayerDrawing.moveGroupTo(6, 1);
    symbolLayerDrawing.moveGroupTo(5, 1);
    symbolLayerDrawing.moveGroupTo(4, 1);
    
    // 进一步优化符号图层绘制方案,将所有符号的索引0子层分配到一个SymbolLayerDrawingGroup分组(索引值为0),
    // 使这些子层绘制在最下层的一个虚拟渲染层。
    symbolLayerDrawing.moveItemToGroup(3, 0, 0);
    symbolLayerDrawing.moveItemToGroup(2, 0, 0);
    symbolLayerDrawing.moveItemToGroup(1, 0, 0);
    
    // 索引为3,2,1分组中的符号子项全部移至索引为0的分组后,删除空分组
    symbolLayerDrawing.removeSymbolLayerDrawingGroup(3);
    symbolLayerDrawing.removeSymbolLayerDrawingGroup(2);
    symbolLayerDrawing.removeSymbolLayerDrawingGroup(1);
    m_map.refresh();
    
    • 方法概要

      所有方法 实例方法 具体方法 
      限定符和类型 方法和说明
      void dispose() 
      void fromXML(String strXML)
      根据描述符号图层绘制方案的XML字符串构建符号图层绘制对象。
      int getCount()
      获取符号图层绘制分组数量。
      long getHandle() 
      SymbolLayerDrawingGroup getSymbolLayerDrawingGroup(int index)
      获取指定索引的符号图层绘制分组对象。
      boolean isEnabled()
      获取图层是否启用符号图层绘制。
      void moveGroupTo(int originalIndex, int targetIndex)
      将指定索引的符号图层绘制分组移至目标索引位置,目标索引后的分组依次后移。
      void moveItemToGroup(int originalGroupIndex, int originalItemIndex, int targetGroupIndex)
      将指定符号图层绘制分组内的指定符号子层移至目标分组。
      void moveItemToNewGroup(int originalGroupIndex, int originalItemIndex)
      将指定符号图层绘制分组内的指定符号子层移至一个新建分组,该新建分组的索引位于已有分组末尾。
      boolean removeSymbolLayerDrawingGroup(int index)
      删除指定索引的符号图层绘制分组,仅支持删除空分组;如果分组内存在符号子层,删除失败。
      void setEnabled(boolean value)
      设置图层是否启用符号图层绘制。
      String toXML()
      将符号图层绘制方案转换为XML格式的字符串。
      • 从类继承的方法 com.supermap.data.InternalHandleDisposable

        makeSureNativeObjectLive
    • 方法详细资料

      • dispose

        public void dispose()
      • getHandle

        public long getHandle()
        覆盖:
        getHandle 在类中 com.supermap.data.InternalHandle
      • getSymbolLayerDrawingGroup

        public SymbolLayerDrawingGroup getSymbolLayerDrawingGroup(int index)
        获取指定索引的符号图层绘制分组对象。
        参数:
        index - 符号图层绘制分组对象的索引,索引值从0开始,范围为【0-100】。
        返回:
        返回指定索引的符号图层绘制分组对象。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • moveGroupTo

        public void moveGroupTo(int originalIndex,
                                int targetIndex)
        将指定索引的符号图层绘制分组移至目标索引位置,目标索引后的分组依次后移。

         

        在图层分层渲染几何对象符号方案中,符号图层绘制分组(SymbolLayerDrawingGroup对象)用于对符号子层进行分组管理,同一对象管理的符号子层将渲染在同一虚拟渲染层上;不同对象管理的符号子层渲染在不同虚拟渲染层上,SymbolLayerDrawingGroup对象与虚拟渲染层是一对一的关系,图层最终显示时,按照符号图层绘制分组索引值从小到大的顺序将对应的虚拟渲染层叠加到地图中显示,以此到达图层中几何对象符号分层渲染的效果。

         

        因此,改变符号图层绘制分组的索引,将会改变分组内符号子层的分层渲染顺序。 关于符号图层绘制分组(SymbolLayerDrawingGroup)的更多信息,请参见SymbolLayerDrawing类描述。
        参数:
        originalIndex - 待移动符号图层绘制分组索引,索引值从0开始,范围为【0-100】。
        targetIndex - 目标索引位置,索引值从0开始,范围为【0-100】。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • moveItemToGroup

        public void moveItemToGroup(int originalGroupIndex,
                                    int originalItemIndex,
                                    int targetGroupIndex)
        将指定符号图层绘制分组内的指定符号子层移至目标分组。

         

        在图层分层渲染几何对象符号方案中,符号图层绘制分组(SymbolLayerDrawingGroup对象)用于对符号子层进行分组管理,同一对象管理的符号子层将渲染在同一虚拟渲染层上;不同对象管理的符号子层渲染在不同虚拟渲染层上,SymbolLayerDrawingGroup对象与虚拟渲染层是一对一的关系,图层最终显示时,按照符号图层绘制分组索引值从小到大的顺序将对应的虚拟渲染层叠加到地图中显示,以此到达图层中几何对象符号分层渲染的效果。

         

        因此,改变符号子层的绘制分组,将会改变其分层渲染顺序。 关于符号图层绘制分组(SymbolLayerDrawingGroup)的更多信息,请参见SymbolLayerDrawing类描述。
        参数:
        originalGroupIndex - 待移动符号子层所在的符号图层绘制分组索引,索引值从0开始,范围为【0-100】。
        originalItemIndex - 管理待移动符号子层的SymbolLayerDrawingItem对象索引,索引值从0开始,范围为【0-+∞】。
        targetGroupIndex - 目标符号图层绘制分组索引,索引值从0开始,范围为【0-100】。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • moveItemToNewGroup

        public void moveItemToNewGroup(int originalGroupIndex,
                                       int originalItemIndex)
        将指定符号图层绘制分组内的指定符号子层移至一个新建分组,该新建分组的索引位于已有分组末尾。

         

        在图层分层渲染几何对象符号方案中,符号图层绘制分组(SymbolLayerDrawingGroup对象)用于对符号子层进行分组管理,同一对象管理的符号子层将渲染在同一虚拟渲染层上;不同对象管理的符号子层渲染在不同虚拟渲染层上,SymbolLayerDrawingGroup对象与虚拟渲染层是一对一的关系,图层最终显示时,按照符号图层绘制分组索引值从小到大的顺序将对应的虚拟渲染层叠加到地图中显示,以此到达图层中几何对象符号分层渲染的效果。

         

        因此,改变符号子层的绘制分组,将会改变其分层渲染顺序。 关于符号图层绘制分组(SymbolLayerDrawingGroup)的更多信息,请参见SymbolLayerDrawing类描述。
        参数:
        originalGroupIndex - 待移动符号子层所在的符号图层绘制分组索引,索引值从0开始,范围为【0-100】。
        originalItemIndex - 管理待移动符号子层的SymbolLayerDrawingItem对象索引,索引值从0开始,范围为【0-+∞】。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • removeSymbolLayerDrawingGroup

        public boolean removeSymbolLayerDrawingGroup(int index)
        删除指定索引的符号图层绘制分组,仅支持删除空分组;如果分组内存在符号子层,删除失败。
        参数:
        index - 待删除符号图层绘制分组的索引,索引值从0开始,范围为【0-100】。
        返回:
        如果删除成功返回true,否则返回false。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • getCount

        public int getCount()
        获取符号图层绘制分组数量。
        返回:
        返回符号图层绘制分组数量。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • isEnabled

        public boolean isEnabled()
        获取图层是否启用符号图层绘制。
        返回:
        如果图层已启用符号图层绘制返回true,否则返回false。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • setEnabled

        public void setEnabled(boolean value)
        设置图层是否启用符号图层绘制。

         

        图层未启用符号图层绘制,图层中几何对象符号的默认绘制方式是按照几何对象从数据库返回的顺序,逐一绘制每一个几何对象的符号,当前几何对象所有符号子层按其在符号中索引值从小到大的顺序依次绘制在一个渲染层上,因此,结果地图中线状地物呈现独立状态,通常表达道路垂直立交的关系。

         

        图层启用符号图层绘制,图层中几何对象符号的绘制将采用符号分层渲染的新方式,它能实现线状地物交叉连接关系的显示效果,如下图中道路交叉路口。详情请参见SymbolLayerDrawing类描述。

        参数:
        value - 如果为true,则当前图层启用符号图层绘制;如果为false,则当前图层未启用符号图层绘制。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • toXML

        public String toXML()
        将符号图层绘制方案转换为XML格式的字符串。
        返回:
        返回描述符号图层绘制方案的XML字符串。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0
      • fromXML

        public void fromXML(String strXML)
        根据描述符号图层绘制方案的XML字符串构建符号图层绘制对象。
        参数:
        strXML - 描述符号图层绘制方案的XML字符串。
        抛出:
        IllegalStateException - 当符号图层绘制方案对象已释放。
        从以下版本开始:
        12.0.0

Copyright © 2021–2025 SuperMap. All rights reserved.