2

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

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

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

但它并不像希望的那样工作。在我的控制器中,我有..

 @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 似乎认为它们都是字符串。它不会崩溃,但也无法正常工作。但是,使用 join 和 merge 等方法确实会崩溃。我想我可能让这比我应该做的更复杂。我的整个控制器有点乱。可以在 github 上看到。对不起,很长的问题。总的来说,我对 Rails 和编码非常陌生,所以我希望我的问题是有道理的。

4

1 回答 1

0

好的,我已经想通了。@new_search_location 和 @json_search 变量是完全不必要的,是导致不需要的重叠标记的原因。现在一切都很好,尽管我愿意接受任何关于可能是更好的方法的建议。

于 2013-05-20T01:30:33.697 回答