2012-08-08 24 views
5

Auf vielen Seiten habe ich meine aktuelle Stadt ausgedruckt wo ich bin (zB "Hallo nach Berlin."). Wie machen sie das? Was ist dafür alles nötig? Ich denke der Hauptteil ist hier Javascript, aber was alles, was ich brauche, um so etwas in meine eigene App zu implementieren? (oder gibt es ein Schmuckstück für Rails?)Wie erhält man die Geolokalisierung des Benutzers?

Auch möchte ich noch eine Frage stellen - ich bin interessant in der Liste der Staaten (normalerweise in Auswahlbox), wo Benutzer seinen Staat wählen (sagen wir Deutschland), nach dem Zustandswert werden in einer anderen Auswahl alle Regionen in Deutschland angezeigt und nach der Auswahl einer Region werden entsprechende Städte in der ausgewählten Region angezeigt.

Ist es möglich irgendwo diese riesige Datenbank von Staaten/Städten/Regionen zu erhalten? Wäre interessant, etwas Ähnliches in unserer App zu haben, aber ich weiß nicht, wo diese Listen ...

Antwort

3

Sie benötigen einen Browser, der die Geolocation-API unterstützt die Position zu erhalten der Benutzer (Sie benötigen jedoch die Zustimmung des Benutzers (ein Beispiel here), um dies zu tun (die meisten neueren Browser unterstützen diese Funktion, einschließlich IE9 + und die meisten mobilen OS'es Browser, einschließlich Windows Phone 7.5 +)

alles, was Sie haben zu Sie dann aktivieren Sie JavaScript verwenden, um die Lage zu erhalten:

if (window.navigator.geolocation) { 
    var failure, success; 
    success = function(position) { 
     console.log(position); 
    }; 
    failure = function(message) { 
     alert('Cannot retrieve location!'); 
    }; 
    navigator.geolocation.getCurrentPosition(success, failure, { 
     maximumAge: Infinity, 
     timeout: 5000 
    }); 
} 

Das position Objekt Breiten- und Längengrad der Position des Benutzers halten wird (aber dies kann in weniger dicht besiedelten Gebieten auf Desktop-Browsern sehr ungenau, da sie nicht haben, ein GPS-Gerät eingebaut). Um es weiter zu erklären: Hier in Leipzig bekomme ich eine Genauigkeit von ca. 300 Metern auf einem Desktopcomputer - mit dem GPS-Gerät meines Handys erreiche ich eine Genauigkeit von ca. 30 Metern.

Sie können dann fortfahren und die Koordinaten mit dem Google Maps API (siehe here for reverse geocoding) verwenden, um den Standort des Benutzers zu suchen. Es gibt eine few gems for Rails, wenn Sie möchten. Ich hatte nie das Bedürfnis, sie zu benutzen, aber einige Leute scheinen sie zu mögen.

Wie für eine Liste der Länder/Städte verwendeten wir die Daten von Geonames einmal in einem Projekt, aber wir mussten es für unsere Bedürfnisse zuerst konvertieren.

0

Internet Service Provider kaufen große Stücke von IP-Adressen, so was Sie wahrscheinlich sehen, ist ein Backtrace Ihre IP zu einem bekannten ISP. Sie haben eine Datenbank mit ISPs und ihren Standort in der Welt, so dass sie versuchen können zu sehen, wo Sie herkommen. Sie könnten versuchen, eine Site wie zu verwenden, um Ihre Arbeit zu erledigen. Wenn Sie sich umsehen, gibt es bestimmt eine Site, auf der Sie eine IP eingeben und einen Standort abrufen können. Sie senden also einfach eine POST-Anfrage mit der IP Ihres Besuchers an diese Site und kratzen den Standort von der Antwort ab.

Alternativ können Sie versuchen, nach einer ISP-Datenbank zu suchen, die den Standort und die Teile des zugewiesenen IP-Bereichs enthält. Du könntest wahrscheinlich einen für Geld finden, aber ein freier ist vielleicht schwerer zu finden. Alternativ können Sie diese kostenlose Datenbank http://www.maxmind.com/app/geolite

1

Ich habe festgestellt, getCurrentPosition() zu oft ungenau sein, da es nicht viel Zeit auf das GPS warten, um eine gute Genauigkeit zu erhalten.Ich habe ein kleines Stück JavaScript geschrieben, das getCurrentPosition() nachahmt, aber tatsächlich die Position der Uhr verwendet und die Ergebnisse überwacht, bis sie eine bessere Genauigkeit haben.

Hier ist, wie es aussieht:

navigator.geolocation.getAccurateCurrentPosition(onSuccess, onError, {desiredAccuracy:20, maxWait:15000}); 

-Code ist hier - https://github.com/gwilson/getAccurateCurrentPosition

1

Correc Syntax wäre:

navigator.geolocation.getCurrentPosition(successCallBack, failureCallBack); 

Verwendung:

navigator.geolocation.getCurrentPosition(
     function(position){ 
      var latitude = position.coords.latitude; 
      var longitude = position.coords.longitude; 
      console.log("Latitude : "+latitude+" Longitude : "+longitude); 
     }, 
     function(){ 
      alert("Geo Location not supported"); 
     } 
    );   
0

Ich habe u been sing geoip.maxmind.com für eine ganze Weile und es funktioniert 100%. Es kann über HTTP-Anfragen zugegriffen werden.

0

Wenn Sie es vorziehen ES6 zu bedienen und verspricht hier eine andere Version

function getPositionPromised() { 
    function successCb(cb) { 
    return position => cb(position); 
    } 

    function errorCb(cb) { 
    return() => cb('Could not retrieve geolocation'); 
    } 

    return new Promise((resolve, reject) => { 
    if (window.navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(successCb(resolve), errorCb(reject)); 
    } else { 
     return reject('No geolocation support'); 
    } 
    }) 
} 

Und Sie können es wie folgt verwenden:

getPositionPromised() 
    .then(position => {/*do something with position*/}) 
    .catch(() => {/*something went wrong*/}) 
Verwandte Themen