2013-05-19 36 views
2

我的應用程序使用地理編碼器和谷歌地圖的軌道有點問題。基本上我正在開發的站點註冊場地,這些場地的地址在地圖上被保存爲標記。在首頁是一個搜索欄,輸入地址和搜索半徑。結果會顯示在帶有地點標記的地圖頁面上,如果在搜索和半徑內輸入了標記,則會使用地圖自動擬合顯示這些標記以將它們全部包含在內。Rails - Geocoder和谷歌地圖幫助需要

如果在搜索半徑中沒有標記,我已經將其設置爲在臨時搜索位置放置一個臨時不可見標記,然後使用地理編碼我可以計算該點最近的標記,然後刪除臨時標記並在最近的點放置一個新的標記。這樣一來,如果沒有標記位於該半徑範圍內,地圖就不會僅僅到達南大西洋,並且它可以向用戶顯示他們搜索到的最接近的地點,而不僅僅是說「在該半徑內沒有任何東西,再試一次」 」。

我敢肯定,我已經解釋過,這聽起來很混亂,可能有更好的辦法。但基本上我需要它,以便搜索欄到達地址幷包含半徑內的所有標記,並且如果該半徑內沒有標記,則對齊最近的標記並在其周圍包含任何標記。

雖然它不像預期的那樣工作。在我的控制器我有..

@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 

鐵軌似乎認爲他們都是字符串。它不會崩潰,但它也不能正常工作。使用像join和merge這樣的方法雖然會崩潰。我想我可能已經做得比我應該做的更復雜了。我的整個控制器有點亂。它可以在github上看到here。對於長期的問題抱歉。我是一個非常新的軌道和編碼的一般,所以我希望我的問題是有道理的。

+0

你想結束一個gmap4rails對象的數組? –

+0

如果我的搜索結果附近有標記,那麼json變量似乎可以獲得所需的所有對象。我只是想要一種方式,如果沒有物體在我的搜索附近,它會自動走到最近的標記處進行搜索。據我可以告訴刪除new_search_location和json_search似乎使它的工作。 – pjsim

回答

0

好吧我已經知道了。 @ new_search_location和@json_search變量是完全不相關的,並且是導致不需要的重疊標記的原因。現在一切都很好,儘管我願意提供任何建議,或許更好的方式來做到這一點。