Rails 4 - почему значения десятичных столбцов округляются в Postgres - используются для хранения широты и долготы - PullRequest
0 голосов
/ 05 ноября 2018

В моем приложении на Rails 4 с Postgres DB, My Application берет адрес поставщика и показывает его на карте, который должен быть точным. Для геокодирования я использую geocoder gem. Но независимо от того, что я делаю, значения широты / долготы всегда сохраняются путем округления, игнорируя точность / масштаб, указанные в файле миграции.

###migration file - addresses table===========================
      t.text :address_1
      t.text :landmark
      t.text :street
      t.string :city,add_index:true
      t.string :state,add_index:true
      t.string :zipcode
      t.string :country,add_index:true
      t.string :country_code
      t.string :slug, index:true
      ##special care for geospatial coordinates
      t.decimal :latitude, {:precision=>15, :scale=>15}
      t.decimal :longitude, {:precision=>15, :scale=>15}
      t.boolean :active,:default=>true

##in address.rb===============================================
geocoded_by :address_1
reverse_geocoded_by :latitude, :longitude do |obj,results|
  if geo = results.first
    obj.street = geo.formatted_address
    obj.state   = geo.state
    obj.city    = geo.city
    obj.zipcode = geo.postal_code
    obj.country = geo.country
    obj.country_code = geo.country_code
  end
end
after_validation :geocode, :reverse_geocode ,:if => :address_1_changed?
But every time, the values are rounded off to a precision of 6.For example - 
Even if I try to update the latitude/longitude manually through the console. 

Я не могу получить выделенные значения, как указано в моем файл миграции (точность и масштаб 15)

##in rails console
 2.4.1 :003 > Address.last.update_attributes(:longitude => "73.1338649019608")                                                                                                                    
   (0.5ms)  BEGIN
    blah blah blah
   (0.4ms)  COMMIT
 => true 
2.4.1 :004 > Address.last.longitude.to_s
 => "73.133864902" 
##values are rounded off :(

Есть ли проблема с геокодером или что-то не так с Postgres.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 05 ноября 2018

Я очень сомневаюсь, что это проблема с postgres, и вы не достигли лимита в рубинах, поэтому я подозреваю, что геокодер автоматически округляет его для вас. Мне любопытно, зачем вам нужна эта точность. В readme геокодера они предоставляют эту ссылку https://en.wikipedia.org/wiki/Decimal_degrees#Accuracy, которая показывает, что десятичная дробь со шкалой из 8 десятичных знаков обеспечивает точность в миллиметрах.

...