2012-11-24 47 views
0

我想弄清楚如何使用@map_points = @user.places.to_gmaps4rails将当前位置标记添加到gmaps4rails地图以及来自后端的一些map_points。我看到了下面的帖子:有没有办法将当前位置标记添加到gmaps4rails?

How do I display the user's location with a marker in gmaps4rails?

,并试图执行JavaScript的存在,但它似乎并不奏效。我将此代码添加到我的JavaScript部分,但由于某些原因,回调似乎并没有被解雇:

= gmaps("map_options" => {"detect_location" => true, "center_on_user" => true, "auto_zoom" => false, "zoom" => 12, "auto_adjust" => true, "markers" => {"data" => @map_points}}) 

:javascript 
    Gmaps.map.callback = function() { 
    Gmaps.map.addMarkers({Lat: Gmaps.map.userLocation.lat(), Lng: Gmaps.map.userLocation.lng(), rich_marker: null, marker_picture:""}); 
    } 

编辑: 这里是我现在,但由于某些原因,addListenerOnce在不触发:

- content_for :scripts do 
    :javascript 
    Gmaps.map.callback = function() { 
     google.maps.event.addListenerOnce(Gmaps.map.getMapObject(),'idle', function(){ 
     navigator.geolocation.getCurrentPosition(add_map_marker,displayError); 
     }); 

    }; 

    function add_map_marker(position){ 
     var lat = position.coords.latitude; 
     var lng = position.coords.longitude; 
     Gmaps.map.addMarkers([{ 
     "lng": lng, 
     "lat": lat, 
     "picture": "http://googlemaps.googlermania.com/google_maps_api_v3/en/Google_Maps_Marker.png", 
     "width": "37", 
     "height": "34" 
     }]); 
    } 

    function displayError(error){ 
     alert('There is an error displaying location'); 
    } 

回答

2

您应该使用addMarkers定义here

您应该传递一个json标记数组作为参数,从to_gmaps4rails或具有相同的格式产生。


编辑:

:javascript 
    Gmaps.map.callback = function() { 
    Gmaps.map.addMarkers([ 
     {"description": "", "title": "", "sidebar": "", "lng": "", "lat": "", "picture": "", "width": "", "height": ""} 
    ]); 
    } 

如果说地图不存在,看here

+0

感谢您的帮助,我将如何在我的'show'视图中实现这个功能? – locoboy

+0

@locoboy回答编辑 – apneadiving

+0

这里的问题是如何获得当前的经纬度?我尝试过'Gmaps.map.userLocation.lat()'纬度,但它不起作用...请参阅上面的代码。我还注意到,当我调用这个回调函数时,来自'= gmaps(blah,:data => @ map_points)'调用的所有点都被清除。 – locoboy

1

您究竟在哪里添加了该代码?因为我觉得没有一些重装如:

Gmaps.loadMaps(); 

它无论如何都不会工作......要解决这个问题我想你必须描述整个路径。 你究竟如何加载一切?如果采用标准方式,则需要重新加载地图。

我还建议采取仔细看看(gmaps4rails源)

Gmaps4rails::JsBuilder.create_js 

方法,如果它是你的默认行为尝试开发自己的方法与此自定义注射回调(约34行)。

其它的方法是调用一些Ajax与UJS做:

$('#map').html('<%= escape_javascript(gmaps({:last_map => false})) %>'); 
    Gmaps.map = new Gmaps4RailsGoogle(); 
    Gmaps.load_map = function() { 
    Gmaps.map.map_options.maxZoom = 15; 
    Gmaps.map.initialize(); 
    Gmaps.map.markers = <%=raw @json %>; 
    Gmaps.map.create_markers(); 
    Gmaps.map.adjustMapToBounds(); 
    Gmaps.map.callback(); 
    }; 
    Gmaps.loadMaps(); 
相关问题