2015-07-12 4 views
2

В настоящее время разрабатывает веб-приложение с Django 1.8 и хочет показывать город, страну и почтовый индекс, не будучи введенным пользователем для регистрации, пожалуйста, кто-нибудь может мне помочь в этом?Django - User Geolocation

Thank you.

+0

Обратите внимание на [GeoDjango] (https://docs.djangoproject.com/en/1.8/ref/contrib/gis/), с GeoIP [link] (https://docs.djangoproject.com/en /1.8/ref/contrib/gis/geoip/) – Pynchia

+0

Я пробовал использовать GeoIP, но не работает с частным IP @Pynchia –

+0

, конечно же, нет! ; D – Pynchia

ответ

1

Вы можете реализовать это с помощью API-интерфейсов HTML5 и Google Maps.

  1. Используя HTML5 Geolocation APIs, вы получите координаты местоположения пользователя.
  2. Используя координаты и Google Maps API for reverse geocoding, вы получите полный адрес пользователя.

    function checkLocation() { //geolocation API options var options = { maximumAge: 5 * 60 * 1000, enableHighAccuracy: true, timeout: 20000}; //success getting the geolocation function success(ppos) { lat = ppos.coords.latitude; lng = ppos.coords.longitude; codeLatLng(lat, lng); } //error when getting the geolocation function error(err) { var errorMessage = "Error:"; switch(err.code) { case err.TIMEOUT: errorMessage = 'Error: Attempts to retrieve location timed out.'; break; case err.POSITION_UNAVAILABLE: errorMessage = "Error: Your browser doesn't know where you are."; break; case err.PERMISSION_DENIED: errorMessage = 'Error: You have to give us permission!'; break; case err.UNKNOWN_ERROR: errorMessage = 'Error: Unknown error returned.'; break; default: errorMessage = 'Error: ' + err + ' ' + err.code; } } if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(success, error, options); } } function codeLatLng(lat, lng) { var lat = parseFloat(lat); var lng = parseFloat(lng); var latlng = new google.maps.LatLng(lat, lng); geocoder.geocode({'latLng': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (results[1]) { return results[1].formatted_address; } else { alert('No results found'); } } else { alert('Geocoder failed due to: ' + status); } }); }

Я думаю, что это решение может дать вам страну и город, но я не думаю, что это даст вам почтовый индекс.

+0

Он может также предоставить почтовый индекс, но только там, где он доступен. Это большинство стран. Два недостатка использования Google Geolocation API: 1. Пользователь должен согласиться предоставить вам доступ к местоположению и 2. Это как-то несовместимо с именованием вещей. Локальность, субблочность, Administrative_area_level_X означают разные вещи для разных стран. Для согласованности требуется некоторое мышление и некоторые пробные ошибки. – voger