2013-07-17 63 views
3

看起來很簡單,但我很掙扎。一個使用HTML5地理位置獲取用戶位置並保存到數據庫的rails應用程序

這是我迄今在視圖中的。 我顯示位置座標只是爲了測試它的工作。 但我也想堅持數據庫,因此ajax調用。 我是以正確的方式做這個還是有一個更簡單或更好的方法?

<p id="demo">Click the button to get your coordinates:</p> 
<button onclick="getLocation()">Try It</button> 
<script> 
    var x=document.getElementById("demo"); 
    var lat; 
    var long; 
    function getLocation() 
    { 
     if (navigator.geolocation) 
     { 
      navigator.geolocation.getCurrentPosition(showPosition); 

     } 
     else{x.innerHTML="Geolocation is not supported by this browser.";} 
    } 
    function showPosition(position) 
    { 
     lat = position.coords.latitude; 
     long = position.coords.longitude; 
     x.innerHTML="Latitude: " + lat + 
       "<br>Longitude: " + long; 

     $.ajax({ 
      type: 'POST', 
      url: 'http://localhost:3000/locations', 
      data: { lat: lat, long: long }, 
      contentType: 'application/json', 
      dataType: 'json' 

     }); 
    } 
</script> 

回答

7

您可以嘗試一種「更簡單」的方式,使用geocoder gem,這提供了多種方法來獲取用戶位置,其中一個是通過請求獲取的。

request.location.city => Medellin 
request.location.country => Colombia 

你可以在以下鏈接

Railscast

Official WebPage

GitHub

+0

這是一個偉大的寶石和非常有益的 - 然而,它沒有在附近的準確HTML5地理定位。儘管如此,它是一個好的回退。 –

2

結帳this answer。基本上,只需通過cookie設置地理位置,然後從控制器的cookie中讀取lat和long。

0

有用的信息,下面是我是如何做到的:

控制器:

def location 
    respond_to do |format| 
     format.json { 
     lat = params["lat"] 
     lng = params["lng"] 
     radius = 5000 
     type = "restraunt" 
     key = "-" 
     url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=#{lat},#{lng}&radius=#{radius}&types=#{type}&key=#{key}" 
     data = JSON.load(open(url)) 
     render json: { :data => data } 
     } 
    end 
    end 

的routes.rb:

get "/location" => "application#location" 

觀點:

function getLocation(){ 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position){ 
      $.ajax({ 
      type: 'GET', 
      url: '/location', 
      data: { lat: position.coords.latitude, lng: position.coords.longitude }, 
      contentType: 'application/json', 
      dataType: 'json' 
      }).done(function(data){ 
       console.log(data) 
      }); 
     }); 
    } 
    } 
相關問題