2013-05-19 3 views
2

J'ai un peu de problème dans mon application en utilisant geocoder et Google Maps pour les rails. Fondamentalement, le site que je suis en train de développer enregistre les sites et les adresses de ces sites sont enregistrées comme marqueurs sur la carte. Sur la première page est une barre de recherche où une adresse et un rayon de recherche est entré. Le résultat va à la page de la carte avec les marqueurs de lieu et s'il y a des marqueurs dans la recherche et le rayon entré alors il affiche ces marqueurs avec l'ajustement automatique de la carte pour les inclure tous. S'il n'y a pas de marqueurs dans le rayon de recherche, j'ai fait en sorte qu'un marqueur invisible temporaire soit placé à l'endroit exact de la recherche, puis en utilisant geocoder je peux calculer le marqueur le plus proche de ce point, puis supprimer le marqueur temporaire marqueur et placez un nouveau marqueur au point le plus proche. C'est ainsi que la carte ne se contente pas d'aller dans l'océan atlantique sud si aucun marqueur ne se trouve dans ce rayon et peut montrer à l'utilisateur le lieu le plus proche de ce qu'il recherche plutôt que de dire quelque chose comme "rien dans ce rayon". '.Rails - Geocoder et aide de Google Maps nécessaires

Je suis sûr que la façon dont je l'ai expliqué le rend assez confus et il y a probablement une meilleure façon de le faire. Mais fondamentalement, je le veux de sorte que la barre de recherche va à l'adresse et inclut tous les marqueurs dans le rayon et s'il n'y a pas de marqueur dans ce rayon, accrochez-vous au marqueur le plus proche et incluez tous les marqueurs autour.

Cela ne fonctionne pas comme prévu. Dans mon contrôleur je ..

@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 

Mettre @json dans mes gmaps4rails dans la vue me donne tous les marqueurs des sites qui existent dans le rayon de recherche. Cela fonctionne bien pour cela mais si la recherche n'a pas de marqueurs dans le rayon, alors il va à l'océan Atlantique.

Mettre @json_search dans gmaps4rails mettra un marqueur invisible à l'endroit le plus proche. Mais il ne montre aucun autre lieu et tous les marqueurs sont invisibles. Si je pouvais combiner les deux alors peut-être cela fonctionnerait si j'ai essayé

@json_all = @json + @json_search 

comme rails semble penser qu'ils sont les deux chaînes. Il ne plante pas mais ne fonctionne pas correctement non plus. L'utilisation de méthodes telles que join et fusionner est un problème. Je pense que j'ai probablement rendu cela plus complexe que je n'aurais dû. Mon contrôleur entier est un peu en désordre. Il peut être vu sur github here. Désolé pour la longue question. Je suis un nouveau venu dans le domaine des rails et du codage en général, alors j'espère que ma question a du sens.

+0

Voulez-vous finir avec un tableau d'objets gmap4rails? –

+0

La variable json semble avoir tous les objets dont j'ai besoin si mon résultat de recherche a des marqueurs à proximité. Je voulais juste un moyen pour que, si aucun objet n'est proche de ma recherche, il ira automatiquement au marqueur le plus proche de ma recherche. Dans la mesure où je peux dire enlever la new_search_location et json_search semble le faire fonctionner. – pjsim

Répondre

0

Ok, je l'ai compris. Les variables @new_search_location et @json_search sont totalement inutiles et sont à l'origine du marqueur de chevauchement inutile. Tout va bien maintenant, même si je suis ouvert à toutes suggestions sur peut-être une meilleure façon de le faire.