ECharts动态更新地图标记点后缩放和中心位置重置了怎么办?
用ECharts做中国地图可视化时遇到个怪问题,当我通过setData实时更新标记点坐标后,地图会自动跳转回初始视角,缩放和中心位置全没了,该怎么保持之前的视图状态啊?
我试过这样写代码:<pre class="pure-highlightjs line-numbers"><code class="language-javascript"><code class="language-html">
option = {
geo: {
type: 'map',
map: 'china',
roam: true,
center: [114.31, 30.52],
zoom: 1.2
},
series: [{
type: 'effectScatter',
data: updatedData // 动态变化的数据
}]
};
myChart.setOption(option);
</code></code></pre>
每次调用setOption后,地图都会回到最开始的中心位置和缩放级别,看起来像是初始化参数被覆盖了。尝试过在setOption里加notMerge参数但没效果,查文档也没找到相关说明,求大神指点!
正确做法是只更新 series 数据,而不是整个 option:
这样就能保留 geo 的状态。如果你非要传整个 option,那必须把 geo 的配置也带上,同时使用 notMerge 参数:
不过建议你还是第一种方式更省心。如果你用的是 Vue/React 等框架,记得不要直接修改 state 中的 option,而是用 immer 或深拷贝一份再更新。
另外,缩放和中心位置是动态的,记得要从 myChart.getModel().option.geo 中获取最新值,别用硬编码。
总之,别一股脑把整个 option 都 set 上去,只更新你需要变的部分。
setOption时确实会重置视图状态。我的做法是手动保存和恢复地图的缩放和中心位置。具体步骤:
1. 在初始化时监听地图的
'maproam'事件,获取当前的center和zoom。2. 更新数据前先保存当前的地图状态。
3. 调用
setOption后立即用setZoom和setCenter恢复状态。代码给你贴出来:
这样就能保持地图的视图状态不变了。不过ECharts有时候处理动态更新确实有点麻烦,官方文档也没写得太清楚,但这个方法挺管用的。