2014-10-14 7 views

Odpowiedz

11

Możesz uzyskać lokalizację klienta za pomocą funkcji HTML5. Gdy użytkownik zgodzi się udostępnić swoją lokalizację, otrzymasz ją bez dodatkowej zgody.

<!DOCTYPE html> 
<html> 
<body> 

<p id="demo">Click the button to get your coordinates:</p> 

<button onclick="getLocation()">Try It</button> 

<script> 
var x = document.getElementById("demo"); 

function getLocation() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(showPosition); 
    } else { 
     x.innerHTML = "Geolocation is not supported by this browser."; 
    } 
} 

function showPosition(position) { 
    x.innerHTML="Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude; 
} 
</script> 

</body> 
</html> 

obsługi błędów i odrzucanie drugi parametr sposobu getCurrentPosition() jest używany do obsługi błędów. Określa funkcję uruchomić, jeśli nie dostać lokalizację użytkownika:

function showError(error) { 
    switch(error.code) { 
     case error.PERMISSION_DENIED: 
      x.innerHTML = "User denied the request for Geolocation." 
      break; 
     case error.POSITION_UNAVAILABLE: 
      x.innerHTML = "Location information is unavailable." 
      break; 
     case error.TIMEOUT: 
      x.innerHTML = "The request to get user location timed out." 
      break; 
     case error.UNKNOWN_ERROR: 
      x.innerHTML = "An unknown error occurred." 
      break; 
    } 
} 

Wyświetlanie spowodować mapą

function showPosition(position) { 
    var latlon = position.coords.latitude + "," + position.coords.longitude; 

    var img_url = "http://maps.googleapis.com/maps/api/staticmap?center= 
    "+latlon+"&zoom=14&size=400x300&sensor=false"; 

    document.getElementById("mapholder").innerHTML = "<img src='"+img_url+"'>"; 
} 

Jeśli to nie działa w swoim scenariuszu, można uzyskać przybliżoną pozycję za pomocą lokalizacji IP. Ponieważ nie jest to precyzyjne, ale nie wymaga zgody użytkownika, może to również wpłynąć na potrzeby Twojego scenariusza.

Korzystanie z Google API: Aby otrzymać Darmowy katalog Klucz API, przejdź tutaj: https://developers.google.com/loader/signup?csw=1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
    <head> 
     <title>Get web visitor's location</title> 
     <meta name="robots" value="none" /> 
    </head> 
    <body> 
    <div id="yourinfo"></div> 
    <script type="text/javascript" src="http://www.google.com/jsapi?key=<YOUR_GOOGLE_API_KEY>"></script> 
    <script type="text/javascript"> 
     if(google.loader.ClientLocation) 
     { 
      visitor_lat = google.loader.ClientLocation.latitude; 
      visitor_lon = google.loader.ClientLocation.longitude; 
      visitor_city = google.loader.ClientLocation.address.city; 
      visitor_region = google.loader.ClientLocation.address.region; 
      visitor_country = google.loader.ClientLocation.address.country; 
      visitor_countrycode = google.loader.ClientLocation.address.country_code; 
      document.getElementById('yourinfo').innerHTML = '<p>Lat/Lon: ' + visitor_lat + '/' + visitor_lon + '</p><p>Location: ' + visitor_city + ', ' + visitor_region + ', ' + visitor_country + ' (' + visitor_countrycode + ')</p>'; 
     } 
     else 
     { 
      document.getElementById('yourinfo').innerHTML = '<p>Whoops!</p>'; 
     } 
    </script> 
    </body> 
</html> 
0

Możliwe jest zgadywanie szerokości i długości geograficznej na podstawie początkowego adresu IP żądania internetowego. Potrzebujesz dostępu do bazy danych lub usługi, która zamienia adresy IP na lokalizacje, takie jak Geoip MaxMind (https://www.maxmind.com/en/geoip-demo). Powinny być dostępne wrappery JavaScript/PHP dla usług takich jak te, z których możesz skorzystać.

Wyszukiwanie GeoIP nie jest bardzo niezawodne i może łatwo uzyskać nieaktualną datę. Jeśli potrzebujesz czegoś dokładniejszego, musisz poprosić użytkownika o podanie pewnych informacji, takich jak kod pocztowy.

+0

IP do lokalizacji nie jest tak dokładna ... jeśli osoba jest za pomocą inteligentnego telefonu ... to jest dobre, ale jeśli osoba korzysta z sieci, a lokalizacja dostawcy jest gdzie indziej, to da ci to miejsce .. tak, że to zła informacja. – user3406221

2

Możesz przejść do usługi zewnętrznej jak https://www.geoip-db.com. Zapewniają usługę geolokalizacji opartą na adresach IP, w których nie potrzebujesz uprawnień użytkownika.

Spróbuj przykład:

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Geo City Locator</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
</head> 
<body > 
    <div>Country: <span id="country"></span></div> 
    <div>State: <span id="state"></spa></div> 
    <div>City: <span id="city"></span></div> 
    <div>Latitude: <span id="latitude"></span></div> 
    <div>Longitude: <span id="longitude"></span></div> 
    <div>IP: <span id="ip"></span></div>  
    <script> 
     $.getJSON('https://geoip-db.com/json/geoip.php?jsonp=?') 
     .done (function(location) { 
      $('#country').html(location.country_name); 
      $('#state').html(location.state); 
      $('#city').html(location.city); 
      $('#latitude').html(location.latitude); 
      $('#longitude').html(location.longitude); 
      $('#ip').html(location.IPv4);    
     }); 
    </script> 
</body> 
</html> 
Powiązane problemy