2017-07-12 1 views
1

Ich verwende dieses Beispiel, um Markierungen in einer Google Maps-Aktivität anzuzeigen. Beispiel: https://gist.github.com/TimPim/5902100So finden Sie den nächsten Marker in Google Maps Aktivitäten in Android mit JSON-Daten?

void createMarkersFromJson(String json) throws JSONException { 
    // De-serialize the JSON string into an array of city objects 
    JSONArray jsonArray = new JSONArray(json); 
    for (int i = 0; i < jsonArray.length(); i++) { 
     // Create a marker for each city in the JSON data. 
     JSONObject jsonObj = jsonArray.getJSONObject(i); 
     map.addMarker(new MarkerOptions() 
      .title(jsonObj.getString("name")) 
      .snippet(Integer.toString(jsonObj.getInt("population"))) 
      .position(new LatLng(
        jsonObj.getJSONArray("latlng").getDouble(0), 
        jsonObj.getJSONArray("latlng").getDouble(1) 
      )) 
     ); 
    } 
} 

Ich mag diesen Code unten wieder zu verwenden, die am nächsten Marker zu überprüfen, für die Informationen JSON den nächsten Marker zu finden. -Code unten von Display title of closest marker from my current position Google Maps v2

List<MyMarkerObj> m = data.getMyMarkers(); 
float mindist; 
int pos=0; 
      for (int i = 0; i < m.size(); i++) { 
       String[] slatlng = m.get(i).getPosition().split(" "); 
       LatLng lat = new LatLng(Double.valueOf(slatlng[0]), Double.valueOf(slatlng[1])); 
       map.addMarker(new MarkerOptions() 
         .title(m.get(i).getTitle()) 
         .snippet(m.get(i).getSnippet()) 
         .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) 
         .position(lat) 
         ); 

       float[] distance = new float[1]; 
       Location.distanceBetween(currentlat, currentlong,Double.valueOf(slatlng[0]), Double.valueOf(slatlng[1]), distance); 
       if(i==0) mindist=distance[0]; 
       else if(mindist>distance[0]) { 
        mindist=distance[0]; 
        pos=i; 
       } 
      } 
    Toast.makeText(getActivity(), "Closest Marker Distance: "+ m.get(pos).getTitle() +" "+mindist, Toast.LENGTH_LONG).show(); 
+0

Soll ich einfach das Lat/Lon zum Array "m" hinzufügen, dann den Code ausführen? –

Antwort

1

Sie brauchen nicht die m Array für Ihren Fall, wie Sie Ihre Daten bereits in einem JSONArray haben.

Durchlaufen Sie einfach das JSONArray, verfolgen Sie den aktuellsten Marker, und wenn die Schleife fertig ist, haben Sie einen Verweis auf den nächsten Marker.

Ihren Code mit den entsprechenden Teilen der anderen Antwort Kombination:

Marker mClosestMarker; 
float mindist; 
void createMarkersFromJson(String json) throws JSONException { 
    // De-serialize the JSON string into an array of city objects 
    JSONArray jsonArray = new JSONArray(json); 
    for (int i = 0; i < jsonArray.length(); i++) { 
     // Create a marker for each city in the JSON data. 
     JSONObject jsonObj = jsonArray.getJSONObject(i); 
     double lat = jsonObj.getJSONArray("latlng").getDouble(0); 
     double lon = jsonObj.getJSONArray("latlng").getDouble(1); 
     Marker currentMarker = map.addMarker(new MarkerOptions() 
      .title(jsonObj.getString("name")) 
      .snippet(Integer.toString(jsonObj.getInt("population"))) 
      .position(new LatLng(
        lat, 
        lon 
      )) 
     ); 

     float[] distance = new float[1]; 
     Location.distanceBetween(currentlat, currentlong, lat, lon, distance); 
     if(i==0) { 
     mindist = distance[0]; 
     } else if (mindist > distance[0]) { 
     mindist=distance[0]; 
     mClosestMarker = currentMarker; 
     } 
    } 

    Toast.makeText(MainActivity.this, "Closest Marker Distance: "+ mClosestMarker.getTitle() + " " + mindist, Toast.LENGTH_LONG).show(); 
} 

Hinweis Wenn Sie Hilfe benötigen für currentlat und currentlong den aktuellen Standort bekommen, siehe hier: How can I show current location on a Google Map on Android Marshmallow?

Wenn Sie Folgen Sie der Antwort dort, um den aktuellen Standort zu erhalten, und Sie haben einen "aktuellen Standort" Marker platziert, können Sie einfach Folgendes tun:

LatLng currentLatLng = mCurrLocationMarker.getPosition(); 
Location.distanceBetween(currentLatLng.latitude, currentLatLng.longitude, lat, lon, distance); 
+1

Absolut Genie! Vielen Dank! \ –

+0

@StevenHammons Werfen Sie einen Blick auf den Link am Ende der Antwort, wenn Sie Hilfe benötigen, um den aktuellen Standort des Geräts für die Variablen 'currentLat' und 'currentLong' zu erhalten –