Show markers on google maps dynamically -Rails 3.2

后端 未结 2 1599
离开以前
离开以前 2021-01-07 08:43

i have a working code that shows multiple markers on google map using geocoder such as @nearbys = Place.near(\"#{params[:address]}\", 5,:order => \"di

2条回答
  •  遥遥无期
    2021-01-07 09:13

    well after struggling with jquery arrays and json ,i was able to find this best solution...this is working in all scenarios and all i need is to handle empty and null conditions,which i already did and its working the way i needed.HOPE THIS HELPS SOMEONE

    my controller

    def show_nearby_locations
    
      @nearbys = Place.near("#{params[:address]}", 5,:order => "distance",:units => :km)
      @nearbys.first(10)
    
    end
    

    in my view file

    <%= javascript_tag do%>
     window.nearbys= <%=raw @nearbys.to_json %>;
    
    <%end%>
    

    this is my script inside view

    function initialize() {
        var map;
        var bounds = new google.maps.LatLngBounds();
        var mapOptions = {
            mapTypeId: 'roadmap'
        };
    
        // Display a map on the page
        map = new google.maps.Map(document.getElementById("map-canvas-guest"), mapOptions);
        map.setTilt(45);            
    
        var markers=[];
        var infoWindowContent=[];
        $.each(nearbys, function(index) { 
    
            console.log( data[0][index].latitude,data[0][index].longitude );
            markers.push([nearbys[index]['title'], nearbys[index]['latitude'],nearbys[index]['longitude']]);
            infoWindowContent.push(['
    ' + '

    '+nearbys[index]['title']+'

    ' +'
    '+ '

    '+nearbys[index]['about']+'

    ' + '
    ']); }); // Display multiple markers on a map var infoWindow = new google.maps.InfoWindow(), marker, i; // Loop through our array of markers & place each one on the map for( i = 0; i < markers.length; i++ ) { var position = new google.maps.LatLng(markers[i][1], markers[i][2]); bounds.extend(position); marker = new google.maps.Marker({ position: position, map: map, title: markers[i][0] }); // Allow each marker to have an info window google.maps.event.addListener(marker, 'click', (function(marker, i) { return function() { infoWindow.setContent(infoWindowContent[i][0]); infoWindow.open(map, marker); } })(marker, i)); // Automatically center the map fitting all markers on the screen map.fitBounds(bounds); } // Override our map zoom level once our fitBounds function runs (Make sure it only runs once) var boundsListener = google.maps.event.addListener((map), 'bounds_changed', function(event) { this.setZoom(14); google.maps.event.removeListener(boundsListener); }); }//initialize ends

提交回复
热议问题