2012-08-08 14 views
5

Na wielu stronach widziałem wydrukowane moje obecne miasto, w którym jestem (np. "Hello to Berlin."). Jak oni to robią? Jakie wszystko jest potrzebne? Domyślam się, że główną częścią jest tutaj javascript, ale co jest potrzebne do implementacji czegoś takiego do mojej własnej aplikacji? (czy jest jakiś klejnot do Rails?)Jak uzyskać geolokalizację użytkownika?

Chciałbym jeszcze zapytać o jedną rzecz - jestem interesujący na liście stanów (zwykle w polu wyboru), gdzie użytkownik wybiera swój stan (powiedzmy Niemcy), zgodnie z wartością stanu są w innym wyborze wyświetlane wszystkie regiony w Niemczech i po wybraniu regionu wyświetlane są odpowiednie miasta w wybranym regionie.

Czy możliwe jest uzyskanie dowolnej ogromnej bazy danych państw/miast/regionów? Byłoby interesujące mieć coś podobnego w naszej aplikacji, ale nie wiem, gdzie te listy się znajdują ...

Odpowiedz

3

Trzeba przeglądarkę, która obsługuje interfejs API geolokalizacji, aby uzyskać lokalizację użytkownik (potrzebna jest jednak zgoda użytkownika (np. here) (większość nowszych przeglądarek obsługuje tę funkcję, w tym IE9 + i większość przeglądarek mobilnych, w tym Windows Phone 7.5+).

wszystko co masz do nie jest więc używać JavaScript aby uzyskać lokalizację:

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 
    }); 
} 

Przedmiotem position będzie utrzymać szerokość i długość geograficzną pozycji użytkownika (jednak może to być bardzo niedokładne w mniej gęsto zaludnionych obszarów na przeglądarek desktopowych, ponieważ nie mają one wbudowane urządzenie GPS). Aby wyjaśnić dalej: tutaj, w Lipsku, uzyskując dokładność około 300 metrów na komputerze stacjonarnym - uzyskuję dokładność około 30 metrów za pomocą urządzenia GPS mojego telefonu komórkowego.

Następnie można przejść i użyć współrzędnych z Google Maps API (patrz here for reverse geocoding), aby sprawdzić lokalizację użytkownika. Jeśli chcesz, jest few gems for Rails. Nigdy nie czułem potrzeby korzystania z nich, ale niektórzy ludzie lubią je.

Jeśli chodzi o listę krajów/miast, użyliśmy danych uzyskanych z Geonames raz w projekcie, ale musieliśmy najpierw przekonwertować go na nasze potrzeby.

0

Dostawcy usług internetowych kupują duże porcje adresów IP, więc to, co najprawdopodobniej widzicie, to cofnij twoje IP do znanego ISP. Mają bazę danych z dostawcami usług internetowych i ich lokalizacją na świecie, dzięki czemu mogą sprawdzić, skąd jesteś. Możesz spróbować użyć strony takiej jak http://www.ipaddresslocation.org/, aby wykonać swoją pracę. Jeśli się rozejrzysz, z pewnością znajdziesz stronę, która pozwala ci wpisać adres IP i uzyskać lokalizację, więc po prostu wyślij prośbę POST do tej witryny z adresem IP odwiedzającego i zeskanuj lokalizację z odpowiedzi.

Alternatywnie można spróbować wyszukać bazę danych dostawcy usług internetowych, która ma lokalizację i jakie fragmenty zakresu adresów IP zostały przydzielone. Prawdopodobnie można znaleźć jedną dla pieniędzy, ale wolna może być trudniejsza do znalezienia. Alternatywnie, sprawdź darmowe bazy http://www.maxmind.com/app/geolite

1

Zauważyłem, że getCurrentPosition() często jest niedokładne, ponieważ nie spędza dużo czasu, czekając na GPS, aby uzyskać dobrą dokładność.Napisałem mały fragment kodu JavaScript, który naśladuje kod getCurrentPosition(), ale w rzeczywistości używa pozycji oglądania i monitoruje wyniki, które powracają, dopóki nie poprawią dokładności.

Oto jak to wygląda:

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

Code jest tutaj - https://github.com/gwilson/getAccurateCurrentPosition

1

składnia Correc byłoby:

navigator.geolocation.getCurrentPosition(successCallBack, failureCallBack); 

Zastosowanie:

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

Byłem u śpiewaj geoip.maxmind.com od dłuższego czasu i działa w 100%. Można uzyskać do niego dostęp za pośrednictwem żądań HTTP.

0

Jeśli wolisz używać ES6 i obiecuje tutaj jest kolejna wersja

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'); 
    } 
    }) 
} 

I można go używać tak:

getPositionPromised() 
    .then(position => {/*do something with position*/}) 
    .catch(() => {/*something went wrong*/}) 
Powiązane problemy