Géocodage, joyau de près de méthode ne fonctionne pas sur des rails 5

voix
0

Essayé d'utiliser la pierre précieuse de géocodage pour trouver des endroits en utilisant la méthode géocodeurs près de trouver certains endroits à proximité de certains points.

def index
  @data = Datum.all

   @emergency = Emergency.last
   @data_near = Datum.near([@emergency.longitude,@emergency.latitude],100,:units => :km)

  @geojson = Array.new

  @data_near.each do |mapdata|
     @geojson << {
          type: 'Feature',
          geometry: {
            type: 'Point',
            coordinates: [mapdata.longitude, mapdata.latitude]
          },
          properties: {
            name: mapdata.description,
            address: mapdata.address,
            BusType: 'hospital',
            popupContent: #{mapdata.address} is a #{mapdata.description},
            :'marker-color' => '#00607d',
            :'marker-symbol' => 'circle',
            :'marker-size' => 'medium'
          }
        }
  end
  respond_to do |format|
     format.html
     format.json{ render json: @geojson }
  end

fin

C'est le code que je suis en train de courir, il retourne un tableau vide, même lorsque les emplacements à proximité dans les paramètres spécifiés sont présents. Quand je tente d'exécuter le code directement dans la console de rails avec de vrais points.eg.

data = Datum.near([36.7689503,-1.381776],10,:units => :km)

Je ne reçois pas d'erreur généré, mais la sortie que je reçois est moins lisible ou comprehensible.The sortie est:

Datum Load (0.3ms)  SELECT  data.*, (111.19492664455873 * ABS(data.latitude - 36.7689503) * 0.7071067811865475) + (96.29763124613503 * ABS(data.longitude - -1.381776) * 0.7071067811865475) AS distance, CASE WHEN (data.latitude >= 36.7689503 AND data.longitude >= -1.381776) THEN  45.0 WHEN (data.latitude <  36.7689503 AND data.longitude >= -1.381776) THEN 135.0 WHEN (data.latitude <  36.7689503 AND data.longitude <  -1.381776) THEN 225.0 WHEN (data.latitude >= 36.7689503 AND data.longitude <  -1.381776) THEN 315.0 END AS bearing FROM data WHERE (data.latitude BETWEEN 36.67901813940813 AND 36.85888246059187 AND data.longitude BETWEEN -1.4940430256783075 AND -1.2695089743216923) ORDER BY distance ASC LIMIT ?  [[LIMIT, 11]]




 => #<ActiveRecord::Relation []> 

Toute aide sera grandement appréciée.

Créé 13/11/2017 à 20:29
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

t.string "longitude"
t.string "latitude"

Avait sauvé mes coordonnées dans la base de données avec la chaîne de type de données qui est erroné, les coordonnées doivent être enregistrées avec les attribute.This de données à flotteur a résolu mon problème pour tous ceux qui connaissent peut-être les mêmes problem.Its un bon endroit pour commencer à vérifier.

Créé 14/11/2017 à 16:30
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more