2014-10-14 4 views
7

Ich erstelle ein Portal mit MYS QL, JavaScript und Ajax und ich möchte den Standort des Benutzers in Bezug auf Breite und Länge abrufen. Wenn es nicht möglich ist, den Standort abzurufen, ohne zu fragen, dann kann der Benutzer, nachdem er die Erlaubnis erteilt hat, den Standort von einer beliebigen Seite abrufen, ohne ihn jemals erneut zu fragen.Wie kann ich den Standort des Benutzers erhalten, ohne um die Erlaubnis zu fragen, oder wenn der Benutzer es einmal erlaubt hat, also nicht mehr nachfragen zu müssen?

Vielen Dank im Voraus.

Antwort

11

Sie können den Speicherort des Clients mithilfe von HTML5-Funktionen abrufen. Sobald der Benutzer seinen Standort freigegeben hat, erhalten Sie ihn ohne weitere Genehmigung.

<!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> 

Fehlerbehandlung und Rejections Der zweite Parameter der getCurrentPosition() Methode wird verwendet, um Fehler zu behandeln. Es gibt eine Funktion ausführen, wenn sie den Standort des Nutzers erhalten fehlschlägt:

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

das Ergebnis in einer Karte

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+"'>"; 
} 

anzeigen Wenn dies nicht in Ihrem Szenario funktioniert, können Sie erhalten eine ungefähre Position unter Verwendung der IP-Adresse. Da dies nicht präzise ist, aber keine Zustimmung des Benutzers erfordert, kann dies auch die Anforderungen Ihres Szenarios erfüllen.

Mit Google API: Um Ihre Gogle API Key zu erhalten, gehen Sie hier: 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

Es ist möglich, den Breiten- und Längengrad basierend auf der Ursprungs-IP-Adresse einer Webanfrage zu erraten. Sie benötigen Zugriff auf eine Datenbank oder einen Dienst, der IP-Adressen an Standorten wie MaxMinds GeoIP (https://www.maxmind.com/en/geoip-demo) zuordnet. Es sollte JavaScript/PHP-Wrapper für Dienste wie diese geben, die Sie verwenden können.

GeoIP-Lookup ist nicht sehr zuverlässig und kann leicht veralten. Wenn Sie etwas genaueres benötigen, müssen Sie einige Informationen vom Benutzer anfordern, z. B. eine Postleitzahl.

+0

IPs Lage ist nicht so genau ... wenn Person Smartphone wird mit ... dann ist es gut, aber wenn die Person das Web benutzt und der Standort des Anbieters irgendwo anders ist, dann wird es dir diesen Ort geben ... also wäre das eine falsche Information. – user3406221

2

Sie für einen externen Dienst wie https://www.geoip-db.com gehen kann. Sie bieten einen Geolocation-Dienst basierend auf IP-Adressen, für die Sie keine Benutzerrechte benötigen.

Versuchen Sie dieses Beispiel:

<!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>