我有一个Rails 3.2.19应用程序,我想跟踪车辆(单位)使用地理编码和绘图的谷歌地图。
我想出了一种获取坐标的方法,方法是使用taip_parser gem并创建一个rake任务,该任务不断侦听入站taip数据,解析纬度和经度,并更新车辆模型的latitude和longitude字段。在那里,我能够用gmaps4rails宝石绘制车辆位置。它的局限性在于,您必须使用使用TAIP语言的特定3G/4G调制解调器将lat/long发送到Rails服务器,以便rake任务能够解析它。
我想要做的是,不要使用这些昂贵的3G/4G调制解调器,而是从车辆中的移动设备(目前是iPad)中提取坐标。
因此,我的想法是使用浏览器中的HTML5地理定位功能获取单元的纬度和经度,并将其存储到当前通过Ajax进行的页面/部分刷新时单元的纬度/经度数据库字段中。
这将打破对现有设备的依赖,并允许任何启用GPS的移动设备与此功能兼容。
目前,在我的应用程序中,我有gmaps4rails来绘制单元,使用我的rake任务和taip数据解析,以及我正在测试的geocoder,因为它们是为另一个目的创建的。
我的问题是:
有人能提供如何在rails视图中使用HTML5地理定位功能的示例吗?在视图中启用HTML5地理定位之后,如何将纬度和经度分别输入到相应的模型纬度和经度字段中?可能是使用gmaps4rails对多个对象的经度进行迭代的例子
如果我的问题太模糊或复杂,请让我知道,这样我就可以编辑它,使事情更清楚,我想做什么。
发布于 2014-09-30 12:23:33
通过在我的Rails应用程序中使用一些ajax和自定义控制器操作,我就能够做到这一点。使用Ajax和一个隐藏的表单,我使用HTML5提取坐标,用值填充表单,并提交到ajax。
守则见下文:
控制器
def update_gps
@unit = current_user.unit
if @unit.update_attributes(params[:unit])
respond_to do |format|
format.html {redirect_to mdt_path}
format.js { render "index"}
end
end
endindex.html.erb
<div class="hidden">
<%= form_for(@unit, :url => update_gps_mdt_index_path, :html => {:method => :post}) do |f| %>
<%= f.text_field :latitude %>
<%= f.text_field :longitude %>
<%= f.button :submit %>
<% end %>
</div>
<script>
$(function() {
setInterval(function(){
$.getScript("/mdt");
}, 10000);
});
function updateCurrentLocation(){
navigator.geolocation.getCurrentPosition(function(position) {
var c = position.coords
var location = c.latitude +", "+ c.longitude
console.log(location)
var $updateLocationForm = $(".edit_unit")
$("#unit_latitude").val(c.latitude)
$("#unit_longitude").val( c.longitude)
var data = $(".edit_unit").serialize();
console.log(data)
$.ajax({
type: "POST",
url: $(".edit_unit").attr("action"),
data: data,
success: function(data) {
console.log('working: '+data);
},
error: function(msg) {
console.log('not working '+msg);
}
});
});
}
setInterval(updateCurrentLocation, 10000)
</script>https://stackoverflow.com/questions/26005477
复制相似问题