2016-08-17 8 views
5

latitude &がURL(JSON)から来ています。私は、特定のlatitude & longitude基準(これはURLから来ている)とそれらの間の距離を表示するには、ユーザーの場所(最初に決定する必要がある)からの距離を計算する必要があります。json(URL)によるユーザーの場所とレストランの場所の距離の計算

JSONデータが添付された画像で見ることができる。

enter image description here

(レストランの緯度&経度)のためのJSONデータをフェッチするURL:https://comida-95724.herokuapp.com/api/v1/restaurants/get_featured_restaurants

ListActiivty.java

public class ListViewActivity extends Activity { 
    // Log tag 
    private static final String TAG = ListViewActivity.class.getSimpleName(); 
    // change here url of server api 
    private static final String url = "https://comida-95724.herokuapp.com/api/v1/restaurants/get_featured_restaurants"; 

    private ProgressDialog pDialog; 
    private List<Movie> movieList = new ArrayList<Movie>(); 
    private ListView listView; 

    private CustomListAdapter adapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_listview); 
     listView = (ListView) findViewById(R.id.list); 
     adapter = new CustomListAdapter(this, movieList); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Movie movie = movieList.get(position); 
       Intent intent = new Intent(ListViewActivity.this, SecondActivity.class); 
       intent.putExtra("name", movie.getName()); 
       intent.putExtra("average_ratings", movie.getAverage_ratings()); 
       intent.putExtra("full_address", movie.getAddress()); 
       intent.putExtra("image_url", movie.getThumbnailUrl()); 
       intent.putExtra("cuisine",movie.getCuisine()); 
       intent.putExtra("cost",movie.getCost()); 
       startActivity(intent); 

      } 
     }); 
     listView.setAdapter(adapter); 
     pDialog = new ProgressDialog(this); 
     // Showing progress dialog before making http request 
     pDialog.setMessage("Please Keep patience.Its loading..."); 

     pDialog.show(); 

     JsonArrayRequest movieReq = new JsonArrayRequest(url, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         hidePDialog(); 
         // Parsing json 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject obj = response.getJSONObject(i); 
           Movie movie = new Movie(); 
           //movie.setTitle(obj.getString("title")); 
           movie.setName(obj.getString("name")); 
           //movie.setThumbnailUrl(obj.getString("image")); 
           movie.setThumbnailUrl(obj.getString("org_image_url")); 
           movie.setAverage_ratings(obj.getString("average_ratings")); 
           movie.setCuisine(obj.getString("cuisine")); 
           movie.setAddress(obj.getJSONObject("address").getString("area")); 
           movie.setlatitude(obj.getJSONObject("address").getString("latitude")); 
           movie.setlongitude(obj.getJSONObject("address").getString("longitude")); 
           movieList.add(movie); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
         adapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       hidePDialog(); 

      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(movieReq); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     hidePDialog(); 
    } 

    private void hidePDialog() { 
     if (pDialog != null) { 
      pDialog.dismiss(); 
      pDialog = null; 
     } 
    } 

} 

list_row.xml

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/ly_root" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="12dp" 
     android:background="#FEFEFE" 
     app:cardCornerRadius="8dp"> 
     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
      <com.android.volley.toolbox.NetworkImageView 
       android:id="@+id/thumbnail" 
       android:layout_width="120dp" 
       android:layout_height="100dp" 
       android:layout_marginRight="8dp" 
       android:scaleType="centerCrop" /> 

      <!-- Restaurant name --> 
      <TextView 
       android:id="@+id/name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 

       android:layout_toRightOf="@+id/thumbnail" 
       android:textStyle="bold" /> 

      <TextView 
       android:id="@+id/area" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/name" 
       android:layout_toRightOf="@+id/thumbnail" 
       android:textColor="#D2691E"/> 

      <!-- Rating --> 
      <TextView 
       android:id="@+id/average_ratings" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/area" 
       android:layout_toRightOf="@+id/thumbnail" 
       android:textColor="#D2691E" /> 

      <TextView 
       android:id="@+id/cuisine" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/average_ratings" 
       android:layout_toRightOf="@+id/thumbnail" 
       android:textColor="#D2691E" /> 
      <TextView 
       android:id="@+id/cost" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/cuisine" 
       android:layout_toRightOf="@+id/thumbnail" 
       android:textColor="#D2691E" /> 
    <TextView 
      android:id="@+id/latitude" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/cost" 
      android:layout_toRightOf="@+id/thumbnail" 
      android:textColor="#D2691E" /> 
     <TextView 
      android:id="@+id/longitude" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/latitude" 
      android:layout_toRightOf="@+id/thumbnail" 
      android:textColor="#D2691E" /> 
      <TextView 
       android:id="@+id/Distance" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/cost" 
       android:layout_toRightOf="@+id/thumbnail" 
       android:textColor="#D2691E" /> 
     </RelativeLayout> 

    </android.support.v7.widget.CardView> 

私は画像の下のように、今の結果を取得しています。これで私は、ユーザーと特定のレストランの間の距離を表示する必要があります。

例:1.9キロ離れた優香-Theセントレジスムンバイからのユーザーの距離=

は、どのように私はこれを表示することができますか?

誰でもお手伝いできますか?あなたの現在の場所を知っている場合

enter image description here

+0

既に回答済みです。 @Chuckによってこの[answer](http://stackoverflow.com/a/27943/1281775)をチェックしてください。 – Seishin

+0

私の質問は、緯度と経度がjson(URL)を経由している場合の距離の計算方法ですか? – user6313669

+0

答えを確認しましたか?これは、2つの緯度と経度の間の距離を計算する関数です。デバイスとサーバーから返されたポイントで、ユーザーの現在の位置を調べる必要があります。その関数で距離を計算します。 – Seishin

答えて

2

、あなたは次のようにAndroidの中で2つのLocationオブジェクト間の距離を計算することができます。ここでは

Location myLocation = new Location("my loc"); 

myLocation.setLatitude(myLat); 
myLocation.setLongitude(myLng); 

Location locFromJson = new Location("loc from json"); 

locFromJson.setLatitude(latFromJson); 
locFromJson.setLongitude(lngFromJson); 

float distance = myLocation.distanceTo(locFromJson); 

distanceはメートルです。したがって、distance/1000はキロメートルで表示されます。

+0

このコードを編集する場所を教えてください。 – user6313669