专题图
创建专题图需要的库包括: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