2011-08-12 21 views
11

Şehir sıcaklığını boylam ve enlem arasında nasıl bulabilirsiniz .... Coğrafi koordinatlara göre hava durumunu görüntülemek için kullanabileceğim bir API veya bir widget ile hizmetten herhangi birini bilen var mı?Android'de boylam ve enlem ile şehir sıcaklığı nasıl bulunur?

+6

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

cevap

24

Bu find_Location Sınıfını kullanarak şehir ortamını bulabiliriz. ilk olarak şehirdeki enlem ve boylam tarafından şehir konumunu bulabiliyor musunuz? Ve bundan sonra

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

senin xpp, conec ve stream için veri türleri? – hyperfkcb

2

Benim cevabım tamamen mükemmel değil "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml?query=" kullanım GoogleXML tarafından sıcaklığını bulmak için yöntem sendToURL kullanmak ancak Yahoo Weather API size yardımcı olabilir. Bu benim için mükemmel çalıştı. Şehir'i birini seçmek zorunda ve sonra hava durumu güncellemeleri alacak bu API olarak

. Bununla birlikte, bölümünüzü çıkarmak için kaynağı gözden geçirmelisiniz.

Bu yardımcı olur umarım.

İlgili konular