Rails 用のジオコーダーと Google マップを使用しているアプリで、少し問題が発生しました。基本的に、私が開発しているサイトは会場をサインアップし、それらの会場のアドレスは地図上にマーカーとして保存されます。フロント ページには、住所と検索範囲を入力する検索バーがあります。結果は、会場マーカーが表示されたマップ ページに移動し、入力された検索および半径内にマーカーがある場合は、それらのマーカーがすべて含まれるように自動調整されたマップで表示されます。
検索半径にマーカーが存在しない場合、一時的な非表示マーカーが正確な検索位置に配置されるようにしました。その後、ジオコーダーを使用して、そのポイントに最も近いマーカーを計算し、一時マーカーを削除して配置します最も近い点に新しい新しいマーカー。これは、その半径内にマーカーがない場合にマップが南大西洋に移動するのではなく、「その半径内には何もないので、もう一度やり直してください」などと言うだけでなく、ユーザーが検索したものに最も近い会場を表示できるようにするためです。 '。
私が説明した方法ではかなり混乱するように聞こえると思いますが、おそらくもっと良い方法があるでしょう。しかし、基本的には、検索バーが住所に移動し、半径内のすべてのマーカーを含み、その半径内にマーカーがない場合は、最も近いマーカーにスナップし、その周りにマーカーを含めるようにします。
しかし、期待どおりには機能しません。私のコントローラーには..
@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
ビューの gmaps4rails に @json を配置すると、検索範囲内に存在するすべての会場マーカーが表示されます。それはうまくいきますが、検索の半径にマーカーがない場合は、大西洋に行きます..
@json_search を gmaps4rails に入れると、最も近い会場に不可視のマーカーが置かれます。ただし、他の会場は表示されず、すべてのマーカーが非表示になります。2つを組み合わせることができれば、うまくいくかもしれないので試してみました
@json_all = @json + @json_search
レールは両方とも文字列であると考えているようです。クラッシュはしませんが、適切に動作しません。ただし、join や merge などのメソッドを使用するとクラッシュします。おそらく、これを必要以上に複雑にしてしまったと思います。私のコントローラー全体が少し混乱しています。github hereで見ることができます。長い質問で申し訳ありません。私はレールとコーディング全般に非常に慣れていないので、私の質問が理にかなっていることを願っています.