2011-12-05 26 views
3

私は場所のアドレスのリストを持っています。私の現在の場所から、私は最も近い場所を取得する必要があり、地図上に表示する必要があります。どのように私は現在の場所から最も近い場所を得ることができます。最初に私は現在の位置を緯度と経度で取得し、次にどのように最寄り駅を取得します。与えられたデータから現在の場所から最も近い場所を見つける方法を教えてください。

おかげ

+0

逆はそれらをジオコードして、最寄りの場所 – ingsaurabh

答えて

4

あなたは経度がこれだけ最短距離で、この式と表示アドレスを使用して、現在の場所と場所のアドレスgeopointsのリストの間の距離を見つけるあなたの現在の場所の緯度を持っています。まず、あなたが持っているそれぞれの場所のLattitude & Longitudeを取得し、各場所の距離を見つけるあなたの現在の場所からLocationクラスのdistanceToメソッドを使用して、その後、あなたからの最低距離を見つけるそして、あなたの現在のlocation Lattitude & Longitudeを取得

private double distance(double lat1, double lon1, double lat2, double lon2) { 
     // haversine great circle distance approximation, returns meters 
     double theta = lon1 - lon2; 
     double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) 
       + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) 
       * Math.cos(deg2rad(theta)); 
     dist = Math.acos(dist); 
     dist = rad2deg(dist); 
     dist = dist * 60; // 60 nautical miles per degree of seperation 
     dist = dist * 1852; // 1852 meters per nautical mile 
     return (dist); 
    } 

    private double deg2rad(double deg) { 
     return (deg * Math.PI/180.0); 
    } 

    private double rad2deg(double rad) { 
     return (rad * 180.0/Math.PI); 
    } 
+0

距離の単位は何を見つけました場所のリストから? –

6

ステップ、場所の最寄りの場所のリストを取得する方法

ステップ1:置きAPI

https://code.google.com/apis/console/

を取得するためのAPIコンソールに移動して、場所のサービスのサービス]タブ

Service

に選択

enter image description here

今、今あなたが場所

プログラミングで今

を取得するためのAPIキーを持っているAPIアクセス]タブを選択し、APIキー

enter image description here

を取得*ステップ2 *:まず、Place.javaという名前のクラスを作成します。このクラスは、プレイスAPIによって提供される場所のプロパティを格納するために使用されます。

package com.android.code.GoogleMap.NearsetLandmark; 

import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.json.JSONException; 
import org.json.JSONObject; 


public class Place { 
    private String id; 
    private String icon; 
    private String name; 
    private String vicinity; 
    private Double latitude; 
    private Double longitude; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getIcon() { 
     return icon; 
    } 

    public void setIcon(String icon) { 
     this.icon = icon; 
    } 

    public Double getLatitude() { 
     return latitude; 
    } 

    public void setLatitude(Double latitude) { 
     this.latitude = latitude; 
    } 

    public Double getLongitude() { 
     return longitude; 
    } 

