com.supermap.mapping
类 ThemeUnique

java.lang.Object
  继承者 com.supermap.mapping.Theme
      继承者 com.supermap.mapping.ThemeUnique

public class ThemeUnique
extends Theme

单值专题图类。

将字段或表达式的值相同的要素采用相同的风格来显示,从而用来区分不同的类别。例如,在表示土地的面数据中表示土地利用类型的字段中有草地,林地,居民地,耕地等值,使用单值专题图进行渲染时,每种类型的土地利用类型被赋予一种颜色或填充风格,从而可以看出每种类型的土地利用的分布区域和范围。可用于地质图、地貌图、植被图、土地利用图、政治行政区划图、自然区划图、经济区划图等。单值专题图着重表示现象质的差别,一般不表示数量的特征。尤其是有交叉或重叠现象时,此类不推荐使用,例如:民族分布区等。

注意:如果通过连接(Join)或关联(Link)的方式与一个外部表建立了联系,当专题图的专题变量用到外部表的字段时,在显示专题图时,需要调用 Layer.getDisplayFilter()Layer.setDisplayFilter() 方法,否则专题图将出图失败。

示例:
以下代码示例了如何创建一个单值专题图:
 public void themeUniqueTest() {
        // 打开数据源,获得点数据集ProvinceCapital_P
        Workspace workspace = new Workspace();
        String path = "G:/World/World.udb";
        DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo(path, "World", "");
        Datasource datasource = workspace.getDatasources().open(datasourceConnectionInfo);
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("ProvinceCapital_P");

        // 构造单值专题图并进行单值子项的风格设置
        ThemeUnique theme = ThemeUnique.makeDefault(datasetVector, "SmID");             

        for (int i = 0; i < theme.getCount(); i++) {
            ThemeUniqueItem item = theme.getItem(i);
            item.getStyle().setMarkerSymbolID(0);
            item.getStyle().setMarkerSize(new Size2D(4, 4));
            Color color = new Color(255,255,100 + i);
            item.getStyle().setLineColor(color);
        }

        // 将得到的专题图添加到地图
        MapControl mapControl = new MapControl(workspace);
        Layer layer = mapControl.getMap().getLayers().add(datasetVector, true);
        Layer layerTheme = mapControl.getMap().getLayers().add(datasetVector,
                theme, true);

        // 出图成 JPG 文件
        mapControl.getMap().setImageSize(new java.awt.Dimension(512, 512));
        String outFile = "c:/temp/themeUnique.jpg";
        mapControl.getMap().outputMapToJPG(outFile);

        // 释放资源
        mapControl.dispose();
        workspace.dispose();
    }
 

构造方法摘要
ThemeUnique()
          默认构造函数,构造一个新的 ThemeUnique 对象。
ThemeUnique(ThemeUnique themeUnique)
          拷贝构造函数,根据给定的 ThemeUnique 对象构造一个与其完全相同的新对象。
 
方法摘要
 int add(ThemeUniqueItem item)
          添加一个单值专题图子项到单值专题图子项列表中。
 void clear()
          删除所有单值专题图子项。
 void dispose()
          释放对象所占用的资源。
 boolean fromXML(java.lang.String xml)
          根据传入的 XML 字符串重新构造对象。
 int getCount()
          返回单值专题图子项个数。
 java.lang.String getCustomMarkerAngleExpression()
          返回一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的旋转角度,字段表达式中的字段必须为数值型字段。
 java.lang.String getCustomMarkerSizeExpression()
          返回一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的大小,字段表达式中的字段必须为数值型字段。
 GeoStyle getDefaultStyle()
          返回单值专题图的默认风格。
 ThemeUniqueItem getItem(int index)
          返回指定序号的单值专题图子项。
 java.lang.String getOffsetX()
          返回点、线、面图层制作的单值专题图中的对象相对于原来位置的水平偏移量。
 java.lang.String getOffsetY()
          返回点、线、面图层制作的单值专题图中的对象相对于原来位置的垂直偏移量。
 java.lang.String getUniqueExpression()
          单值专题图字段表达式。
 int indexOf(java.lang.String unique)
          返回单值专题图中指定子项单值在当前序列中的序号。
 boolean insert(int index, ThemeUniqueItem item)
          将给定的单值专题图子项插入到指定序号的位置。
 boolean isDefaultStyleVisible()
          返回单值专题图默认风格是否可见。
 boolean isOffsetFixed()
          返回True表示采用设备单位,否则采用地理坐标单位。
static ThemeUnique makeDefault(DatasetVector dataset, java.lang.String uniqueExpression)
          根据给定的矢量数据集和单值专题图字段表达式生成默认的单值专题图。
