动态图表

独立于地图的图表,支持饼状图、柱状图、折线图,点击图表中的对应项,地图自动居中高亮显示该项对应的地图内容。

创建图表需要的库包括: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()

创建图表的一般流程包括:

  1. 设置图表参数;
  2. 添加图表;
  3. 设置图例和标题;
  4. 刷新图表。

饼状图

/**---------数据准备---------**/
//获取创建图表图层对应数据集
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