专题图

创建专题图需要的库包括:com.supermap.data.jar、com.supermap.mapping.jar、libimb2d.so。

主要使用的类和接口如下表:

方法
ThemeLabel setLabelExpression()、setRangeExpression()、addToHead()
ThemeLabelItem setCaption()、setEnd()、setStart()、setVisible()
ThemeRange setRangeExpression()
ThemeRangeItem setCaption() 、setEnd()、setStart()、setVisible()、setStyle()
ThemeUnique makeDefault()

分段专题图

ThemeRange themeRangeMap = new ThemeRange();
themeRangeMap.setRangeExpression("Pop_1994");

// 填充样式设置
GeoStyle geoStyle = new GeoStyle();
geoStyle.setLineColor(new Color(255,255,255));
geoStyle.setLineWidth(0.3);

// 人口小于一百万的分段专题图子项的设置
ThemeRangeItem themeRangeItem1 = new ThemeRangeItem();
themeRangeItem1.setCaption("小于一百万");
themeRangeItem1.setEnd(1000000);
themeRangeItem1.setStart(0);
themeRangeItem1.setVisible(true);
geoStyle.setFillForeColor(new Color(209, 182, 210));
themeRangeItem1.setStyle(geoStyle);

// 人口大于一百万的分段专题图子项的设置
ThemeRangeItem themeRangeItem2 = new ThemeRangeItem();
themeRangeItem2.setCaption("大于一百万");
themeRangeItem2.setEnd(10000000);
themeRangeItem2.setStart(1000000);
themeRangeItem2.setVisible(true);
geoStyle.setFillForeColor(new Color(205, 167, 183));
themeRangeItem2.setStyle(geoStyle);

// 人口大于一千万的分段专题图子项的设置
ThemeRangeItem themeRangeItem3 = new ThemeRangeItem();
themeRangeItem3.setCaption("大于一千万");
themeRangeItem3.setEnd(100000000);
themeRangeItem3.setStart(10000000);
themeRangeItem3.setVisible(true);
geoStyle.setFillForeColor(new Color(183, 128, 151));
themeRangeItem3.setStyle(geoStyle);

// 人口大于一亿的分段专题图子项的设置
ThemeRangeItem themeRangeItem4 = new ThemeRangeItem();
themeRangeItem4.setCaption("大于一亿");
themeRangeItem4.setEnd(1000000000);
themeRangeItem4.setStart(100000000);
themeRangeItem4.setVisible(true);
geoStyle.setFillForeColor(new Color(164, 97, 136));
themeRangeItem4.setStyle(geoStyle);

// 人口大于十二亿的分段专题图子项的设置
ThemeRangeItem themeRangeItem5 = new ThemeRangeItem();
themeRangeItem5.setCaption("大于十亿");
themeRangeItem5.setEnd(Double.MAX_VALUE);
themeRangeItem5.setStart(1000000000);
themeRangeItem5.setVisible(true);
geoStyle.setFillForeColor(new Color(94, 53, 77));
themeRangeItem5.setStyle(geoStyle);

// 添加专题图子项到分段专题图对象中
themeRangeMap.addToHead(themeRangeItem1);
themeRangeMap.addToTail(themeRangeItem2);
themeRangeMap.addToTail(themeRangeItem3);
themeRangeMap.addToTail(themeRangeItem4);
themeRangeMap.addToTail(themeRangeItem5);

// 显示
Dataset dataset = m_woWorkspace.getDatasources().get(0).getDatasets().get("Countries");
m_mapControl.getMap().getLayers().add(dataset,themeRangeMap, true);
m_mapControl.getMap().refresh();

单值专题图

ThemeUnique theme = new ThemeUnique();
// 将得到的专题图添加到地图
Dataset dataset = m_woWorkspace.getDatasources().get(0).getDatasets().get("Countries");
theme = ThemeUnique.makeDefault((DatasetVector)dataset, "SmID=1 OR SmID=247",ColorGradientType.YELLOWRED);//生成单值专题图
// 设置各个子项显示风格
int nCount = theme.getCount();
for (int i = 0; i < nCount; i++) {
  if(i==0){
    ThemeUniqueItem Item = theme.getItem(i);
    Item.getStyle().setLineColor(new Color(255, 0, 0));
  }
  if(i==1){
    ThemeUniqueItem Item = theme.getItem(i);
    Item.getStyle().setLineColor(new Color(0, 0, 255));
  }
}
//添加专题图层到地图
m_mapControl.getMap().getLayers().add(dataset,theme, true);
m_mapControl.getMap().refresh();

标签专题图

ThemeLabel themeLabelMap = new ThemeLabel();
themeLabelMap.setLabelExpression("Country");
themeLabelMap.setRangeExpression("Pop_1994");

// 为标签专题图的标签设置统一样式
ThemeLabelItem themeLabelItem1 = new ThemeLabelItem();
themeLabelItem1.setVisible(true);
TextStyle textStyle1 = new TextStyle();
textStyle1.setForeColor(new Color(255, 10, 10));
textStyle1.setFontName("宋体");
themeLabelItem1.setStyle(textStyle1);

// 添加标签专题图子项到标签专题图对象中
themeLabelMap.addToHead(themeLabelItem1);

Dataset dataset =   m_woWorkspace.getDatasources().get(0).getDatasets().get("Countries");
if (dataset != null) {		        m_mapControl.getMap().getLayers().add(dataset,themeLabelMap, true);
}  
m_mapControl.getMap().refresh();

以上专题图创建流程可参照示例代码theme