static ThemeUnique makeDefault(DatasetVector dataset, java.lang.String uniqueExpression, ColorGradientType colorGradientType)
          根据给定的矢量数据集、单值专题图字段表达式和颜色渐变模式生成默认的单值专题图。
static ThemeUnique makeDefault(DatasetVector dataset, java.lang.String uniqueExpression, ColorGradientType colorGradientType, JoinItems joinItems)
          根据给定的矢量数据集、单值专题图字段表达式、颜色渐变模式和外部表连接项生成默认的单值专题图。
static ThemeUnique makeDefault(DatasetVector dataset, java.lang.String colorField, Colors colors)
          根据指定的面数据集、颜色字段名称、颜色生成默认的四色单值专题图。
 boolean remove(int index)
          删除一个指定序号的单值专题图子项。
 void reverseStyle()
          对单值专题图中子项的风格进行反序显示。
 void setCustomMarkerAngleExpression(java.lang.String value)
          设置一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的旋转角度,字段表达式中的字段必须为数值型字段。
 void setCustomMarkerSizeExpression(java.lang.String value)
          设置一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的大小,字段表达式中的字段必须为数值型字段。
 void setDefaultStyle(GeoStyle style)
          设置单值专题图的默认风格。
 void setDefaultStyleVisible(boolean value)
          设置单值专题图默认风格是否可见。
 void setOffsetFixed(boolean value)
          参数为True表示采用设备单位,否则采用地理坐标单位。
 void setOffsetX(java.lang.String value)
          设置点、线、面图层制作的单值专题图中的对象相对于原来位置的水平偏移量。
 void setOffsetY(java.lang.String value)
          设置点、线、面图层制作的单值专题图中的对象相对于原来位置的垂直偏移量。
 void setUniqueExpression(java.lang.String value)
          设置单值专题图字段表达式。
 java.lang.String toString()
          输出专题图格式化字符串。
 
从类 com.supermap.mapping.Theme 继承的方法
getMemoryData, getType, setMemoryData, toXML
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

ThemeUnique

public ThemeUnique()
默认构造函数,构造一个新的 ThemeUnique 对象。


ThemeUnique

public ThemeUnique(ThemeUnique themeUnique)
拷贝构造函数,根据给定的 ThemeUnique 对象构造一个与其完全相同的新对象。

参数:
themeUnique - 给定的单值专题图对象。
方法详细信息

getItem

public ThemeUniqueItem getItem(int index)
返回指定序号的单值专题图子项。

参数:
index - 指定的单值专题图子项的序号。
返回:
指定序号的单值专题图子项。

getCount

public int getCount()
返回单值专题图子项个数。

返回:
单值专题图子项个数。
默认值:
默认值为 0。

getUniqueExpression

public java.lang.String getUniqueExpression()
单值专题图字段表达式。用于制作单值专题图的字段或字段表达式。该字段可以为要素的某一属性(如地质图中的年代或成份),其值的数据类型可以为数值型或字符型。

返回:
单值专题图字段表达式。
默认值:
默认值为一个空字符串。

setUniqueExpression

public void setUniqueExpression(java.lang.String value)
设置单值专题图字段表达式。用于制作单值专题图的字段或字段表达式。该字段可以为要素的某一属性(如地质图中的年代或成份),其值的数据类型可以为数值型或字符型。

参数:
value - 指定单值专题图字段表达式。

getDefaultStyle

public GeoStyle getDefaultStyle()
返回单值专题图的默认风格。对于那些未在单值专题图子项之列的对象使用该风格显示。如未设置,则使用图层默认风格显示。

返回:
单值专题图的默认风格。
默认值:
默认值为{FillBackColor=Color [A=255, R=255, G=255, B=255],FillForeColor=Color [A=255, R=189, G=235, B=255],FillGradientAngle=0,FillGradientMode=None,FillGradientOffsetRatioX=0,FillGradientOffsetRatioY=0,FillOpaqueRate=100,FillSymbolID=0,LineColor=Color [A=255, R=0, G=0, B=0],LineSymbolID=0,LineWidth=0.1,MarkerAngle=0,MarkerSize={Width=2.4,Height=-1},MarkerSymbolID=0}。

setDefaultStyle

public void setDefaultStyle(GeoStyle style)
设置单值专题图的默认风格。对于那些未在单值专题图子项之列的对象使用该风格显示。如未设置,则使用图层默认风格显示。

参数:
style - 指定单值专题图的默认风格。

add

public int add(ThemeUniqueItem item)
添加一个单值专题图子项到单值专题图子项列表中。

