专题图图层 |
专题图图层,支持矢量图层的点密度专题图、等级符号专题图、统计专题图、标签专题图、分段专题图、单值专题图,栅格图层的分段专题图和单值专题图。专题图的展示可在主线程和监听器类中两种方式来实现。
点密度专题图。专题图效果在主线程中进行展示。
// 专题图结果
public ThemeResult result;
public void ThemeDotDensity() throws InterruptedException, ExecutionException {
// 定义点密度专题图
ThemeDotDensity theme = new ThemeDotDensity();
theme.dotExpression = "Pop_1994";
theme.value = 5000000;
ServerStyle dotStyle = new ServerStyle();
dotStyle.markerSize = 3;
dotStyle.markerSymbolID = 12;
theme.style = dotStyle;
// 定义专题图基数类参数
ThemeParameters themeParam = new ThemeParameters();
themeParam.themes = new Theme[] { theme };
themeParam.dataSourceNames = new String[] { "World" };
themeParam.datasetNames = new String[] { "Countries" };
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-world/rest/maps/World");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
// 判断专题图创建是否成功
if (result == null || result.resourceInfo == null || result.resourceInfo.newResourceID == null) {
return;
}
// 展示已创建的专题图
LayerView themeLayer = new LayerView(this,"http://MyServerIP:8090/iserver/services/map-world/rest/maps/World");
themeLayer.setTransparent(true);
themeLayer.setLayersID(result.resourceInfo.newResourceID);
// mapview中增加专题图图层
mapView.addLayer(themeLayer);
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}
等级符号专题图。专题图效果展示代码和点密度专题图一样,这里不重复列出。
// 专题图结果
public ThemeResult result;
public void ThemeGraduatedSymbol() throws InterruptedException, ExecutionException {
// 定义等级符号样式
ThemeGraduatedSymbolStyle graStyle = new ThemeGraduatedSymbolStyle();
ServerStyle positiveStyle = new ServerStyle();
positiveStyle.markerSize = 50;
positiveStyle.markerSymbolID = 0;
positiveStyle.lineColor = new ServerColor(255, 165, 0);
positiveStyle.fillBackColor = new ServerColor(255, 0, 0);
graStyle.positiveStyle = positiveStyle;
// 定义等级符号专题图
ThemeGraduatedSymbol theme = new ThemeGraduatedSymbol();
theme.baseValue = 3000000000000.00;
theme.expression = "SMAREA";
theme.graduatedMode = GraduatedMode.CONSTANT;
theme.flow =new ThemeFlow();
theme.flow.flowEnabled = true;
theme.style = graStyle;
// 定义专题图基数类参数
ThemeParameters themeParam = new ThemeParameters();
themeParam.themes = new Theme[] { theme };
themeParam.dataSourceNames = new String[] { "China400" };
themeParam.datasetNames = new String[] { "China_Province_R" };
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-china400/rest/maps/China");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}
统计专题图。专题图效果展示代码和点密度专题图一样,这里不重复列出。
// 专题图结果
public ThemeResult result;
public void ThemeGraph() throws InterruptedException, ExecutionException {
// 定义统计专题图子项1
ThemeGraphItem item1 = new ThemeGraphItem();
item1.caption = "1992-1995人口增长率";
item1.graphExpression = "Pop_Rate95";
ServerStyle style1 = new ServerStyle();
style1.fillForeColor = new ServerColor();
style1.fillForeColor.blue = 234;
style1.fillForeColor.green = 73;
style1.fillForeColor.red = 92;
item1.uniformStyle = style1;
// 定义统计专题图子项2
ThemeGraphItem item2 = new ThemeGraphItem();
item2.caption = "1992-1995人口增长率";
item2.graphExpression = "Pop_Rate99";
ServerStyle style2 = new ServerStyle();
style2.fillForeColor = new ServerColor();
style2.fillForeColor.blue = 240;
style2.fillForeColor.green = 111;
style2.fillForeColor.red = 211;
item2.uniformStyle = style2;
// 定义统计专题图
ThemeGraph theme = new ThemeGraph();
theme.items = new ThemeGraphItem[] { item1, item2 };
theme.barWidth = 0.05;
theme.graduatedMode = GraduatedMode.SQUAREROOT;
theme.graphAxes = new ThemeGraphAxes();
theme.graphAxes.axesDisplayed = true;
theme.graphSize = new ThemeGraphSize();
theme.graphSize.maxGraphSize = 1;
theme.graphSize.minGraphSize = 0.35;
theme.graphText = new ThemeGraphText();
theme.graphText.graphTextDisplayed = true;
theme.graphText.graphTextFormat = ThemeGraphTextFormat.VALUE;
theme.graphType = ThemeGraphType.BAR3D;
// 定义专题图基数类参数
ThemeParameters themeParam = new ThemeParameters();
themeParam.themes = new Theme[] { theme };
themeParam.dataSourceNames = new String[] { "Jingjin" };
themeParam.datasetNames = new String[] { "BaseMap_R" };
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-jingjin/rest/maps/京津地区土地利用现状图");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}
标签专题图。专题图效果展示代码和点密度专题图一样,这里不重复列出。
// 专题图结果
public ThemeResult result;
public void ThemeLabel() throws InterruptedException, ExecutionException {
//定义标签专题图
ThemeLabel themelabel= new ThemeLabel();
themelabel.text = new ThemeLabelText();
themelabel.text.uniformStyle = new ServerTextStyle();
themelabel.text.uniformStyle.align = TextAlignment.MIDDLECENTER;
themelabel.text.uniformStyle.foreColor = new ServerColor(29, 169, 29);
themelabel.text.uniformStyle.fontHeight = 4;
themelabel.text.uniformStyle.fontName = "宋体";
themelabel.text.uniformStyle.fontWeight = 10;
themelabel.labelExpression = "Capital";
themelabel.labelOverLengthMode = LabelOverLengthMode.NONE;
// 定义专题图基数类参数
ThemeParameters themeParam= new ThemeParameters();
themeParam.themes = new Theme[]{themelabel};
themeParam.dataSourceNames = new String[]{"World"};
themeParam.datasetNames =new String[]{"Countries"};
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-world/rest/maps/World");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}
分段专题图。专题图效果展示代码和点密度专题图一样,这里不重复列出。
// 专题图结果
public ThemeResult result;
public void ThemeRange() throws InterruptedException, ExecutionException {
// 定义分段专题图子项1
ThemeRangeItem item1 = new ThemeRangeItem();
item1.start = 0;
item1.end = 500000000000.0;
ServerStyle style1 = new ServerStyle();
style1.fillForeColor = new ServerColor(137, 203, 187);
style1.lineColor = new ServerColor(0, 0, 0);
style1.lineWidth = 0.1;
item1.style = style1;
// 定义分段专题图子项2
ThemeRangeItem item2 = new ThemeRangeItem();
item2.start = 500000000000.0;
item2.end = 1000000000000.0;
ServerStyle style2 = new ServerStyle();
style2.fillForeColor = new ServerColor(233, 235, 171);
style2.lineColor = new ServerColor(0, 0, 0);
style2.lineWidth = 0.1;
item2.style = style2;
// 定义分段专题图子项3
ThemeRangeItem item3 = new ThemeRangeItem();
item3.start = 1000000000000.0;
item3.end = 3000000000000.0;
ServerStyle style3 = new ServerStyle();
style3.fillForeColor = new ServerColor(135, 157, 157);
style3.lineColor = new ServerColor(0, 0, 0);
style3.lineWidth = 0.1;
item3.style = style3;
// 定义分段专题图
ThemeRange theme = new ThemeRange();
theme.items = new ThemeRangeItem[] { item1, item2, item3 };
theme.rangeExpression = "SMAREA";
theme.rangeMode = RangeMode.EQUALINTERVAL;
// 定义专题图基数类参数
ThemeParameters themeParam = new ThemeParameters();
themeParam.themes = new Theme[] { theme };
themeParam.dataSourceNames = new String[] { "China400" };
themeParam.datasetNames = new String[] { "China_Province_R" };
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-china400/rest/maps/China");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}
单值专题图。专题图效果展示代码和点密度专题图一样,这里不重复列出。
// 专题图结果
public ThemeResult result;
public void ThemeUnique() throws InterruptedException, ExecutionException {
// 风格1
ServerStyle style1 = new ServerStyle();
style1.fillForeColor = new ServerColor(248, 203, 249);
style1.lineColor = new ServerColor(0, 0, 0);
style1.lineWidth = 0.1;
// 风格2
ServerStyle style2 = new ServerStyle();
style2.fillForeColor = new ServerColor(196, 255, 189);
style2.lineColor = new ServerColor(0, 0, 0);
style2.lineWidth = 0.1;
// 子项1
ThemeUniqueItem item1 = new ThemeUniqueItem();
item1.unique = "黑龙江省";
item1.style = style1;
// 子项2
ThemeUniqueItem item2 = new ThemeUniqueItem();
item2.unique = "北京市";
item2.style = style2;
// 定义单值专题图
ThemeUnique theme = new ThemeUnique();
theme.items = new ThemeUniqueItem[] { item1, item2 };
theme.uniqueExpression = "Name";
theme.defaultStyle = style1;
// 定义专题图基数类参数
ThemeParameters themeParam = new ThemeParameters();
themeParam.themes = new Theme[] { theme };
themeParam.dataSourceNames = new String[] { "China400" };
themeParam.datasetNames = new String[] { "China_Province_R" };
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-china400/rest/maps/China");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}
栅格分段专题图。专题图效果展示代码和点密度专题图一样,这里不重复列出。
// 专题图结果
public ThemeResult result;
public void ThemeGridRange() throws InterruptedException, ExecutionException {
// 定义栅格分段专题图子项1
ThemeGridRangeItem item1 = new ThemeGridRangeItem();
item1.start = -4;
item1.end = 120;
item1.color = new ServerColor(198, 244, 240);
// 定义栅格分段专题图子项2
ThemeGridRangeItem item2 = new ThemeGridRangeItem();
item2.start = 120;
item2.end = 240;
item2.color = new ServerColor(176, 244, 188);
// 定义栅格分段专题图
ThemeGridRange theme = new ThemeGridRange();
theme.reverseColor = false;
theme.rangeMode = RangeMode.EQUALINTERVAL;
theme.items = new ThemeGridRangeItem[] { item1, item2 };
// 定义专题图基数类参数
ThemeParameters themeParam = new ThemeParameters();
themeParam.themes = new Theme[] { theme };
themeParam.dataSourceNames = new String[] { "Jingjin" };
themeParam.datasetNames = new String[] { "JingjinTerrain" };
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-jingjin/rest/maps/京津地区人口分布图_专题图");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}
栅格单值专题图。专题图效果展示代码和点密度专题图一样,这里不重复列出。
// 专题图结果
public ThemeResult result;
public void ThemeGridUnique() throws InterruptedException, ExecutionException {
// 定义栅格单值专题图子项1
ThemeGridUniqueItem item1 = new ThemeGridUniqueItem();
item1.caption = "子项1";
item1.unique = 0; // 栅格值
item1.color = new ServerColor(198, 244, 240);
// 定义栅格单值专题图子项2
ThemeGridUniqueItem item2 = new ThemeGridUniqueItem();
item1.caption = "子项2";
item1.unique = 100; // 栅格值
item2.color = new ServerColor(176, 244, 188);
// 定义栅格单值专题图
ThemeGridUnique theme = new ThemeGridUnique();
theme.defaultcolor = new ServerColor(0, 0, 0);
theme.items = new ThemeGridUniqueItem[] { item1, item2 };
// 定义专题图基数类参数
ThemeParameters themeParam = new ThemeParameters();
themeParam.themes = new Theme[] { theme };
themeParam.dataSourceNames = new String[] { "Jingjin" };
themeParam.datasetNames = new String[] { "JingjinTerrain" };
ThemeService themeservice = new ThemeService("http://MyServerIP:8090/iserver/services/map-jingjin/rest/maps/京津地区土地利用现状图");
MyThemeServiceEventListener listener = new MyThemeServiceEventListener();
// 和服务端异步通讯
themeservice.process(themeParam, listener);
// 等待监听器执行完毕
try {
listener.waitUntilProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听器类
class MyThemeServiceEventListener extends ThemeServiceEventListener {
@Override
public void onThemeServiceStatusChanged(Object sourceObject, EventStatus status) {
// 返回结果
result = (ThemeResult) sourceObject;
}
}