rails3如何从谷歌地图中的详细地址获取特定城市

时间:2011-08-17 16:51:28

标签: ruby-on-rails ruby ruby-on-rails-3 google-maps gmaps4rails

此网址有一个演示http://gmaps4rails.heroku.com/locations

当我们提供详细地址,例如“9 Rue du Muret,Marseille” 所以在谷歌地图中它会显示一个点,

现在我想通过地址获取具体城市“马赛”没有包含街道,只有城市名称,

有没有办法实现这个?

2 个答案:

答案 0 :(得分:2)

这很简单:

  acts_as_gmappable :callback => :save_country 

  def save_country(data)
    #what you need  to do here
  end

data将包含谷歌的完整哈希值。在您的示例中,它看起来像:

  

address_components:

     
      
  • long_name:“9”类型:   
        
    • street_number short_name:“9”
    •   
  •   
  • long_name:Rue du Muret类型:   
        
    • route short_name:Rue du Muret
    •   
  •   
  • long_name:Les Amavaux类型:   
        
    • 附近
    •   
    • 政治短名称:Les Amavaux
    •   
  •   
  • long_name:14e Arrondissement类型:   
        
    • sublocality
    •   
    • 政治短名:14e Arrondissement
    •   
  •   
  • long_name:马赛类型:   
        
    • 局部性
    •   
    • 政治短名称:马赛
    •   
  •   
  • long_name:Bouches-du-Rhone类型:   
        
    • administrative_area_level_2
    •   
    • 政治短名:“13”
    •   
  •   
  • long_name:“Provence-Alpes-C \ xC3 \ xB4te d'Azur”类型:   
        
    • administrative_area_level_1
    •   
    • 政治短名称:PACA
    •   
  •   
  • long_name:法国类型:   
        
    • 国家
    •   
    • 政治短名称:FR
    •   
  •   
  • long_name:“13014”类型:   
        
    • postal_code short_name:“13014”类型:
    •   
  •   
  • street_address geometry:location:   lng:5.3805084   lat:43.3315919 bounds:   东北:     lng:5.3805246     纬度:43.3315919   西南:     lng:5.3805084     lat:43.331585 location_type:RANGE_INTERPOLATED视口:   东北:     lng:5.3818654802915     lat:43.3329374302915   西南:     lng:5.3791675197085     lat:43.3302394697085 formatted_address:9 Rue du Muret,13014   法国马赛
  •   

答案 1 :(得分:2)

我认为如果我理解问题,这可能是您正在寻找的正确解决方案  给定具有已知地址的模型,自动获取地址组件并存储在单独的属性中:

geocoded_by :address do |obj,results|
if geo = results.first
  obj.city    = geo.city
  obj.zipcode = geo.postal_code
  obj.country = geo.country_code
end
end
after_validation :geocode

每个Geocoder :: Result对象result都提供以下数据:

result.latitude - float
result.longitude - float
result.coordinates - array of the above two
result.address - string
result.city - string
result.state - string
result.state_code - string
result.postal_code - string
result.country - string
result.country_code - string

如果您熟悉您正在使用的地理编码服务返回的结果,则可以访问更多数据,但您需要熟悉您正在使用的特定Geocoder :: Result对象和结构您的地理编码服务的回复。

THX