参数:
item - 将被添加的单值专题图子项。
返回:
如果添加成功返回被添加子项在序列中的序号,否则返回 -1。
示例:
以下代码示范了如何添加单值专题图子项到单值专题图中。
 public int addTest() {
        // 实例化单值专题图子项,并进行对象设置
        ThemeUnique theme = new ThemeUnique();
        ThemeUniqueItem item = new ThemeUniqueItem();
        item.setCaption("Caption");
        item.setVisible(false);
        item.setUnique("Unique");

        // 添加单值专题图子项
        theme.add(item);

        // 返回单值专题图子项个数
        return (theme.getCount());

    }

insert

public boolean insert(int index,
                      ThemeUniqueItem item)
将给定的单值专题图子项插入到指定序号的位置。

参数:
index - 指定的单值专题图子项序列的序号。
item - 将被插入的单值专题图子项。
返回:
如果插入成功返回 true,否则返回 false。

remove

public boolean remove(int index)
删除一个指定序号的单值专题图子项。

参数:
index - 指定的将被删除的单值专题图子项序列的序号。
返回:
如果删除成功,返回 true;否则返回 false。

clear

public void clear()
删除所有单值专题图子项。执行该方法后,所有的单值专题图子项都被释放,不再可用。


makeDefault

public static ThemeUnique makeDefault(DatasetVector dataset,
                                      java.lang.String uniqueExpression)
根据给定的矢量数据集和单值专题图字段表达式生成默认的单值专题图。

参数:
dataset - 给定的矢量数据集。
uniqueExpression - 单值专题图字段表达式。
返回:
根据参数构造得到一个新的单值专题图类的对象实例。

makeDefault

public static ThemeUnique makeDefault(DatasetVector dataset,
                                      java.lang.String uniqueExpression,
                                      ColorGradientType colorGradientType)
根据给定的矢量数据集、单值专题图字段表达式和颜色渐变模式生成默认的单值专题图。

参数:
dataset - 给定的矢量数据集。
uniqueExpression - 单值专题图字段表达式。
colorGradientType - 颜色渐变模式。
返回:
根据参数构造得到一个新的单值专题图类的对象实例。
示例:
以下示例根据给定的矢量数据集、单值专题图字段表达式和颜色渐变模式生成默认的单值专题图。
 public void makeDefaultTest() {
        // 打开数据源,得到给定World名称的数据集datasetVector
        Workspace workspace = new Workspace();
        String path = "G:/World/World.udb";
        DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo(path, "World", "");
        Datasource datasource = workspace.getDatasources().open(datasourceConnectionInfo);
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("World");

        // 生成默认的单值专题图
        ThemeUnique theme = new ThemeUnique();
        theme = ThemeUnique.makeDefault(datasetVector, "SmID",ColorGradientType.YELLOWRED);

        // 添加到图层显示
        MapControl mapControl = new MapControl(workspace);
        Layer layer = mapControl.getMap().getLayers().add(datasetVector, theme, true);
        mapControl.getMap().refresh();

        // 释放资源
        mapControl.dispose();
        workspace.dispose();

    }

makeDefault

public static ThemeUnique makeDefault(DatasetVector dataset,
                                      java.lang.String uniqueExpression,
                                      ColorGradientType colorGradientType,
                                      JoinItems joinItems)
根据给定的矢量数据集、单值专题图字段表达式、颜色渐变模式和外部表连接项生成默认的单值专题图。

注意:通过连接外部表的方式制作专题图时,对于 UDB 数据源,连接类型不支持内连接,即不支持 JoinType.INNERJOIN 连接类型。

参数:
dataset - 给定的矢量数据集。
uniqueExpression - 单值专题图字段表达式。
colorGradientType - 颜色渐变模式。
joinItems - 外部表连接项。

如果要将制作的专题图添加到地图中,作为地图中的图层,需要对该专题图图层进行以下设置,通过该专题图图层对应的 Layer 对象的 setDisplayFilter 方法,该方法中的 queryParameter 参数为 QueryParameter 对象,这里需要通过 QueryParameter 对象的 setJoinItems 方法,将专题的外部表连接项(即当前方法的 joinItems参数)指定给该专题图图层对应的 Layer 对象,这样所做的专题图在地图中显示才正确。

返回:
根据参数构造得到一个新的单值专题图类的对象实例。

makeDefault

public static ThemeUnique makeDefault(DatasetVector dataset,
                                      java.lang.String colorField,
                                      Colors colors)
根据指定的面数据集、颜色字段名称、颜色生成默认的四色单值专题图。

四色单值专题图是指在一幅地图上,只用四种颜色就能使具有公共边的面对象着上不同的颜色。

