2015-09-19 13 views
9

Próbuję znaleźć sposób, aby pokazać obliczoną odległość między dwoma punktami na mapie za pomocą Geokodera. Mam START_ADDRESS i destination_address w moim stole, które mogę prosić o moim zdaniem, mój model wygląda następująco:Jak obliczyć odległość w km między dwoma punktami za pomocą Geokodera

class Ride < ActiveRecord::Base 
    geocoded_by :start_address 
    geocoded_by :destination_address 
    reverse_geocoded_by :latitude, :longitude 
    after_validation :geocode 

end 

Jak mogę uzyskać Obliczona odległość między dwoma punktami i pokazać w widoku. Nie ma potrzeby długości i szerokości geograficznej.

Edytuj: Domyślną jednostką jest "mile". Aby zmienić domyślną jednostkę ustawić go w modelu ActiveRecord:

Venue.near([40.71, -100.23], 20, :units => :km) 

lub zmienić go w:

# config/initializers/geocoder.rb 
# set default units to kilometers: 
:units => :km, 

Edit: udało mi się rozwiązać ten problem tak:

ride = Ride.new(params) 
start_address_coordinates = Geocoder.coordinates(params[:start_address]) 
destination_coordinates = Geocoder.coordinates(params[:destination]) 
ride.distance = Geocoder::Calculations.distance_between(start_address_coordinates, destination_coordinates) 

Odpowiedz

18

W module Geocoder::Calculations znajduje się metoda o nazwie distance_between(lat1, lon1, lat2, lon2, options = {})

mijamy długość i szerokość geograficzną dwóch punktów i dajemy z powrotem odległość między tymi dwoma punktami.

W celu uzyskania dalszych informacji proszę sprawdzić link się

cytat z Gem's docs:

patrzeć współrzędne jakiegoś miejsca (jak szukanie Mapy Google)

Geocoder.coordinates("25 Main St, Cooperstown, NY") 
=> [42.700149, -74.922767] 

Więc można to wykorzystać powyższą metodą, aby uzyskać współrzędne określonej lokalizacji wprowadzonej przez użytkownika, można obliczyć różnicę odległości między dwoma punktami za pomocą poniższej metody. odległość

pomiędzy Wieżą Eiffla i Empire State Building

Geocoder::Calculations.distance_between([47.858205,2.294359], [40.748433,-73.985655]) 
=> 3619.77359999382 # in configured units (default miles) 
+0

@ JędrekDomański I zostały zaktualizowane moja odpowiedź Odpowiednio –

+0

Dzięki, ale z jakiegoś LatLong odległości nie jest poprawna. Czy możesz zasugerować jaki jest powód. jestem znalezienie odległość między latlongs szerokość geograficzna = 19,1092883 = 73,0131332 szerokość geograficzna = 19,115710 = 72,918257 wynik => około 10 km, ale oczekuje/prawidłowy wynik powinien wynosić około 18 km –

+0

@SnmMaurya gdzie czy pochodzą z tych współrzędnych, czy są one przechowywane w bazie danych lub w jakim źródle. jeśli pochodzą one z bazy danych, musisz upewnić się, że przechowujesz je w postaci dziesiętnej, aby uzyskać dokładniejsze wyniki. –

Powiązane problemy