2015-07-12 60 views
2

目前正在開發一個帶有Django 1.8的Web應用程序,並希望能夠顯示城市,國家和郵政編碼,而無需用戶輸入註冊,請有人可以幫我解決這個問題嗎?Django - 用戶地理位置

謝謝。

+0

看一看到[GeoDjango內置](https://docs.djangoproject.com/en/1.8/ref/contrib/gis/),與geoip的[鏈接](https://docs.djangoproject.com/en /1.8/ref/contrib/gis/geoip/) – Pynchia

+0

我嘗試使用的GeoIP但當然不會不具有私有IP @Pynchia –

+0

工作! ; D – Pynchia

回答

1

爲此,可以使用HTML5和谷歌地圖API的實現。

  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地理位置API的兩個缺點是1.用戶必須同意與您共享位置,2.在命名事物時它有點不一致。對於不同的國家來說,地方性,次級地理位置,administrative_area_level_X意味着不同的事情。它需要一些思考和一些試驗和錯誤的一致性。 – voger