我有一个显示在页面上的谷歌地图,每个位置的标记都根据每个位置状态使用不同的标记。
我希望在更新位置时:为要查看的所有人重新呈现地图。这意味着所有标记都会更新,因此没有用户会查看旧的标记指示器。
我怎样才能做到这一点?我尝试使用$order = $this->Orders->get($id, ['contain' => [
'Reviews' => function ($q) {
return $q->find('latest');
}
]]);
,但显然render_Sync
gem必须单独加载整个集合。这意味着它尝试将地图渲染为与地图一样多的次数,这会向Google地图发送太多请求并导致其失败/破坏。
答案 0 :(得分:1)
您的Google地图已通过Javascript调用在您的视图中初始化。您只需要编写一些方法,在某些时间间隔内重复调用控制器或其他REST服务器。每次成功回复后,您都会更新您的标记位置。
类似的东西:
import passport from 'passport'
import passportStripe from 'passport-stripe'
const StripeStrategy = passportStripe.Strategy
const STRIPE_CLIENT_ID = '...'
const STRIPE_API_KEY = '...'
module.exports = passport.use(new StripeStrategy({
clientID: STRIPE_CLIENT_ID,
clientSecret: STRIPE_API_KEY,
callbackURL: "http://localhost:3000/pay"
}, (accessToken, refreshToken, stripe_properties, done) => {
(() => {}, (err, user) => { // wasn't sure about this line, the passport-stripe docs are unclear
done(err, user)
})
}))
答案 1 :(得分:0)
您可以使用“动作电缆”将坐标广播到UI,将其保存在某些数据属性中,然后从地图脚本中对其进行轮询。
您可以按照以下步骤操作:
创建一个新频道。让我们称之为“位置”:
rails g channel locations
在收到最新坐标时广播它们:
ActionCable.server.broadcast 'locations_channel', { latitude: 'NEW_LATITUDE', longitude: 'NEW_LONGITUDE' }
一旦在用户界面上收到最新的坐标,就可以将其设置为地图div
的数据属性,如下所示:
$('#map').data(data);
您可以在this gist
定期轮询地图div
的数据属性,并使用以下方法更新标记的位置:
marker.setPosition(latlng)
我写了a step by step guide on Medium on how to do this。您可以看看更多。