2011-02-18 57 views

回答

10

這裏是我做到了,我只能更換

在您看來(index.html.erb):

<%= gmaps({ "map_options" => { "zoom" => 15, 
           "auto_adjust" => false, 
           "detect_location" => true, 
           "center_on_user" => true }}, false, true) %> 
用戶完成平移或縮放,如果您需要不同的行爲,然後使用不同的事件偵聽器後的標記3210

在視圖的底部添加:

<script type="text/javascript" charset="utf-8"> 

function gmaps4rails_callback() { 
    google.maps.event.addListener(Gmaps4Rails.map, 'idle', function() { 
     var bounds = Gmaps4Rails.map.getBounds(); 
     drawItems(bounds); 
    }); 
} 

</script> 

在application.js中(使用jQuery):

function drawItems(theBounds) { 
    var url = '/venues.json/?sw_y=' + theBounds.getSouthWest().lng() + 
          '&sw_x=' + theBounds.getSouthWest().lat() + 
          '&ne_y=' + theBounds.getNorthEast().lng() + 
          '&ne_x=' + theBounds.getNorthEast().lat(); 
    $.get(url, function(newItemData) { 
     Gmaps4Rails.replace_markers(newItemData); 
    }); 
} 

venues_controller#指數:

def index 
    # Only pull venues within the visible bounds of the map 
    if (params[:sw_y] && params[:sw_x] && params[:ne_y] && params[:ne_x]) 
     bounds = [ [params[:sw_x].to_f, params[:sw_y].to_f], 
       [params[:ne_x].to_f, params[:ne_y].to_f] ] 
     @venues_within_bounds = Venue.within_bounds(bounds) 
    else 
     @venues_within_bounds = Venue.all 
    end 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { 
      @data = @venues_within_bounds.collect {|v| { 
        :longitude => v.longitude, 
        :latitude => v.latitude, 
        :picture => v.marker_picture, 
        :title => v.marker_title 
      } 
      render :json => @data 
     } 
    end 
end 

Venue.rb模型(使用mongodb和mongoid):

def self.within_bounds(bounds) 
    self.where(:location.within => {"$box" => bounds }) 
end 
+0

這是一個很好的答案,+1 – apneadiving 2011-05-24 22:32:10

2

哇,你真的爲寶石:)

這裏很多反饋我如何使用它:

  • 只加載有用的標記,我使用geokit-rails3它們進行過濾及以下範圍:Location.in_bounds([@south_west_point, @north_east_point], :origin => @somewhere)

  • 當變焦或跨度,我只能依靠其擰緊過程聚類

  • 配置,地圖中心和原變焦,看到here

  • 你應該編寫自己的方法來獲得當前的邊界,可以考慮拉:)