1.进入新的公司,作为内部的评测,留给了我这个需求;
有这么一个需求
ws地址:
http://218.60.147.62/aqizx_ws/webservice/AndroidWebService.asmx
方法名: selectAirStationByCityName
命名空间:
http://tempuri.org/
CityName 传“沈阳”
通过这个方法可以获取到沈阳市的空气自动站数据 ;
方法名: selectAirStationByCityName
命名空间:
CityName 传“沈阳”
通过这个方法可以获取到沈阳市的空气自动站数据 ;
现在使用天地图(tianditu.com) 把这些信息在地图上展示出来
2.之前做过类似的调用腾讯新闻接口做类似头条的Demo,只是当时是http请求;
度娘了一下Ksoap-Android请求框架和天地图的API;
3.大约的思路是:
Start页面留出一个文本框和按钮(期初想做基础数据+二级Spinner联调的城市选择,后来电脑问题很多浪费了蛮多的时间),用Asynctaskjinx
获取到的SoapObject结构是:
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <selectAirStationByCityNameResponse xmlns="http://tempuri.org/"> <selectAirStationByCityNameResult> <AirAutomaticStation> <BackGroundURL>string</BackGroundURL> <WeatherURL>string</WeatherURL> <ZhanID>string</ZhanID> <ZhanName>string</ZhanName> <SO2>string</SO2> <NOx>string</NOx> <NO>string</NO> <NO2>string</NO2> <PM10>string</PM10> <O3>string</O3> <O3_8>string</O3_8> <PH2_5>string</PH2_5> <CO>string</CO> <QuailtyZhiShu>int</QuailtyZhiShu> <QuailtyZhuangKuang>string</QuailtyZhuangKuang> <QuailtyLevel>string</QuailtyLevel> <ShouYaoWRW>string</ShouYaoWRW> <JingDu>string</JingDu> <WeiDu>string</WeiDu> <CityName>string</CityName> <KongQiQualityLevel>int</KongQiQualityLevel> <StationOrder>string</StationOrder> <Aqi>double</Aqi> <vel>double</vel> <date_Time>dateTime</date_Time> <IsIAQI>int</IsIAQI> <ZHZS>string</ZHZS> </AirAutomaticStation> <AirAutomaticStation> <BackGroundURL>string</BackGroundURL> <WeatherURL>string</WeatherURL> <ZhanID>string</ZhanID> <ZhanName>string</ZhanName> <SO2>string</SO2> <NOx>string</NOx> <NO>string</NO> <NO2>string</NO2> <PM10>string</PM10> <O3>string</O3> <O3_8>string</O3_8> <PH2_5>string</PH2_5> <CO>string</CO> <QuailtyZhiShu>int</QuailtyZhiShu> <QuailtyZhuangKuang>string</QuailtyZhuangKuang> <QuailtyLevel>string</QuailtyLevel> <ShouYaoWRW>string</ShouYaoWRW> <JingDu>string</JingDu> <WeiDu>string</WeiDu> <CityName>string</CityName> <KongQiQualityLevel>int</KongQiQualityLevel> <StationOrder>string</StationOrder> <Aqi>double</Aqi> <vel>double</vel> <date_Time>dateTime</date_Time> <IsIAQI>int</IsIAQI> <ZHZS>string</ZHZS> </AirAutomaticStation> </selectAirStationByCityNameResult> </selectAirStationByCityNameResponse> </soap:Body> </soap:Envelope>3.当获得回复后,跳转Map界面:
解析对象,获取经纬度,其他的信息装在List中;
String jinDu = "";
String weiDu = "";
List<String> showData;
if (getIntent().getSerializableExtra("data") != null) {
Map<String, String> map = new LogicService(aty).parseSoapObject((SoapObject) getIntent().getSerializableExtra("data"));
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
showData = new ArrayList<String>();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
if (entry.getKey().equals("JingDu")) {
jinDu = entry.getValue();
} else if (entry.getKey().equals("WeiDu")) {
weiDu = entry.getValue();
} else {
showData.add(entry.getKey() + " : " + entry.getValue());
}
}
setDataOnMap(jinDu, weiDu, showData);
}
String weiDu = "";
List<String> showData;
if (getIntent().getSerializableExtra("data") != null) {
Map<String, String> map = new LogicService(aty).parseSoapObject((SoapObject) getIntent().getSerializableExtra("data"));
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
showData = new ArrayList<String>();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
if (entry.getKey().equals("JingDu")) {
jinDu = entry.getValue();
} else if (entry.getKey().equals("WeiDu")) {
weiDu = entry.getValue();
} else {
showData.add(entry.getKey() + " : " + entry.getValue());
}
}
setDataOnMap(jinDu, weiDu, showData);
}
将经纬度设置到MapView控件中,将其他的文字以Adapter或直接截断分行的方式通过cavas 和paint 将文本以"覆盖物"的形式显示在地图上;
4. StringBuffer sb = new StringBuffer();
map_map_view.setBuiltInZoomControls(true);
MapController mMapController = map_map_view.getController();
GeoPoint point = new GeoPoint((int)(Integer.parseInt(jinDu) * 1E6),(int)(Integer.parseInt(weiDu) * 1E6));
mMapController.setCenter(point);
mMapController.setZoom(12);
Paint paint = new Paint();
Bitmap bitmap = Bitmap.createBitmap(
getWindowManager().getDefaultDisplay().getWidth(),
getWindowManager().getDefaultDisplay().getHeight(),
Bitmap.Config.ARGB_8888);//配置
if (showData != null) {
for (String str : showData) {
sb.append(str).append("/n");
}
}
OverView view = new OverView(aty, paint);
Canvas c = new Canvas();
c.drawText(sb.toString(), 0, 0, view.getmPaint());
map_map_view.getOverlays().add(view);
map_map_view.setBuiltInZoomControls(true);
MapController mMapController = map_map_view.getController();
GeoPoint point = new GeoPoint((int)(Integer.parseInt(jinDu) * 1E6),(int)(Integer.parseInt(weiDu) * 1E6));
mMapController.setCenter(point);
mMapController.setZoom(12);
Paint paint = new Paint();
Bitmap bitmap = Bitmap.createBitmap(
getWindowManager().getDefaultDisplay().getWidth(),
getWindowManager().getDefaultDisplay().getHeight(),
Bitmap.Config.ARGB_8888);//配置
if (showData != null) {
for (String str : showData) {
sb.append(str).append("/n");
}
}
OverView view = new OverView(aty, paint);
Canvas c = new Canvas();
c.drawText(sb.toString(), 0, 0, view.getmPaint());
map_map_view.getOverlays().add(view);
相关连接:1.http://218.60.147.62/aqizx_ws/webservice/AndroidWebService.asmx?op=selectAirStationByCityName
2.http://api.tianditu.com/api-new/home.html