    public void setLongitude(Double longitude) { 
     this.longitude = longitude; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getVicinity() { 
     return vicinity; 
    } 

    public void setVicinity(String vicinity) { 
     this.vicinity = vicinity; 
    } 

    static Place jsonToPontoReferencia(JSONObject pontoReferencia) { 
     try { 
      Place result = new Place(); 
      JSONObject geometry = (JSONObject) pontoReferencia.get("geometry"); 
      JSONObject location = (JSONObject) geometry.get("location"); 
      result.setLatitude((Double) location.get("lat")); 
      result.setLongitude((Double) location.get("lng")); 
      result.setIcon(pontoReferencia.getString("icon")); 
      result.setName(pontoReferencia.getString("name")); 
      result.setVicinity(pontoReferencia.getString("vicinity")); 
      result.setId(pontoReferencia.getString("id")); 
      return result; 
     } catch (JSONException ex) { 
      Logger.getLogger(Place.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return null; 
    } 

    @Override 
    public String toString() { 
     return "Place{" + "id=" + id + ", icon=" + icon + ", name=" + name + ", latitude=" + latitude + ", longitude=" + longitude + '}'; 
    } 

} 

は、今すぐあなたが最寄りの場所のリストを取得する新しいアクティビティを作成でPlacesService

package com.android.code.GoogleMap.NearsetLandmark; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.util.Log; 


public class PlacesService { 

    private String API_KEY; 

    public PlacesService(String apikey) { 
     this.API_KEY = apikey; 
    } 

    public void setApiKey(String apikey) { 
     this.API_KEY = apikey; 
    } 

    public List<Place> findPlaces(double latitude, double longitude,String placeSpacification) 
    { 

     String urlString = makeUrl(latitude, longitude,placeSpacification); 


     try { 
      String json = getJSON(urlString); 

      System.out.println(json); 
      JSONObject object = new JSONObject(json); 
      JSONArray array = object.getJSONArray("results"); 


      ArrayList<Place> arrayList = new ArrayList<Place>(); 
      for (int i = 0; i < array.length(); i++) { 
       try { 
        Place place = Place.jsonToPontoReferencia((JSONObject) array.get(i)); 

        Log.v("Places Services ", ""+place); 


        arrayList.add(place); 
       } catch (Exception e) { 
       } 
      } 
      return arrayList; 
     } catch (JSONException ex) { 
      Logger.getLogger(PlacesService.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     return null; 
    } 
//https://maps.googleapis.com/maps/api/place/search/json?location=28.632808,77.218276&radius=500&types=atm&sensor=false&key=api key 
    private String makeUrl(double latitude, double longitude,String place) { 
     StringBuilder urlString = new StringBuilder("https://maps.googleapis.com/maps/api/place/search/json?"); 

     if (place.equals("")) { 
       urlString.append("&location="); 
       urlString.append(Double.toString(latitude)); 
       urlString.append(","); 
       urlString.append(Double.toString(longitude)); 
       urlString.append("&radius=1000"); 
      // urlString.append("&types="+place); 
       urlString.append("&sensor=false&key=" + API_KEY); 
     } else { 
       urlString.append("&location="); 
       urlString.append(Double.toString(latitude)); 
       urlString.append(","); 
       urlString.append(Double.toString(longitude)); 
       urlString.append("&radius=1000"); 
       urlString.append("&types="+place); 
       urlString.append("&sensor=false&key=" + API_KEY); 
     } 


     return urlString.toString(); 
    } 

    protected String getJSON(String url) { 
     return getUrlContents(url); 
    } 

    private String getUrlContents(String theUrl) 
    { 
     StringBuilder content = new StringBuilder(); 

     try { 
      URL url = new URL(theUrl); 
      URLConnection urlConnection = url.openConnection(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) 
      { 
       content.append(line + "\n"); 
      } 

      bufferedReader.close(); 
     } 

     catch (Exception e) 
     { 

      e.printStackTrace(); 

     } 

     return content.toString(); 
    } 
} 

という名前のクラスを作成します。

/** * */

public class CheckInActivity extends ListActivity{ 


@Override 
protected void onCreate(Bundle arg0) { 
    // TODO Auto-generated method stub 
    super.onCreate(arg0); 

    new GetPlaces(this, getListView()).execute(); 

} 




class GetPlaces extends AsyncTask<Void, Void, Void>{ 

     private ProgressDialog dialog; 
     private Context context; 
     private String[] placeName; 
     private String[] imageUrl; 
     private ListView listView; 

     public GetPlaces(Context context, ListView listView) { 
      // TODO Auto-generated constructor stub 
      this.context = context; 
      this.listView = listView; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      dialog.dismiss(); 

      listView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_expandable_list_item_1,placeName)); 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      dialog = new ProgressDialog(context); 
      dialog.setCancelable(true); 
      dialog.setMessage("Loading.."); 
      dialog.isIndeterminate(); 
      dialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      // TODO Auto-generated method stub 
      PlacesService service = new PlacesService("AIzaSyDIRAipDcVMf1FGYHEGDRzvLv0SFH46uRQ"); 
       List<Place> findPlaces = service.findPlaces(28.632808,77.218276,"hospital"); // hq for hospital 
                         // atm for ATM 

       placeName = new String[findPlaces.size()]; 
       imageUrl = new String[findPlaces.size()]; 

       for (int i = 0; i < findPlaces.size(); i++) { 

        Place placeDetail = findPlaces.get(i); 
        placeDetail.getIcon(); 

       System.out.println( placeDetail.getName()); 
       placeName[i] =placeDetail.getName(); 

       imageUrl[i] =placeDetail.getIcon(); 

      } 
      return null; 
     } 

    } 

} 
+0

このサンプルコードを私に教えてもらえますか? –

関連する問題