我在使用地理编码器和谷歌地图的应用程序中遇到了一些问题。基本上,我正在开发的网站会注册场地,这些场地的地址会保存为地图上的标记。在首页是一个搜索栏,输入地址和搜索半径。结果进入带有场地标记的地图页面,如果搜索范围内有标记并且输入了半径,那么它会显示这些标记,并自动调整地图以将它们全部包含在内。
如果搜索半径中没有标记,我已经将临时不可见标记放置在确切的搜索位置,然后使用地理编码器我可以计算到该点最近的标记,然后删除临时标记并放置一个最近点的新标记。这样一来,如果该半径范围内没有标记,地图就不会仅仅指向南大西洋,并且它可以向用户显示与他们搜索的任何内容最近的地点,而不仅仅是说“该半径范围内什么都没有,再试一次” '。
我确信我解释它的方式听起来很混乱,可能有更好的方法来做到这一点。但基本上我想要它,以便搜索栏转到地址并包含半径中的所有标记,如果该半径中没有标记,则捕捉到最近的标记并包含周围的任何标记。
但它并不像希望的那样工作。在我的控制器中,我有..
@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 和编码非常陌生,所以我希望我的问题是有道理的。