如何在android中找到经度和纬度的城市温度?

时间:2011-08-12 09:56:40

标签: android

如何通过经度和纬度找到城市温度.... 有没有人知道我可以用来根据地理坐标显示天气的API或小部件的服务?

4 个答案:

答案 0 :(得分:26)

我们可以通过使用此find_Location类来查找city temp。其中首先通过android中的经度和纬度使用来查找城市位置?然后使用方法SendToUrl通过使用GoogleXML“http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=”找到温度

public void find_Location(Context con)
    {
        Log.d("Find Location", "in find_location");
        this.con=con;
        String location_context = Context.LOCATION_SERVICE;
        locationManager = (LocationManager)con.getSystemService(location_context);

        List<String> providers = locationManager.getProviders(true);
       for (String provider : providers) 
       {
           locationManager.requestLocationUpdates(provider, 1000, 0,new LocationListener()
           {
               public void onLocationChanged(Location location) {}
               public void onProviderDisabled(String provider){}
               public void onProviderEnabled(String provider){}
               public void onStatusChanged(String provider, int status,Bundle  extras){}
           });
           Location location = locationManager.getLastKnownLocation(provider);
           if (location != null)
           {
               latitude = location.getLatitude();
               longitude = location.getLongitude();
               addr=ConvertPointToLocation(latitude,longitude);
                       String temp_c=SendToUrl(addr);

           } 
       }
    }

    public String ConvertPointToLocation(double pointlat,double pointlog) {

        String address = "";
        Geocoder geoCoder = new Geocoder(con,
                Locale.getDefault());
        try {
            List<Address> addresses = geoCoder.getFromLocation(pointlat,pointlog, 1);
            if (addresses.size() > 0) {
                for (int index = 0; index < addresses.get(0)
                        .getMaxAddressLineIndex(); index++)
                    address += addresses.get(0).getAddressLine(index) + " ";
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return address;
    }  

    private String  SendToUrl(String string) {
        // TODO Auto-generated method stub

          try{
              string=string.replace(" ","%20");

        String queryString="http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query="+string;
        url= new URL(queryString);

        conec= url.openConnection();
        stream = conec.getInputStream();
        xpp = XmlPullParserFactory.newInstance().newPullParser();
        xpp.setInput(stream, null);
        int eventType = xpp.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT)
        {
              if(eventType == XmlPullParser.START_TAG)
            {String elementName = xpp.getName();
                  if("temp_c".equals(elementName))
                    {
                               int acount=xpp.getAttributeCount();
                   for(int x=0;x<acount;x++) 
            {
            xpp.getAttributeValue(x);          
                        String str=xpp.getAttributeValue(x);
                     return str;
         }  

          }
      }
      eventType = xpp.next();
    }
}

答案 1 :(得分:4)

目前不支持Google Weather API。所以上面的代码现在不起作用。 您可以使用以下网址,传递当前位置的纬度,经度,您将获得结果xml,您可以从中提取所需的信息。

http://forecast.weather.gov/MapClick.php?lat=40.78158&lon=-73.96648&FcstType=dwml

答案 2 :(得分:3)

我的回答并不完全,但Yahoo Weather API可能会对你有帮助。这对我很有用。

在这个api中,您必须选择一个城市,然后您将获得天气更新。但是,您必须通过源来提取您的部分。

希望这有帮助。

答案 3 :(得分:3)

anddev.org google weather api description上似乎有一个完整的代码示例,其中应包含您需要的所有内容。