生成四色单值专题图的输入数据必须满足,二维平面不存在交叉直线,只存在共点直线。

注意:对于面数据集复杂度低的情形下,采用四种颜色即可生成四色单值专题图;若面数据集复杂度高,则着色结果可能为五色。

参数:
dataset - 指定的面数据集。由于该构造函数将修改面数据集的属性信息,因此,需保证 dataset 为非只读。
colorField - 着色字段的名称。着色字段必须为整型字段。它可以为面数据集中已有属性字段,也可以是自定义的其它字段。若为已存在属性字段,需保证该字段类型为整型,系统将修改该字段的属性值,并分别赋值为1、2、3、4;若为自定义的其它字段,需保证字段名合法,则系统首先在面数据集中创建该字段,并分别赋值为1、2、3、4。由此,着色字段已分别赋值为1、2、3、4,代表着四种不同的颜色,根据该字段的值即可生成四色专题图。
colors - 用户传入的用来制作专题图的颜色。系统对传入颜色的数目不做规定,比如,用户只传入了一种颜色,则在生成专题图时,系统会自动补齐出图所需的颜色。
返回:
生成的四色单值专题图。

indexOf

public int indexOf(java.lang.String unique)
返回单值专题图中指定子项单值在当前序列中的序号。

参数:
unique - 给定的单值专题图子项单值。
返回:
专题图子项在序列中的序号值。如果该值不存在,就返回-1。

reverseStyle

public void reverseStyle()
对单值专题图中子项的风格进行反序显示。


dispose

public void dispose()
释放对象所占用的资源。调用该方法之后,此对象不再可用。


fromXML

public boolean fromXML(java.lang.String xml)
根据传入的 XML 字符串重新构造对象。

覆盖:
Theme 中的 fromXML
参数:
xml - 传入的 XML 字符串。
返回:
如果构造成功返回 true,否则返回 false。

toString

