动态图表
独立于地图的图表,支持饼状图、柱状图、折线图,点击图表中的对应项,地图自动居中高亮显示该项对应的地图内容。
创建图表需要的库包括:com.supermap.data.jar、com.supermap.mapping.jar、com.github.mikephil.charts.jar、chartengine.jar、classes.jar、libimb2d.so。
主要使用的类和接口如下表:
类 | 方法 |
---|---|
Recordset | seekID()、getFieldValue() |
PieChartData | setColor()、setGeoID()、setLabel()、setValue() |
PieChart | addData()、setChartTitle()、reLayout() |
lineChartData | setColor()、setGeoID()、setLabel() |
LineChart | addData()、addXLabel()、reLayout() |
LegendView | setColumnWidth()、setNumColumns() |
创建图表的一般流程包括:
- 设置图表参数;
- 添加图表;
- 设置图例和标题;
- 刷新图表。
饼状图
/**---------数据准备---------**/
//获取创建图表图层对应数据集
DatasetVector datasetVector = (DatasetVector)m_layer.getDataset();
Recordset recordset = datasetVector.getRecordset(false, CursorType.STATIC);//获取记录集
int [] IDs = {30, 22, 29, 27};//北京、天津、上海、重庆在数据中的ID
int [] colors = {Color.rgb(192, 255, 140), Color.rgb(255, 247, 140), Color.rgb(255, 208, 140), Color.rgb(140, 234, 255), Color.rgb(255, 140, 157)};//设置显示的颜色
String [] labels = {"北京市", "天津市", "上海市", "重庆市"};//图表标签值
String field_HousePrice = "House_Ave_Price_2012";//数据中属性名,表示房屋2012年均价
for(int i=0; i < IDs.length; i++){
boolean isTrue = recordset.seekID(IDs[i]);//通过ID获取对应的记录
if(isTrue){
Object value = recordset.getFieldValue(field_HousePrice); //获取对应的属性值
/**---------设置图表参数---------**/
PieChartData data = new PieChartData();
data.setColor(colors[i]); //设置图标子项的颜色
data.setGeoID(IDs[i]); //设置图表子项关系的几何对象SmID, 和图表所关联的图层数据集对应
data.setLabel(labels[i]); //设置图表子项的标签
data.setValue((Integer)value); //设置图表子项的数值,每一个饼状图的子项都只有一个数值
/**---------添加图表数据---------**/
((PieChart)m_pieChart).addData(data); //添加图表数据
}
}
/**---------设置图例和标题---------**/
LegendView legendView = m_pieChart.getLegendView();//获取图例
legendView.setColumnWidth(legendView.getColumnWidth() + 50); //设置图例子项宽度
legendView.setNumColumns(5);
m_pieChart.setChartTitle("2012年直辖市平均房价对比"); //设置图表标题
/**---------刷新图表---------**/
m_pieChart.reLayout(); //修改布局后需调用该方法重新布局
折线图
/**---------数据准备---------**/
//获取用来创建图表的图层所对应的数据集
DatasetVector datasetVector = (DatasetVector)m_layer.getDataset();
//获取记录集
Recordset recordset = datasetVector.getRecordset(false, CursorType.STATIC);
//北京、天津、上海、重庆在数据中的ID
int [] IDs = {30, 22, 29, 27};
//设置显示的颜色
int [] colors = {
Color.rgb(192, 255, 140), Color.rgb(255, 247, 140), Color.rgb(255, 208, 140),Color.rgb(140, 234, 255), Color.rgb(255, 140, 157)};
String [] labels = {"北京市", "天津市", "上海市", "重庆市"};//图表标签值
String field_PoP = "Popu_";
int [] years = {2002, 2010, 2011, 2012};
boolean isTrue = false;
for(int i=0; i < IDs.length; i++){
isTrue = recordset.seekID(IDs[i]); //通过ID获取对应的记录
if(isTrue){
/**---------设置图表参数---------**/
LineChartData lineChartData = new LineChartData();
lineChartData.setColor(colors[i]); //设置图标子项的颜色
lineChartData.setGeoID(IDs[i]); //设置图表子项关系的几何对象SmID
lineChartData.setLabel(labels[i]); //设置图表子项的标签
for(int j=0; j < years.length; j++){
Object value = recordset.getFieldValue(field_PoP + years[j]); //获取对应的属性值
lineChartData.addValue((Integer) value); //添加数值
}
/**---------添加图表数据---------**/
((LineChart)m_lineChart).addData(lineChartData); //添加图表数据
}
}
for(int i=0; i < years.length; i++){
((LineChart)m_lineChart).addXLabel(years[i]+""); //添加X轴标签
}
/**---------设置图例和标题---------**/
m_lineChart.setChartTitle("直辖市人口趋势对比"); //设置图表标题
LegendView legendView = m_lineChart.getLegendView(); //获取图例LegendView
legendView.setColumnWidth(legendView.getColumnWidth() + 30);//设置图例子项宽度
legendView.setNumColumns(5);
/**---------刷新图表---------**/
m_lineChart.reLayout();
柱状图
/**---------数据准备---------**/
//获取用来创建图表的图层所对应的数据集
DatasetVector datasetVector = (DatasetVector)m_layer.getDataset();
//获取记录集
Recordset recordset = datasetVector.getRecordset(false, CursorType.STATIC);
//北京、天津、上海、重庆在数据中的ID
int [] IDs = {30, 22, 29, 27};
//柱状图显示的颜色
int [] colors = {
Color.rgb(192, 255, 140), Color.rgb(255, 247, 140)};
String field_University = "university_num_2012";
String field_Museum = "museum_num_2012";
String field_ProvinceName = "省级行政单位";
boolean isTrue = false;
for(int i=0; i < IDs.length; i++){
isTrue = recordset.seekID(IDs[i]); //通过ID获取对应的记录
if(isTrue){
/**---------设置图表参数---------**/
BarChartData barChartData = new BarChartData();
Object name = recordset.getFieldValue(field_ProvinceName);
if(name == null){
recordset.moveNext();
continue;
}
Object value = recordset.getFieldValue(field_University);
if(value == null){
recordset.moveNext();
continue;
}
/**---------添加图表数据---------**/
barChartData.addData("大学", colors[0], (Short) value);
value = recordset.getFieldValue(field_Museum);
if(value == null){
recordset.moveNext();
continue;
}
barChartData.setGeoID(IDs[i]);
barChartData.addData("图书馆", colors[1], (Short) value);
((BarChart) m_barChart).addData(barChartData);
((BarChart)m_barChart).addXLabel((String)name);
}
}
/**---------设置图例和标题---------**/
m_barChart.setChartTitle("2012年直辖市大学和图书馆数量对比");//设置图表标题
LegendView legendView = m_barChart.getLegendView();//获取图例LegendView
//设置图例子项宽度
legendView.setColumnWidth(legendView.getColumnWidth() + 30); legendView.setNumColumns(5);
/**---------刷新图表---------**/
m_barChart.reLayout();
以上动态图表创建流程可参照示例代码DynamicChart