Rails - Geocoder和Google Maps帮助需要

时间:2013-05-19 09:33:25

标签: ruby-on-rails gmaps4rails

我的应用中遇到了一些问题,使用地理编码器和谷歌地图作为rails。基本上我正在开发的网站注册场地,这些场地的地址被保存为地图上的标记。在首页上是一个搜索栏,其中输入地址和搜索半径。结果将转到带有场地标记的地图页面,如果搜索中有标记并输入半径,则会显示带有地图自动调整的标记以将其全部包含在内。

如果搜索半径中没有标记,我已将其设置为在临界搜索位置放置临时不可见标记,然后使用地理编码器我可以计算到该点的最近标记,然后删除临时标记并在最近的位置放置一个新的新标记。这样,如果没有标记在该半径范围内,地图不仅会到达大西洋南部,而且它可以向用户显示最接近他们搜索内容的地点,而不仅仅是说“在该半径内没有任何东西”,请再试一次”。

我确信我解释它的方式让它听起来很混乱,而且可能有更好的方法。但基本上我想要它,以便搜索栏转到地址并包括半径中的所有标记,如果该半径中没有标记,则捕捉到最近的标记并包括其周围的任何标记。

尽管如此,它并没有那么好用。在我的控制器中,我有..

 @venuesAll = Venue.all

  @myArray = Array.new

  @search_location = Venue.create(:address => params[:search])

  @venuesAll.each do |venue|
   @myA = @myArray.push(@search_location.distance_from(venue)) if @search_location.distance_from(venue) != 0.0
  end

  @myAI = @myA.index(@myA.min)

  @closestVenueName = @venuesAll[@myAI].name
  @closestVenueAddress = @venuesAll[@myAI].address

  @search_location.destroy

  @new_search_location = Venue.create(:address => @closestVenueAddress)

  @json = Venue.near(@closestVenueAddress, 5, :order => :distance).to_gmaps4rails do |venue, marker|
    marker.infowindow render_to_string(:partial => "/venue_locations/infowindow", :locals => { :venue => venue})
    marker.title   "i'm the title"
  end

  @json_search = Venue.last.to_gmaps4rails do |venue, marker|
    marker.picture({
      :picture => "",
      :width   => 32,
      :height  => 32
     })
  end

在视图中将@json放入我的gmaps4rails中,可以获得搜索半径中存在的所有场地标记。它可以正常工作,但如果搜索在半径中没有标记,那么它将进入大西洋..

将@json_search放入gmaps4rails会在最近的场地放置一个隐形标记。但它没有显示其他场所,所有标记都是看不见的。 如果我可以将两者合并,那么也许它会起作用,所以我试过了

@json_all = @json + @json_search 

因为rails似乎认为它们都是字符串。它不会崩溃,但它也无法正常工作。使用连接和合并等方法确实会崩溃。我想我可能比我应该做的更复杂。我的整个控制器有点乱。它可以在github here上看到。很抱歉这个问题很长。我是一个非常新的rails和编码,所以我希望我的问题是有道理的。

1 个答案:

答案 0 :(得分:0)

好的,我已经弄清楚了。 @new_search_location和@json_search变量是完全不必要的,是导致不需要的重叠标记的原因。现在一切都好,虽然我对任何可能更好的方法的建议持开放态度。

相关问题