• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

walked_distance()

FSNTL

Geocacher
Hallo,
ich nutze für einen Wherigo diese Funktion (siehe unten) zur Messung der zurückgelegten Distanz (Danke noch mal an andi)

Das funktioniert auch sehr gut, bei IOS und Garmin fast ohne Probleme, nur bei Android habe ich einige "Spieler" bei denen entweder gar keine Distanz gemessen wird (bleibt auf 0) oder aber die Messung zeigt viel zu hohe Werte an (z.B. nach 100 Metern schon 3000 Kilometer)....
Nutzt Jemand diese Funktion und hat evtl die gleichen Probleme?
Gibt es evtl. eine Lösung für das Problem?
Liegt es am Wheryougo Player, evtl in Verbindung mit einer sehr aktuellen Android Version?

Danke und Gruß
FSNTL


Code:
--
-- Created by IntelliJ IDEA.
-- User: andi
-- Date: 19.04.12
-- Time: 19:00
-- To change this template use File | Settings | File Templates.
--

-- LUA Code to measure distance of Player
-- Interface to Urwigo:
--
-- init-routine: store_current_position() - should be called on start of measurement or after restore of cartridge
--walked_distance(): should be called via timer - e.g. every one or 2 seconds


local last_pos = ZonePoint(0,0,0)  --not persistent, so init-function should be called after restore of cartridge


function store_current_position()
    --just store the current position
    last_pos = Player.ObjectLocation
end


function get_gps_accuracy()
    local pos_acc = Player.PositionAccuracy
    local gps_acc = pos_acc:GetValue 'm'
    return gps_acc
end


function walked_distance()  --return walked_distance - if more than twice position accuracy
   --try to work with PositionAccuracy

   local d, b = Wherigo.VectorToPoint(last_pos, Player.ObjectLocation)
   local dn = d:GetValue 'm'
   local gps_acc = get_gps_accuracy()
   if dn > 2 * gps_acc then
       store_current_position()
       --not used last_bearing = b - if it is interesting in which direction player is walking
       return dn  --return distance
   end
   return 0
end
 

dennistreysa

Geocacher
0 Wird ausgegeben, wenn sich der Spieler nicht mindestens so weit bewegt hat wie die GPS-Genauigkeit seines Gerätes ist, da müsste man mal weitere Forschungen anstellen, wie genau die bei deinem Gerät sind. 3000km hört sich schwer danach an, als ob sich dein GPS Empfänger kurzzeitig ausschaltet und die Koordinate dann bei N00 00.000 E000 00.000 liegt, wobei das eigentlich eher um die 5000km sein sollten. Müsste man aber auch weiter untersuchen, ob das an deinem Handy liegt, oder ob in WhereYouGo die Abtastrate zu niedrig eingestellt ist.
 
OP
F

FSNTL

Geocacher
die Zahlen (3000) sind nur Beispiele...

Es wird einfach "wild" hochgezählt....

Hm Abtastrate...? Wenn man das einstellen kann werde ich mir das mal ansehen...

0 steht auch auf der Anzeige nachdem 30, 50 oder 100 Km zurückgelegt wurden, da wird einfach nichts gezählt...


Sind alles Rückmeldungen von Android Nutzern (keine Ahnung was Die da machen?9
Auf meinem Garmin und Apfel funktioniert es.
 

dennistreysa

Geocacher
Ja, 0 ist auch richtig, walked_distance() gibt meiner Meinung nach nur die gelaufene Strecke seit der letzten Abfrage zurück, die Gesamtstrecke musst du selber irgendwo speichern. Bleibt der Spieler stehen ist die zurückgelegte Strecke natürlich 0 ;)
 

dennistreysa

Geocacher
Code:
last_pos = ZonePoint(0,0,0)

Daran könnte es liegen. Rufst du denn ganz zu Anfang auch schön brav store_current_position() auf?
Man muss es auch im richtigen Moment aufrufen, also nicht beim Laden der Cartridge, sondern wenn man ein Signal hat, also am besten erst im Spiel.
 

dennistreysa

Geocacher
Ich hab gerade keine Zeit das auf dem Handy zu testen, aber ich habe die Cartridge mal schnell so umgestrickt, dass sie ständig die Daten anzeigt, das macht das Debuggen vielleicht etwas einfacher.
 

Anhänge

  • distance_measure.zip
    3,1 KB · Aufrufe: 41

Charlenni

Geomaster
Hier ein schneller test ohne das Haus zu verlassen :)

Zählt ordentlich hoch und 68,489... m bin ich auch schon gelaufen. Getestet auf einem Nexus 5 mit Android 5.1.1.
 
Oben