2017-02-05 3 views
0

Ich habe ein JSON-Array abgerufen, die unterschiedliche Längen und Breiten von Filialen enthält. Ich legte es in eine Liste:Holen Sie sich den nächstgelegenen Marker vom aktuellen Standort (Android, Google Maps)

 @Override 
     protected void onPostExecute(Object o) { 
      super.onPostExecute(o); 
      try { 
       Intent mapsIntent = getIntent(); 
       String jSonArray = mapsIntent.getStringExtra("jsonArray"); 
       jsonArray = new JSONArray(jSonArray); 

       for(int i = 0; i < jsonArray.length(); i++) { 
        Markers branch = new Markers(); 
        branch.latitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("latitude")); 
        branch.longitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("longitude")); 

        marker.add(branch); 
       } 

      } catch (Exception ex) { 
       Log.d("Error", ex.toString()); 
      } 
     } 

Das ist mein Markers Klasse:

private class Markers { 
    public float latitude; 
    public float longitude; 
} 

Jetzt bin ich in der Lage meine aktuellen Standort abzurufen Koordinaten mithilfe von Google Maps API v2:

LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
    MarkerOptions markerOptions = new MarkerOptions(); 
    markerOptions.position(latLng); 
    markerOptions.title("Current Location"); 
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
    mCurrLocationMarker = mMap.addMarker(markerOptions); 

Nun, ich frage mich, ich habe meine Liste der Filialstandorte und meinen aktuellen Standort, wie bekomme ich dann den nächsten Filialzweig von meinem aktuellen Standort und platziere einen Marker darauf? Ich verstehe einige Implementierungen, die ich gesehen habe, nicht, deshalb wird es eine große Hilfe sein, wenn mir jemand beibringt, wie man das erreicht. Prost!

Antwort

0

Eine Möglichkeit wäre, Ihre Markierungen zu sortieren und das erste Element im sortierten Array verwenden:

Collections.sort(marker, new Comparator<Markers>() { 

    @Override 
    public int compare(Markers a, Markers b) { 
     Location locationA = new Location("point A");  
     locationA.setLatitude(a.latitude); 
     locationA.setLongitude(a.longitude); 
     Location locationB = new Location("point B"); 
     locationB.setLatitude(b.latitude); 
     locationB.setLongitude(b.longitude); 
     float distanceOne = location.distanceTo(locationA); 
     float distanceTwo = location.distanceTo(locationB); 
     return Float.compare(distanceOne, distanceTwo); 
    } 
} 

Dann haben Sie Ihre Markierungen sortiert nach der Entfernung zu Ihrem aktuellen Standort. Verwenden Sie danach das erste Element im Marker-Array und fügen Sie es zu Ihrer mMap-Instanz hinzu.

+0

Schreib ich dies nach meiner for-Schleife in der onPostExecute-Methode? Ich habe ungefähr eine Stunde lang daran gearbeitet, und es gibt mir immer noch einen Nullwert ... – Paradigm

+0

nach deinem For-each-Zeug, ja. Woher bekommst du einen Nullwert? – Boni2k

+0

Nun, das Problem war nicht in der Sortierung selbst ... Ich habe null Werte in meiner Locations-Liste, wie sich herausstellte. Danke für die Antwort. Wenn Sie interessiert sind hier ist meine andere Frage: [link] (http://stackoverflow.com/questions/42055198/arraylist-element-suddenly-become-null) – Paradigm

Verwandte Themen