public java.lang.String toString()
从类 Theme 复制的描述
输出专题图格式化字符串。格式化字符串提供专题图的相关设置信息,与 XML 字符串不同的是,格式化字符串不可导入显示专题图,只用于提供专题图的相关信息。
  1. 对于栅格分段专题图,其格式为{Caption=”china”, Start=10 End=20, Visible=true?false, Style={linestyle=,markerstyle=,fillstyle=} };
  2. 对于栅格单值专题图,其格式为{Caption=”china”, Unique =20, Visible=true?false, Style={linestyle=,markerstyle=,fillstyle=} };
  3. 对于标签专题图,其格式为{Caption=”China”, Start=10 End=20, Visible=true, Style={name=,width=,height=,color=()} };
  4. 对于分段专题图,其格式为{Caption=”china”, Start=10 End=20, Visible=true?false, Style={linestyle=,markerstyle=,fillstyle=};
  5. 对于单值专题图,其格式为{Caption=”china”, Unique =20, Visible=true?false, Style={linestyle=,markerstyle=,fillstyle=} }。

指定者:
Theme 中的 toString
返回:
专题图的格式化字符串。

isDefaultStyleVisible

public boolean isDefaultStyleVisible()
返回单值专题图默认风格是否可见。

返回:
单值专题图默认风格是否可见。

setDefaultStyleVisible

public void setDefaultStyleVisible(boolean value)
设置单值专题图默认风格是否可见。

参数:
value - 单值专题图默认风格是否可见。

getOffsetX

public java.lang.String getOffsetX()
返回点、线、面图层制作的单值专题图中的对象相对于原来位置的水平偏移量。

偏移量的单位由 isOffsetFixed()的设置决定,参数为True表示采用设备单位,否则采用地理坐标单位。

返回:
点、线、面图层制作的单值专题图中的对象相对于原来位置的水平偏移量。

setOffsetX

public void setOffsetX(java.lang.String value)
设置点、线、面图层制作的单值专题图中的对象相对于原来位置的水平偏移量。

偏移量的单位由 isOffsetFixed()的设置决定,参数为True表示采用设备单位,否则采用地理坐标单位。

参数:
value - 点、线、面图层制作的单值专题图中的对象相对于原来位置的水平偏移量。
示例:
以下代码示范了如何设置单值专题图中对象的水平偏移量。
 public void OffsetXTest()
        {
          // 打开数据源,得到给定World名称的数据集datasetVector
        Workspace workspace = new Workspace();
        String path = "G:/World/World.udb";
        DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo(path, "World", "");
        Datasource datasource = workspace.getDatasources().open(datasourceConnectionInfo);
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("World");

        // 生成默认的单值专题图
        ThemeUnique theme = new ThemeUnique();
        theme = ThemeUnique.makeDefault(datasetVector, "SmID",ColorGradientType.YELLOWRED);

        //设置单值专题图中对象的水平偏移量
        theme.setOffsetX("10000");

        // 添加到图层显示
        MapControl mapControl = new MapControl(workspace);
        Layer layer = mapControl.getMap().getLayers().add(datasetVector, theme, true);
        mapControl.getMap().refresh();

        // 释放资源
        mapControl.dispose();
        workspace.dispose();

    }

getOffsetY

public java.lang.String getOffsetY()
返回点、线、面图层制作的单值专题图中的对象相对于原来位置的垂直偏移量。

偏移量的单位由 isOffsetFixed()的设置决定,参数为True表示采用设备单位,否则采用地理坐标单位。

返回:
点、线、面图层制作的单值专题图中的对象相对于原来位置的垂直偏移量。

setOffsetY

public void setOffsetY(java.lang.String value)
设置点、线、面图层制作的单值专题图中的对象相对于原来位置的垂直偏移量。

偏移量的单位由 isOffsetFixed()的设置决定,参数为True表示采用设备单位,否则采用地理坐标单位。

参数:
value - 点、线、面图层制作的单值专题图中的对象相对于原来位置的垂直偏移量。
示例:
以下代码示范了如何设置单值专题图中对象的垂直偏移量。
 public void OffsetYTest()
        {
          // 打开数据源,得到给定World名称的数据集datasetVector
        Workspace workspace = new Workspace();
        String path = "G:/World/World.udb";
        DatasourceConnectionInfo datasourceConnectionInfo = new DatasourceConnectionInfo(path, "World", "");
        Datasource datasource = workspace.getDatasources().open(datasourceConnectionInfo);
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get("World");

        // 生成默认的单值专题图
        ThemeUnique theme = new ThemeUnique();
        theme = ThemeUnique.makeDefault(datasetVector, "SmID",ColorGradientType.YELLOWRED);

        //设置单值专题图中对象的垂直偏移量
        theme.setOffsetY("10000");

        // 添加到图层显示
        MapControl mapControl = new MapControl(workspace);
        Layer layer = mapControl.getMap().getLayers().add(datasetVector, theme, true);
        mapControl.getMap().refresh();

        // 释放资源
        mapControl.dispose();
        workspace.dispose();

    }

isOffsetFixed

public boolean isOffsetFixed()
返回True表示采用设备单位,否则采用地理坐标单位。

返回:
是否固定偏移量。

setOffsetFixed

public void setOffsetFixed(boolean value)
参数为True表示采用设备单位,否则采用地理坐标单位。

参数:
value - 是否采用设备单位

setCustomMarkerSizeExpression

public void setCustomMarkerSizeExpression(java.lang.String value)
设置一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的大小,字段表达式中的字段必须为数值型字段。

通过该接口可以指定一个字段也可以指定一个字段表达式;还可以指定一个数值,此时所有专题图子项将以数值指定的大小统一显示。

该项设置仅对点单值专题图有效。

参数:
value - 返回一个字段表达式。可以指定一个字段也可以指定一个字段表达式;还可以指定一个数值,此时所有专题图子项将以数值指定的大小统一显示。

getCustomMarkerSizeExpression

public java.lang.String getCustomMarkerSizeExpression()
返回一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的大小,字段表达式中的字段必须为数值型字段。

通过该接口可以指定一个字段也可以指定一个字段表达式;还可以指定一个数值,此时所有专题图子项将以数值指定的大小统一显示。

该项设置仅对点单值专题图有效。

返回:
返回一个字段表达式。

getCustomMarkerAngleExpression

public java.lang.String getCustomMarkerAngleExpression()
返回一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的旋转角度,字段表达式中的字段必须为数值型字段。

通过该接口可以指定一个字段也可以指定一个字段表达式;还可以指定一个数值,此时所有专题图子项将以数值指定的角度统一进行旋转。

该项设置仅对点单值专题图有效。

返回:
返回一个字段表达式。

setCustomMarkerAngleExpression

public void setCustomMarkerAngleExpression(java.lang.String value)
设置一个字段表达式,该字段表达式用于控制对象对应的点单值题图中点符号的旋转角度,字段表达式中的字段必须为数值型字段。

通过该接口可以指定一个字段也可以指定一个字段表达式;还可以指定一个数值,此时所有专题图子项将以数值指定的角度统一进行旋转。

该项设置仅对点单值专题图有效。

参数:
value - 返回一个字段表达式。可以指定一个字段也可以指定一个字段表达式;还可以指定一个数值,此时所有专题图子项将以数值指定的角度统一进行旋转。