2016-08-17 5 views
5

के माध्यम से उपयोगकर्ता स्थान और रेस्तरां स्थान के बीच दूरी की गणना मेरे पास latitude & longitude जो यूआरएल (JSON) से आ रहे हैं। मुझे किसी विशेष latitude & longitude आधार (जो एक यूआरएल से आ रहा है) में उपयोगकर्ताओं के स्थान से दूरी की गणना करना है (उनको पहले निर्धारित करने की आवश्यकता है) और उन लोगों के बीच की दूरी दिखाएं।जेसन (यूआरएल)

JSON डेटा संलग्न छवि पर देखा जा सकता है:

enter image description here

(रेस्तरां के अक्षांश & देशांतर) के लिए JSON डेटा लाते समय के लिए यूआरएल: 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> 

मैं छवि के नीचे की तरह अब परिणाम हो रही है। इस में मैं उपयोगकर्ता और विशेष रेस्तरां के बीच की दूरी को दिखाने के लिए है:

उदाहरण: Yuuka -इस St. Regis मुंबई = 1.9 किमी की दूरी पर

मैं इस दिखा सकते हैं कैसे से उपयोगकर्ता की दूरी?

क्या कोई मेरी मदद कर सकता है?

enter image description here

+0

यह पहले से ही उत्तर दिया गया है। @Chuck द्वारा यह [उत्तर] (http://stackoverflow.com/a/27943/1281775) देखें। – Seishin

+0

मेरा सवाल यह है कि यदि अक्षांश और देशांतर जेसन (यूआरएल) के माध्यम से आ रहा है तो दूरी की गणना कैसे करें? – user6313669

+0

क्या आपने उत्तर देखा? यह एक ऐसा कार्य है जो दो अक्षांश और लंबी स्थितियों के बीच की दूरी की गणना करता है। आपको डिवाइस की डिवाइस और सर्वर से लौटाए गए बिंदु के साथ उपयोगकर्ता की वर्तमान स्थिति पता लगाना होगा। फिर उस समारोह के साथ दूरी की गणना करें। – Seishin

उत्तर

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