在带有Postgres DB的Rails 4应用程序中,“我的应用程序”获取供应商的地址并在地图上显示出来,这应该很准确。对于地理编码,我正在使用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 :(
Geocoder是否存在问题,或者Postgres是否有问题。
请帮助
答案 0 :(得分:0)
我高度怀疑这是postgres的问题,您还没有达到ruby的小数位数限制,因此我怀疑geocoder会自动为您舍入它。我很好奇您为什么需要这种精度。在地址解析器自述文件中,他们提供了此链接https://en.wikipedia.org/wiki/Decimal_degrees#Accuracy,该链接显示小数位数为8个小数位的小数可提供以毫米为单位的精度。