如何使用推文中的位置字段从地理编码器结果中获取坐标

Posted

技术标签:

【中文标题】如何使用推文中的位置字段从地理编码器结果中获取坐标【英文标题】:how to fetch coordinates from geocoder result using location field in tweets 【发布时间】:2014-04-02 18:28:14 【问题描述】:

我正在 Ruby on Rails 中开发 API mashup,并尝试根据哈希标签从 twitter 获取推文。获取后我试图在谷歌地图上显示它们。我为此使用 Gmaps4rails、Geocoder、Twitter gems。 为了识别用户的位置,我使用推文中的位置字段并对它们进行地理编码。

问题是我没有得到坐标。到目前为止,我能够根据哈希标签及其位置获取推文。当我尝试对位置进行地理编码并在数组中创建坐标时,我得到一个 nil 类异常。

标签搜索代码

def search(hashtag)
client = Twitter::REST::Client.new do |config|
config.consumer_key        = Rails.application.config.twitter_key
config.consumer_secret     = Rails.application.config.twitter_secret
config.access_token        = oauth_token
config.access_token_secret = oauth_secret
end
geoloc="53.349740,-6.256845,500mi"
tweets = client.search(hashtag,:geocode => geoloc ,:lang => "en" , :count => 15)
return tweets

结束

对于地理编码,我已经在控制器中尝试了这些变化

试验一。

def search
@tweets=current_user.search(tweet_params[:hashtag])
@tweets.each do |tweet|
@tweet["latlang"] = Geocoder.search(tweet.user.location).coordinates
end
end

试用 2。

def search
 @tweets=current_user.search(tweet_params[:hashtag])
 @tweets.each do |tweet|
 @loc<<
 
  :lat => Geocoder.search(tweet.user.location.to_s).first.coordinates.first,
  :lng => Geocoder.search(tweet.user.location.to_s).first.coordinates.last

end
end

试用 3.(确保注意位置为空的推文)

def search
@tweets=current_user.search(tweet_params[:hashtag])
@tweets.each do |tweet|
 if(tweet.user.location.present?)
@loc<<

:lat => Geocoder.search(tweet.user.location.to_s).first.coordinates.first,
:lng => Geocoder.search(tweet.user.location.to_s).first.coordinates.last
 
else
continue
end
end
end

或者我可以创建一个新数组,我可以在其中推送所有值

@location<<

:latlng => Geocoder.search(tweet.user.location).coordinates

我收到类似“undefined method `

谢谢

【问题讨论】:

推文中的位置信息包含什么?他们不是坐标(lat,lng)吗? 一些推文确实包含坐标(lat, lng),但大多数都没有坐标,所以我打算对用户位置进行地理编码。推文的 Json 结构可以在这里看到。 dev.twitter.com/docs/api/1.1/get/search/tweets 如果你得到“undefined method ` 感谢 @Syed Aslam 的一位米洛恩...它成功了,现在我也可以在谷歌地图上显示它们了。 【参考方案1】:

Syed Aslam

的大力帮助下,我找到了解决方案

得到 NilClass 异常的问题是泛型的,因为我在使用它之前没有定义数组。

控制器代码

def search
@tweets=current_user.search(tweet_params[:hashtag])
@loc=[]
@tweets.each do |tweet|
 if(tweet.user.location.present?)
@loc<<

:lat => Geocoder.search(tweet.user.location.to_s).first.coordinates.first,
:lng => Geocoder.search(tweet.user.location.to_s).first.coordinates.last
 
else
end
end
end

查看代码

<h2><%= @loc.to_json %></h2>

添加标记的脚本

</div>
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap( provider: , internal: id: 'map', function()
markers = handler.addMarkers(<%=raw @loc.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
);
</script>

【讨论】:

以上是关于如何使用推文中的位置字段从地理编码器结果中获取坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何实现地理位置与经纬度坐标的批量转换

从目标 c 中的推文中获取文本和坐标

如何在 Tweepy 中为 API.search 的地理编码参数指定多个坐标

使用地理位置坐标填充字段

如何应用地理位置坐标从 googlemaps 获取到特定地点的路线?

从城市名称获取地理位置