2011-08-12 11 views
11

jak znaleźć temperaturę miasta według długości i szerokości geograficznej ... Czy ktoś wie o usłudze z interfejsem API lub widżetem, który mógłbym użyć do wyświetlania pogody na podstawie współrzędnych geograficznych?Jak znaleźć temperaturę miasta według długości i szerokości geograficznej w systemie Android?

+6

Sprawdź to, http://stackoverflow.com/questions/951839/api-to-get-weather-based-on-longitude-and-latitude-coordinates – Randroid

Odpowiedz

24

Możemy znaleźć temperaturę w mieście za pomocą tej klasy find_Location. w którym najpierw znaleźć lokalizację miasta przez użycie według długości i szerokości geograficznej w Androidzie? A potem użyć metody sendToURL znaleźć temperaturę przez zastosowanie 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(); 
    } 
} 
+0

Jaki jest Twój typy danych dla xpp, conec i stream? – hyperfkcb

2

Moja odpowiedź nie jest całkowicie doskonały, ale Yahoo Weather API może pomóc. To działało idealnie dla mnie.

W tym api musisz wybrać jedno z miast, a otrzymasz aktualne informacje o pogodzie. Musisz jednak przejść przez źródło, aby wydobyć swoją porcję.

Mam nadzieję, że to pomoże.

Powiązane problemy