2017-06-14 4 views
0

ich dieBerechnung der Entfernung zwischen 2 Breiten- und Längen Stellen in einem Schienen-Projekt

Geokit-Schienen

gem bin mit dem Abstand zwischen zwei objets zu berechnen, die Breiten- und Längenfelder enthalten: https://github.com/geokit/geokit-rails

ich habe ein Bein Objekt - das Objekt und 1 Zielobjekt sowohl 1 Herkunft enthält.

Herkunft sieht wie folgt aus:

class Origin < ApplicationRecord 
    belongs_to :leg 

    validates :name, presence: true 
    validates :longitude, presence: true 
    validates :latitude, presence: true 
    validates :type, presence: true 

    acts_as_mappable :default_units => :miles, 
        :default_formula => :sphere, 
        :distance_field_name => :distance, 
        :lat_column_name => :latitude, 
        :lng_column_name => :longitude 

end 

Das Zielmodell sieht wie folgt aus:

class Destination < ApplicationRecord 
    belongs_to :leg 

    validates :name, presence: true 
    validates :longitude, presence: true 
    validates :latitude, presence: true 
    validates :type, presence: true 

    acts_as_mappable :default_units => :miles, 
        :default_formula => :sphere, 
        :distance_field_name => :distance, 
        :lat_column_name => :latitude, 
        :lng_column_name => :longitude 
end 

Dann habe ich diese Zeile in meinem Bein-Objekt aufrufen, um einen Abstand zwischen einem Ursprung und Ziel. Sowohl der Ursprungs- als auch der Zieldatensatz existieren - mit gültigen Breiten- und Längenwerten im DB.

def distance 
    if(origin.present? && destination.present?) 
     distance = origin.distance_from(destination, :units=>:miles) 
     puts "distance in leg is:"+distance.to_s 
     return distance 
    else 
     return 0 
    end 
    end 

Der Abstand zurückgekehrt ist immer 0,0, trotz Verwendung gültige Herkunft/Zielobjekte, die entsprechenden Werte in den Breiten- und Längen Spalten haben.

verwende ich das falsch? Kann jemand helfen?

+0

Was ist der Fehler hier? was ist deine Frage? –

+0

Woops! hinzugefügt - Entschuldigung! – RenegadeAndy

Antwort

0

Dies war komplette Anwenderfehler. Der Code, den ich in dieser Frage geschrieben habe, ist eigentlich völlig korrekt.

Aufgrund mehrerer zugrunde liegenden Probleme in den Modellen und Controller die Werte in Breiten- und Längen Säulen wurden beharrt nicht werden.

Alle behoben :)

1

Haben Sie Ihre puts "distance in leg is:"+distance.to_s Linie in den Protokollen sehen?

Wenn nicht, dann ist der Fehler nach unten zu if(origin.present? && destination.present?) falsch zurück.

+0

Ich sehe die Puts im Protokoll - und es heißt "Abstand in Bein ist: 0.0" – RenegadeAndy

+0

@RenegadeAndy können Sie debuggen, was die Breiten- und Längengradwerte des Ursprungs und des Ziels sind? Ich kann das überhaupt nicht wiederherstellen. –

Verwandte Themen