我正在使用地理编码器来查找用户位置附近的位置。但它只给出经度/纬度(如果之前存储了一些地方,则给出附近的地方)。我想要得到的东西是,当用户输入区域名称时,说“自由女神像”,那么结果应该显示“自由女神像”附近的地方,有一个特定的标签说“酒店”。
有一个web很好地实现了它。你可以在Here上查看
我不是要求完整的代码片段,而是寻找有用的建议,让我可以让我的应用程序工作,或者我必须改变我的gem。任何帮助我们都将不胜感激。
发布于 2015-09-28 21:09:50
要在“自由女神像”附近找到一个带有“Place”Tag的酒店,应该是这样的:
Place.near("statue of liberty").where(tags: [:hotel]).all由于您完全没有提供关于您的模式或模型的信息,因此我使用了通用名称。不过,这是我一直以来的做法。
有关更多信息,请参阅GeoCoder docs。
发布于 2015-09-28 21:36:22
使用Geonames_api。
然后你可以开发函数,并向它发送距离,radius ( zipcode )如下:
def nearby(zipcode, radius)
GeoNamesAPI.username = "yourusername@yourdomain.com"
GeoNamesAPI.lang = :en
geo_name_objects = GeoNamesAPI::NearbyPostalCode.where(country: "US", postalcode: zipcode, radius: radius)
zip_codes_names = geo_name_objects.postal_codes.map{|h| h.slice("postalCode").values}.flatten.uniq - [zipcode]
end此函数将返回当前邮政编码附近距离小于/等于现有半径的所有邮政编码
发布于 2015-09-28 21:40:16
我个人使用geokit和geokit-rails gem。要使用它们,您只需将acts_as_mappable :default_units => :kms (或英里)添加到您希望能够定位的模型中,然后只需使用:
示例模型: location.rb
Location.closest(origin: "statue of liberty")作为一个普通的活动记录查询,它可以链接任何你想要的.where(tags: [:hotel])。
提示: geokit使用外部地理编码器,默认是google地理编码器,如果调用太频繁,它会给出超时错误。我建议使用Redis以键-值的方式缓存地理编码结果,例如$redis[address] = location_id,并且有一个方法可以在缓存中立即检索位置。这样,您可以大大降低地理位置超时错误的风险。
https://stackoverflow.com/questions/32823711
复制相似问题