此网址有一个演示http://gmaps4rails.heroku.com/locations
当我们提供详细地址,例如“9 Rue du Muret,Marseille” 所以在谷歌地图中它会显示一个点,
现在我想通过地址获取具体城市“马赛”没有包含街道,只有城市名称,
有没有办法实现这个?
答案 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