2013-07-28 3 views
1

Мне удалось получить название города с помощью GeoCoder, но иногда GPS возвращает значения, которые GetLocality не может распознать (возвращает «null»). Думаю, лучшее решение - получить ближайшее название города. Может ли кто-нибудь сказать мне, пожалуйста, как это сделать. Или, если есть еще одна альтернатива для ее решения, все в порядке.Как получить ближайшее название города по широте и долготе?

public void getCityName(double dLatitude, double dLongitude) throws IOException{ 
    Geocoder gcd = new Geocoder(this, Locale.getDefault()); 
    List<Address> addresses = gcd.getFromLocation(dLatitude, dLongitude, 1); 

    TextView cityname = (TextView)findViewById(R.id.city_name); 
    if (addresses.size() > 0) {    
     cityname.setText("" +addresses.get(0).getLocality() + "," + addresses.get(0).getCountryName());   
    } 
} 
+0

Да, вы можете использовать google api для этого и запросить google и проанализировать json и получить адрес в соответствии с вашей долготой и широтой. –

ответ

0

Вы можете использовать этот способ.

ProgressDialog dialog=null; 
    @Override 
    public void onClick(View v) { 
      dialog = ProgressDialog.show(context, "", "Please! Wait...", true); 
      GetCurrentAddress result = new GetCurrentAddress(); 
      result.execute(""); 
     } 



    // getting address task 
    private class GetCurrentAddress extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... urls) { 
      String responseText = null; 
      String googleurl = "http://maps.google.com/maps/geo?"; 
      String latitude="38.89"; 
      String longitude ="-77.03"; 
     StringBuilder sbuilder=new StringBuilder(); 
     sbuilder.append(googleurl); 

     sbuilder.append("q="+latitude+","+longitude); 
     sbuilder.append("&amp;output=responseText&amp;sensor=true"); 
     String url=sbuilder.toString(); 

     try { 
      DefaultHttpClient httpclient=new DefaultHttpClient(); 
      HttpPost httppost=new HttpPost(url); 
      HttpResponse httpresponse=httpclient.execute(httppost); 
      HttpEntity httpentity=httpresponse.getEntity(); 
      InputStream is=httpentity.getContent(); 
      BufferedReader reader=new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb=new StringBuilder(); 
      String line=null; 
     while((line=reader.readLine())!=null) 
     { 
      sb.append(line+"\n"); 

     } 
     is.close(); 
     responseText=sb.toString(); 
     } 
     catch(ClientProtocolException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     return responseText; 
     } 

     @Override 
     protected void onPostExecute(String resultString) { 
      dialog.dismiss(); 

      String response= resultString; 

      if (responseText != null) { 
       Log.v(TAG, "json response is:" + response); 
       try { 
        jObj = new JSONObject(response); 
        jsonarray = jObj.getJSONArray("Placemark"); 
        for (int i = 0; i < jsonarray.length(); i++) { 
         JSONObject innerJsonobject = jsonarray.getJSONObject(i); 
         String jsonaddress = innerJsonobject 
           .getString("address"); 


        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
+0

Этот URL-адрес google теперь заменен API Карт Google V3 URL ---- http://maps.googleapis.com/maps/api/geocode/json?latlng=5.975632,80.427973&sensor=true – bynu022