0

Google 정적지도를 검색하는 AsyncTask에 전달되는 주소에서 경도/위도를 가져와야하는 문제가 있습니다.Google 정적지도를 사용하여 경도/위도 검색 문제

이 AsyncTask는 좌표 집합을 가져 와서지도를 만들 수 있으며 Google Places API를 사용하여 검색 한 주소를 사용할 수도 있습니다.

내가 겪고있는 문제는 전달 된 주소의 좌표를 검색하는 방법을 모르겠다는 것입니다. 누구든지 Long/Lat를 얻을 수있는 방법을 알고 있습니까? 내가 그것을하는 방법을 알아 낸 유일한 방법은 다른 AsyncTask를 사용하는 것이다. 나는 2 개의 요청을하지는 않을 것이다.

는 정적지도를 클래스 CreateStaticMapAsyncTask를 생성하는 AsyncTask를 확장 {

private static final String STATIC_MAPS_API_BASE = "https://maps.googleapis.com/maps/api/staticmap"; 
    private static final String STATIC_MAPS_API_SIZE = "300x300"; 

    @Override 
    protected void onPreExecute() { 
     addTask(); // adds one to task count. 
     super.onPreExecute(); 

    } 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     locationString = params[0]; 
     Log.e("LOCATION STRING", locationString); 
     Bitmap bmp = null; 
     StringBuilder sb = new StringBuilder(STATIC_MAPS_API_BASE); 
     try { 
      sb.append("?center=").append(
        URLEncoder.encode(locationString, "UTF-8")); 
     } catch (UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     sb.append("&size=" + STATIC_MAPS_API_SIZE); 
     sb.append("&key=" + API_KEY); 
     String url = new String(sb.toString()); 
     Log.e("URL", sb.toString()); 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(url); 

     InputStream in = null; 
     try { 
      in = httpclient.execute(request).getEntity().getContent(); 
      bmp = BitmapFactory.decodeStream(in); 
      in.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return bmp; 

    } 

    protected void onPostExecute(Bitmap bmp) { 
     super.onPostExecute(bmp); 
     if (bmp != null) { 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      data = stream.toByteArray(); 
      removeTask(); 
      // allTasksComplete(); 

     } 
    } 
} 

답변

0

당신은 Geocoder 클래스가 필요합니다.

지오 코딩 및 역 지오 코딩을 처리하기위한 클래스입니다. 지오 코딩은 위치의 거리 주소 나 다른 설명을 (위도, 경도) 좌표로 변환하는 과정입니다.

the example을 초과하면 Geocoder이 백그라운드 스레드에서 사용됩니다. 이미 AsyncTask이 있으므로 doInBackground() 코드를 추가 할 수 있습니다. 위의 예에서 위도와 경도가 필요하기 때문에 주소를 수정해야합니다.

는 "달빅, 아이슬란드,"이러한 주소로 장소 이름을 수 있습니다 명명 된 위치를 설명하는 것으로 알려진 주소의 배열을 돌려줍니다

당신은 getFromLocationName() 방법이 필요합니다 "1600 Amphitheater Parkway, Mountain View, CA", "SFO"등과 같은 공항 코드입니다. 반환되는 주소는 이며이 클래스의 생성자에 제공된 로캘로 현지화됩니다.

그러면 Address 개체에서 위도와 경도를 얻을 수 있습니다.