2016-04-18 4 views
0

Ich bin die Umsetzung einer Animation in Google Map mit this Beispiel. Ich erhalte LatLng-Daten von einem Server. Aber das Problem tritt auf, wenn ich zu viele Daten für einen einzelnen Punkt auf der Karte bekomme. Der animierte Marker wartet auf einen einzelnen Punkt, solange Daten für diesen Punkt vorhanden sind. Bitte beachten Sie den folgenden BeispielcodeVermeiden Sie gleiche Lat Lng auf Google Map Animation in Android

for (i = 0; i < jsonAssets.length(); i++) { 
         JSONObject nlmJsonObject = jsonAssets.getJSONObject(i); 
         JSONObject lastData_JsonObject = nlmJsonObject.getJSONObject("last_data"); 
         JSONObject nlm_locJsonObject = lastData_JsonObject.getJSONObject("loc"); 
         JSONArray coordinated = nlm_locJsonObject.getJSONArray("coordinates"); 

         Log.d("LASTLATLONG_ANIMATION", coordinated.toString()); 

         latt = (double) coordinated.get(0); 
         lng = (double) coordinated.get(1); 
         addMarkerToMap(new LatLng(lng, latt)); 

        }  
        animator.startAnimation(true); 

Wie kann ich ähnliche Punkte überprüfen und weglassen, um meine Kartenanimation weicher zu gestalten?

Dank

+0

Make ‚Latt‘ und ‚lng‘ paremeters global, vergleichen, dann neue und vorher eingestellten Werte an jedem jsonAssets Objekt. Wenn "current" und "previous" gleich sind, wechseln Sie zu einem anderen jsonAssets-Objekt. – Blackkara

+0

Können Sie mir bitte ein Beispiel geben, um die aktuelle und die vorherige Version zu vergleichen, weil ich es bereits ausprobiert habe, es aber nicht implementieren konnte? – anuradha

Antwort

1

einfach Ihren Code bearbeitet, die Idee

private double latt; 
private double lng; 

private void showMarkers(){ 

    // Your other codes 

    for (i = 0; i < jsonAssets.length(); i++) { 
     JSONObject nlmJsonObject = jsonAssets.getJSONObject(i); 
     JSONObject lastData_JsonObject = nlmJsonObject.getJSONObject("last_data"); 
     JSONObject nlm_locJsonObject = lastData_JsonObject.getJSONObject("loc"); 
     JSONArray coordinated = nlm_locJsonObject.getJSONArray("coordinates"); 

     Log.d("LASTLATLONG_ANIMATION", coordinated.toString()); 

     // Current values 
     double currentLat = (double) coordinated.get(0); 
     double currentLng = (double) coordinated.get(1); 

     // Compare. If not same add the marker 
     if(currentLat != latt && currentLng != lng){ 
      latt = (double) coordinated.get(0); 
      lng = (double) coordinated.get(1); 

      addMarkerToMap(new LatLng(lng, latt)); 
     } 

    } 
    animator.startAnimation(true); 
} 
+0

ja es funktioniert. Danke vielmals. – anuradha

0

Die beste Option ist eine neue Markierung hinzufügen nur zu geben, wenn seine Lage weiter als einen bestimmten Abstand zu der letzte Marker hinzugefügt.

Mein Beispiel die SphericalUtil.computeDistanceBetween vom Google Maps API Utility Library verwendet den Abstand betwen zwei LatLng Objekte zu berechnen:

final float MIN_DISTANCE = 10; // Minimum distance in meters to consider that two locations are the same 
LatLng lastLatLng = null; 

// ... 

for (i = 0; i < jsonAssets.length(); i++) { 
    JSONObject nlmJsonObject = jsonAssets.getJSONObject(i); 
    JSONObject lastData_JsonObject = nlmJsonObject.getJSONObject("last_data"); 
    JSONObject nlm_locJsonObject = lastData_JsonObject.getJSONObject("loc"); 
    JSONArray coordinated = nlm_locJsonObject.getJSONArray("coordinates"); 

    Log.d("LASTLATLONG_ANIMATION", coordinated.toString()); 

    latt = (double) coordinated.get(0); 
    lng = (double) coordinated.get(1); 

    LatLng currentLatLng = new LatLng(latt, lng); 

    if (lastLatLng == null || SphericalUtil.computeDistanceBetween(lastLatLng, currentLatLng) > MIN_DISTANCE) { 
     addMarkerToMap(new LatLng(lng, latt)); 
     lastLatLng = currentLatLng; 
    } 
} 
animator.startAnimation(true); 
+0

Das ist auch richtig, aber "10 Meter" ein bisschen gefährlich. Angenommen, jeder sequentielle Marker hat eine Entfernung von weniger als 10 Metern. In diesem Fall könnte nur der erste Marker hinzugefügt werden. – Blackkara

+0

Sie haben Recht, das ist die Idee. Wenn Sie mit Standorten arbeiten, können Sie, je nachdem, woher die Daten stammen, mehrere sehr nahe Standorte erhalten, die nahezu identisch sind. Da @codehub die Karte mit mehreren Markern animieren möchte und nicht möchte, dass die Karte zu viel Zeit am gleichen Punkt anhält, ist der Vergleich von Koordinaten in bestimmten Situationen möglicherweise nicht ausreichend (zu nahe liegende Orte, die gleich sein sollten). Natürlich können Sie den Wert 10 so ändern, wie Sie möchten (vielleicht müssen Sie ihn in einem Szenario auf 1 Meter und in einem anderen auf 100 Meter setzen). – antonio

+0

Können Sie mir die Idee geben, Linien auf den Straßen von Google zu zeichnen? Karten? Im Moment verbinden wir nur Punkte, aber nicht die Straßenlinien. Während wir nach einem Ort oder einer Entfernung von zwei Orten suchen, zeigt die Google Map die Route an. Wie können wir dieselbe Idee beim Zeichnen von Animationen in Google Map implementieren? – anuradha

Verwandte Themen