majas: Javascript Handy Standort ermitteln

Hallo,

ich bin verzweifelt auf der Suche nach einem Javascript das den genauen Handy (Mobilen) Standort ermittelt, womit man dann Daten aus einer Datenbank (Longitude + Latitude) abgleichen kann.

Am besten mit enableHighAccuracy:

navigator.geolocation.getCurrentPosition(function(position){
successFunction(position),
errorFunction(),
{
timeout: 0,
enableHighAccuracy: true,
maximumAge: Infinity
}
});

Ich möchte mir aus meiner Datenbank (MySql) Objekte im Umkreis anzeigen lassen können.

Ich habe auch schon ein PHP Script wo eigentlich nur noch die Daten (lat + lng = Standort) eingefügt werden müssen

SELECT id, ( 6371 * acos( cos( radians(37) ) * cos( radians( lat ) )  
* cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin(radians(lat)) ) ) AS distance  
FROM markers  
HAVING distance < 5  
ORDER BY distance  
LIMIT 0 , 20;  

Ich bin für jede Hilfe dankbar

Gruß Andy

  1. ich bin verzweifelt auf der Suche nach einem Javascript das den genauen Handy- (Mobilen) Standort ermittelt

    Da musst du nicht verzweifeln, sondern einfach erstmal in die Anleitungen schauen, zum Beispiel https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/getCurrentPosition.

    Würdest du deinen Code sauber schreiben, wäre dir schnell aufgefallen, dass du getCurrentPosition() nicht, wie gewünscht, drei Parameter übergibst, sondern nur einen, und zwar eine anonyme Funktion mit merkwürdigem Inhalt. Übersichtlich eingerückt wird dein Fehler deutlicher:

    navigator.geolocation.getCurrentPosition(
      function(position) {
        successFunction(position),
        errorFunction(),
        {
          timeout: 0,
          enableHighAccuracy: true,
          maximumAge: Infinity
        }
      }
    );
    

    Davon unabhängig sollte timeout nicht 0 sein, denn 0 Millisekunden sind für die Funktionsausführung selbst bei Hektikern etwas arg wenig. Falls es egal ist, wie lange die Positionsbestimmung dauert, benutze Infinity bzw. lass' den timeout-Wert ganz weg, denn Infinity ist der Vorgabewert.

    Ob es sinnvoll ist, maximumAge auf Infinity zu setzen und damit möglicherweise die Position von vorgestern zu bekommen, mag Ansichtssache sein (oder Anwendungssache).

    navigator.geolocation.getCurrentPosition(
      function(position) { // wird aufgerufen, sobald Position bekannt
        // position per Ajax an Server senden
      },
      function() { // wird aufgerufen, falls ein Fehler auftritt
         /* … den wir hier geflissentlich ignorieren, um den 
          * Anwender nicht mit Fehlermeldungen abzulenken
          */
      },
      {
        timeout: Infinity,
        enableHighAccuracy: true,
        maximumAge: 3600000 // = eine Stunde in Millisekunden, 60 * 60 * 1000
      }
    );
    

    Falls es auch bei Ajax hapert: https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started.

  2. navigator.geolocation.getCurrentPosition(function(position){
    successFunction(position),
    errorFunction(),
    {
    timeout: 0,
    enableHighAccuracy: true,
    maximumAge: Infinity
    }
    });
    

    Das ist syntaktisch nicht richtig. Du hast um die Parameter-Liste von getCurrentPosition() eine anynome Funktion notiert. Ferner rufst du die Callback-Parameter direkt auf, das möchtest du vermutlich nicht. Und du solltest vernünftige Werte für das Timeout und maximumAge angeben.

    navigator.geolocation.getCurrentPosition(
       successFunction,
       errorFunction,
       {
          timeout: 500, // 500 ms
          enableHighAccuracy: true,
          maximumAge: 1000*600 // 5 min.
       }
    );
    
    function successFunction (position) {
      // Hier kannst du nun die Koordinaten aus position lesen
    }
    
    1. Tach,

      Und du solltest vernünftige Werte für das Timeout und maximumAge angeben.

            timeout: 500, // 500 ms
      

      ich bin hier ohne praktische erfahrung, aber 500ms wirkt mir sehr kurz, in der Zeit würde ich auf meinem Handy die zwei Sicherheitsabfragen (Browser + OS), die ich positiv beantworten müsste, vermutlich nicht schaffen (ok, zusätzlich müsste ich noch die Positionsbestimmung einschalten und da auf ein Ergebnis warten).

      mfg
      Woodfighter

      1. ich bin hier ohne praktische erfahrung, aber 500ms wirkt mir sehr kurz, in der Zeit würde ich auf meinem Handy die zwei Sicherheitsabfragen (Browser + OS), die ich positiv beantworten müsste, vermutlich nicht schaffen (ok, zusätzlich müsste ich noch die Positionsbestimmung einschalten und da auf ein Ergebnis warten).

        Wenn noch keine Berechtigungen erteilt sind, dann läuft auch die Uhr für den Timeout noch nicht http://www.w3.org/TR/geolocation-API/#rate-limit. Eine halbe Sekunde erschien mir plausibel, es muss dennoch keine gute Wahl sein. Ich weiß auch nicht, was man da typischerweise einträgt. Mit 0 wird jedenfalls sofort ein Fehler ausgelöst.

        1. Tach,

          Wenn noch keine Berechtigungen erteilt sind, dann läuft auch die Uhr für den Timeout noch nicht http://www.w3.org/TR/geolocation-API/#rate-limit.

          ah, danke fürs raussuchen.

          mfg
          Woodfighter