Kan ik reverse_geocoded_by en geocoded_by op hetzelfde moment in een model? rails

stemmen
0

Ik ben op zoek om mijn model te gegeocodeerd door full_street_address en reverse_geocoded_by : breedtegraad en : lengte , zodat ik Address.near kunt bellen en krijgen ze, hetzij door een of andere manier.

Dit lijkt te werken, maar kon deze aanpak leiden tot mogelijk probleem of is het juist?

Hier is mijn code:

class Address < ApplicationRecord
  geocoded_by :full_street_address
  after_validation :geocode
  reverse_geocoded_by :latitude, :longitude

  def full_street_address
    self.street + self.city + self.country
  end
end
De vraag is gesteld op 13/03/2018 om 18:51
bron van user
In andere talen...                            


2 antwoorden

stemmen
1

Het werkt, maar het is overbodig. Dat komt omdat met geocoded_byu het volledige adres en het verkrijgen van de breedte- en lengtegraad, dat is uw zaak. Maar reverse_geocoded_bystelt u in staat om een adres uit een breedte- en lengtegraad te krijgen, maar je hebt het al.

Gewoon verwijderen van het reverse_geocoded_byen als je wilt naar de lengte- en breedtegraad gebruiken gewoon bellen met de velden in uw database: self.latitudeen self.longitude, bijvoorbeeld, die u moet hebt gedefinieerd (en de geocoding dienst is het invullen van voor u).

antwoordde op 13/03/2018 om 22:13
bron van user

stemmen
2

Ja, U kunt het gebruiken, standaard wordt deze overschrijven als het geven van adres en lat / lng-adressen.

U kunt splitsen in twee klassen en roep Address.near([:lat, :lng])ook later na te slaan.

modellen

- /model/address.rb
   class Address < ApplicationRecord
      #any association/validations here

      geocoded_by :full_street_address

      #by default it will save full address to address field. 
      reverse_geocoded_by :latitude, :longitude do |obj,results|
        if geo = results.first
            #customize as you want
              obj.street  = geo.address.split(',')[0]
              obj.city    = geo.city
              obj.zip     = geo.postal_code
              obj.state   = geo.state
        end
      end

      def full_street_address
         self.street + self.city + self.country
      end
   end

- /model/address/with_address.rb
   class Address::WithAddress < Address
      after_validation :geocode
   end

- /model/address/with_lat_lng.rb
   class Address::WithLatLng < Address
     after_validation :reverse_geocode
   end

controleur

   address = Address::WithLatLng.create(latitude: 40.5236803, longitude: -80.2249546)
   # returns: will save lat/lng and address/city/state/zip fields saved from api
   address.full_street_address
   #or
   address = Address::WithAddress.create(address: "601 fake st.", city: "brooklyn", state: "ny", zip: "11220")
   # returns: will save address and latitude:, longitude: will fetch from api.
   address.full_street_address
antwoordde op 14/03/2018 om 08:15
bron van user

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