Soap请求获取指定城市的天气情况并在天地图API Map中显示

来源:互联网 发布:java命令行参数args 编辑:程序博客网 时间:2024/05/01 11:41

1.进入新的公司,作为内部的评测,留给了我这个需求;

有这么一个需求

ws地址:http://218.60.147.62/aqizx_ws/webservice/AndroidWebService.asmx
方法名: selectAirStationByCityName
命名空间:http://tempuri.org/ 
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);
        }
将经纬度设置到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);


相关连接:1.http://218.60.147.62/aqizx_ws/webservice/AndroidWebService.asmx?op=selectAirStationByCityName
2.http://api.tianditu.com/api-new/home.html

0 0
原创粉丝点击