1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Distanz messen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von hundsmiachn, 28.03.2012.

  1. hundsmiachn, 28.03.2012 #1
    hundsmiachn

    hundsmiachn Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    11.05.2011
    Hallo

    Ich bin gerade dabei mir eine kleine BikeApp zu schreiben, die mir einfach die Fahrzeit und die gefahrene Distanz misst. Beim Distanzmessen hab ich aber einige Probleme. Derzeit siehts so aus:

    Code:
    float []out = new float[1];
    Location.distanceBetween(m_dLastLat, m_dLastLong, m_CurLoc.getLatitude(), m_CurLoc.getLongitude(), out);
    if(out[0] > 10)
    {
       m_dTripDistance += out[0];
       m_dLastLat = m_CurLoc.getLatitude();
       m_dLastLong = m_CurLoc.getLongitude();
    }
    
    Habe festgestellt dass das ungenau ist. Weiss jemand wie man die Distanz richtig, also mit der maximalen Genauigkeit, misst ?
    Möchte also einfach eine gefahrene Strecke möglichst genau messen. Hab leider nur Beispiele mit einer Distanzmessung zw. 2 Punkten gefunden, nicht über
    eine ganze Route also x-beliebig viele Punkte.

    dank euch schon mal
    mfg
    Erich
     
  2. DieGoldeneMitte, 28.03.2012 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Die Länge eines Polygonzugs (einer Serie von Punkten einer Route) ist die Summe der Abstände der jeweils aufeinander folgenden Punkte. Mehr ist da eigentlich nicht zu tun.

    Was natürlich eine Herausforderung wäre, sind so Dinge wie Ausreißerpunkte erkennen und rausrechnen bzw Kurvenglättung (z.B.: http://de.wikipedia.org/wiki/Douglas-Peucker-Algorithmus) oder zu den Punkten die passende Straße finden (was offroader aber sicher nicht wollen :D).
     
    Zuletzt bearbeitet: 28.03.2012
  3. sixi, 28.03.2012 #3
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Schau doch mal bei myTracks vorbei!
     
  4. hundsmiachn, 28.03.2012 #4
    hundsmiachn

    hundsmiachn Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    11.05.2011
    Dank euch, werd mir das mal ansehen.
    Ich denke das Problem liegt einfach an den kleinen Abständen zwischen den Punkten, dadurch summieren sich die Fehler auf, oder ?

    mfg
    Erich
     
  5. BFK, 28.03.2012 #5
    BFK

    BFK Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hi,
    wie schon DieGoldeneMitte sagte musst du einfach nur die Abstände addieren.

    Am besten machst du das direkt bei onLocationChanged, da brauchst auch kein array mit Punkten usw.

    Wenn du es aber dennoch später machen willst, dann hätte ich das so gemacht..:

    Code:
    private float gesamtEntfernung(Location loc_array, int gesamtpunkte)
    {
       float gesamt_in_m = 0;
       for(int i = 0; i < gesamtpunkte; i++)
          {
            if(i != gesamtpunkte - 1)
              {
                 gesamt_in_m += loc_array[i].distanceTo(loc_array[i+1]);
              }
          }
        return gesamt_in_m;
    }
    
    Das obere habe ich zwar nicht getestet, sollte aber funken.

    Und mit "distanceBetween" sollte es natürlich auch gehen.

    Ungenau ist es auf jeden Fall nicht (das habe ich getestet), es sei denn du übergibst ungenaue Koordinaten.
     
  6. BFK, 28.03.2012 #6
    BFK

    BFK Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Welche Werte hast du denn beim LocationManager für minTime und minDistance angegeben..?
     
  7. hundsmiachn, 28.03.2012 #7
    hundsmiachn

    hundsmiachn Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    11.05.2011
    Hallo

    Hab bei beiden auf 0 gestellt, damit ich die maximale Anzahl an Wegpunkten bekomme, dezimieren kann ich sie später auch noch.

    Hatte auch das Problem, dass der Weg sich immer erhöht hat, wenn ich stillstand, einfach durch die Schwankung der Coord, deshalb hab ich die Abfrage mit > 10 drin, er sollte also erst den Punkt addieren wenn er mindestens 10m vom vorigen entfernt ist.

    mfg
    Erich
     
  8. BFK, 28.03.2012 #8
    BFK

    BFK Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Ja aber genau deshalb ist minDistance ja da. Wenn du minDistance = 10 setzt, dann kommt ja keine weiteren Koordinaten rein, also brauchst du dich nicht selbst zu kümmern.
    Ich finde, dass beide auf 0 zu setzen, bringt wriklich nicht viel, im Gegenteil du bekommst falsche Koordianten rein, weil ja das GPS-Signal sich ständig updatet und dich paar metern weiter anzeigt (alles weil ja das GPS-Signal um die 7-8 meter genau ist) und noch dazu wird dein Akku ständig geleert.

    Deshalb rate ich dir minDistance auf 10 zu setzen und minTime auf 2000 (2 sec).
     
  9. hundsmiachn, 28.03.2012 #9
    hundsmiachn

    hundsmiachn Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    11.05.2011
    Hallo

    Ich verwende ein Bluetooth GPS Receiver, deshalb habe ich das ganze auf Maximum gestellt, da spielt es mit dem Akku auch keine Rolle, und die Genaugkeit ist auch viel besser. Das Problem ist halt wenn ich den Locationmanager auf 10m einstelle, dass ich die Geschwindigkeit auch seltener bekomme, die Anzeige ist dann sehr träge ...

    mfg
    Erich
     
  10. BFK

    BFK Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Ja ok, du könntest aber wenn dir die Geschwindigkeit so wichtig ist, nen zweiten loc-listener benutzen.
    Oder du kannst es auch so belassen, nur mir wär das ganze zu aufwendig, also das mit dem 10 m berchnen usw usw, deshalb das Ganze.
     
  11. hundsmiachn, 28.03.2012 #11
    hundsmiachn

    hundsmiachn Threadstarter Neuer Benutzer

    Beiträge:
    20
    Erhaltene Danke:
    0
    Registriert seit:
    11.05.2011
    Hi

    Soo aufwändig ist es ja nun auch nicht, die 10m Abfrage (-: (ein IF drüber)
    Ich dachte halt, dass dadurch etwaige Rundungsfehler oder Ungenauigkeiten entstehen.

    dank euch

    mfg
    Erich
     

Diese Seite empfehlen