作者:dongyx
前言
一场突发的新型冠状肺炎让大家过了一个“宅”年,疫情的发展牵动着全国上下亿万国民的心,对各地政府、各行各业带来巨大的压力与挑战。病毒是无情的,但人是有情的,人心是暖的。下面小编将用SuperMap iMobile for Android制作疫情app,直观展示了全国各省市感染人数以及治愈率。
数据准备
1.全国行政区域矢量数据和各省疫情数据
全国行政区域矢量数据可以使用SuperMap iDesktop软件提供的示范数据China100中获取,疫情数据使用支付宝App提供的疫情数据。
2.全国各省市行政区域矢量图和地市级疫情数据
各省市行政区域数据是在csdn下载的网友分享的数据,数据地址:疫情数据使用支付宝App提供的疫情数据。
下载后的数据集可能存在坐标系不一致,需要通过投影转换将数据投影到同一坐标系,便于地图的叠加。
地图制作
制作一幅能直观展示的地图当然少不了专题图的制作,结合本次用到的产品我们可以从SuperMap iDesktop桌面软件中制作专题图,也可以用SuperMap iMobile for Android使用代码动态生成专题图。下面就简单介绍一下从桌面软件中如何制作专题图:
疫情app所呈现的内容主要用到了单值专题图、分段专题图、标签专题图。也可以根据自己的需求使用热力图、聚合图等可视化专题图。全国确诊数量图、死亡人数和治愈率都是采用分段专题图,各省市区域地图采用单值专题图,再根据区域名称、特征字段制作的标签专题图,能直观显示该区域的感染人数、死亡人数和治愈率。制作方法就不详细说明,可以参考培训视频:http://v.qq.com/page/p/w/x/p03936jfqwx.html效果图如下:
Java代码如下:
radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton radio_button = (RadioButton)findViewById(checkedId);
String text = (String) radio_button.getText();
if(text.equals("全国确诊人数")){
m_mapcontrol.getMap().close();
m_mapcontrol2.getMap().close();
m_mapcontrol.getMap().open("中国确诊");
m_mapcontrol.setAction(Action.SELECT);
m_mapcontrol.getMap().getLayers().get(2).setSelectable(true);
m_mapcontrol.getMap().getLayers().get(1).setSelectable(false);
m_mapcontrol.getMap().viewEntire();
m_mapcontrol.getMap().refresh();
}
else if(text.equals("全国死亡人数")){
m_mapcontrol.getMap().close();
m_mapcontrol2.getMap().close();
m_mapcontrol.getMap().open("中国死亡");
m_mapcontrol.setAction(Action.SELECT);
m_mapcontrol.getMap().getLayers().get(2).setSelectable(true);
m_mapcontrol.getMap().getLayers().get(1).setSelectable(false);
m_mapcontrol.getMap().viewEntire();
m_mapcontrol.getMap().refresh();
}
else if(text.equals("全国治愈人数")){
m_mapcontrol.getMap().close();
m_mapcontrol2.getMap().close();
m_mapcontrol.getMap().open("中国治愈率");
m_mapcontrol.setAction(Action.SELECT);
m_mapcontrol.getMap().getLayers().get(2).setSelectable(true);
m_mapcontrol.getMap().getLayers().get(1).setSelectable(false);
m_mapcontrol.getMap().viewEntire();
m_mapcontrol.getMap().refresh();
}
}
});
4.图表
疫情app还专门增加了图标元素,比如柱状图,可以直接看出哪个省份确诊人数最多,还能和地图进行关联,选择地图中的元素,图表中会高亮显示该区域所表示的值。移动端提供了柱状图、折线图、饼状图和仪表盘四种图表,下面介绍一下柱状图的代码:
布局文件:
Java代码:
//获取用来创建图表的图层所对应的数据集
DatasetVector datasetVector = (DatasetVector)m_layer.getDataset();
//获取记录集
Recordset recordset = datasetVector.getRecordset(false, CursorType.STATIC);
//柱状图显示的颜色
int [] colors = {
Color.rgb(192, 255, 140)};
String field_Museum = "确诊";
String field_ProvinceName = "name";
boolean isTrue = false;
for(int i=1; i<recordset.getRecordCount(); i++){
isTrue = recordset.seekID(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_Museum);
if(value ==null){
recordset.moveNext();
continue;
}
long value1 = (long)value;
double a = value1/1;
barChartData.addData("确诊人数", colors[0], a);
barChartData.setGeoID(i);
((BarChart) m_barChart).addData(barChartData);
((BarChart)m_barChart).addXLabel((String)name);
}
}
m_barChart.setChartTitle("全国新冠状病毒确诊人数"); //设置图表标题
com.supermap.mapping.imChart.LegendView legendView = m_barChart.getLegendView(); //获取图例LegendView
legendView.setColumnWidth(legendView.getColumnWidth() + 30); //设置图例子项宽度
legendView.setNumColumns(5);
m_barChart.reLayout();
recordset.close(); //关闭记录集
recordset.dispose();//释放记录集所占资源
疫情App截图:
工程源码下载地址:链接:https://pan.baidu.com/s/15iX1Vxm03vU1DSfvS9cK8g
提取码:xkes
作者:supermapsupport