2015-11-30 30 views
0

我聽說過GeocoderGeokit但我知道的是,他們只在我們提供其功能的某些參數時才起作用。城市/國家名稱或位置座標。但我想要的是讓我自己的位置在任何寶石上的軌道上紅寶石'Area name'latitudelongitude。不建議request.location,因爲它給我的本地主機地址,而不是我的Internet IP。所以PLZ建議任何合理的,因爲我完全嚇壞了獲取位置座標在軌道上的紅寶石

+1

不能在本地測試沒有通過一些假的IP地址,請檢查該【答案】(HTTP ://stackoverflow.com/a/17034967/3863146),還有一件事,你只能提出一些有限的獲取用戶位置的請求,之後你將開始收到錯誤消息。你也可以捕獲這個異常,但最終只允許有限的請求。 – sahil

+0

謝謝sahil我認爲127.0.0.1將繼續,直到我們在當地,所以我們必須提供IP作爲回答提及 – ImranNaqvi

+0

結帳[這](https://github.com/alexreisner/geocoder#google-google)同時選擇您想要用於確定位置的服務。 – sahil

回答

1

你可以使用

ip = request.remote_ip 

的IP
ip = request.env['REMOTE_ADDR'] 

,或者如果你正在使用devise進行用戶身份驗證,你可以只是通過devise

獲得的IP搜索

使用Geocodersearch方法獲取位置和座標。

location = Geocoder.search(ip) 
country = location["country_name"] 
state = location["region_name"] 
city = location["city"] 
zipcode = geoloc["zipcode"] 
latitude = geoloc["latitude"] 
longitude = geoloc["longitude"] 
area_code = geoloc["area_code"] 
+0

爲什麼要設計獲取IP? –

+0

我只是在詢問他是否已經在使用'devise',但如果不是這樣只是通過ip請求'request.env ['REMOTE_ADDR']' –

0

你也可以試試這個

location = IpGeocoder.geocode(request.env['REMOTE_ADDR']) 

這裏是documentation爲同一

+0

但是爲了這個目的我們需要用戶的ip,我們不需要有和現在'request.env ['REMOTE_ADDR']'告訴我們'127.0.0.1' – ImranNaqvi

+0

@ImranNaqvi它發生在你使用本地時,請看這裏http://stackoverflow.com/questions/6115589/geocoder -how-to-test-locally-when-ip-is-127-0-0-1?lq = 1 –

+0

我討厭它;( - 但我找到了一個解決方案,我將在稍後解釋 – ImranNaqvi