我正在研究gmap,并且正在尝试使用widgets.button刷新gmap标记,但是单击按钮时无法刷新地图。 也许这是一个简单的问题,但我尝试了几个小时却无法解决。 按照我的代码。
PID, STARTED,%CPU,%MEM,COMMAND
1,Mon Feb 25 00:00:01 2019, 0.0, 0.1,examplecommand1
2,Mon Feb 25 00:00:01 2019, 0.0, 0.0,examplecommand2
(...)
在将“滑块”的值链接到按钮之后,我开始创建窗口小部件。单击按钮时,我需要刷新标记位置。
在on_button_click函数中,我可以看到正在从滑块获取经度和纬度的新闻值,因此我正在更新self.marker,也许我的错误就留在这里了。
答案 0 :(得分:1)
在on_button_click
中,您实际上并没有更新标记层。您当前写的是:
self.markers = gmaps.marker_layer([(latitude, longitude)])
但这只是设置类的markers
属性。您真正想要做的是在标记层中对一组标记进行突变。您可以做的最简单的更改就是将该行更改为:
self.markers.markers = [gmaps.Marker(location=(latitude, longitude))]
这会更改标记层的markers
属性-基本上是标记列表。每次按剧情,都会破坏地图上的标记,并在更新的位置用新标记替换它。
使用marker_layer
之类的高级工厂方法可能会掩盖 jupyter-gmaps 在内部使用小部件的方式。为了使它更易于理解,我们来介绍创建一个_create_marker()
对象的gmaps.Marker
方法:
def _create_marker(self, latitude, longitude):
return gmaps.Marker(location=(latitude, longitude))
我们现在可以在初始渲染中使用它:
def _render_map(self, latitude, longitude):
""" Render the initial map """
brasilia_coordinates = (-15.7934036, -47.8823172)
fig = gmaps.figure(center=brasilia_coordinates, zoom_level=3)
self.marker_layer = gmaps.Markers()
initial_marker = self._create_marker(latitude, longitude)
self.marker_layer.markers = [initial_marker] # set the first marker
fig.add_layer(self.marker_layer)
return fig
请注意,我已将self.markers
重命名为self.marker_layer
,以使其清晰可见。
最后,更新代码现在为:
def on_button_clicked(self, _):
latitude = self.FloatSlider1.value
longitude = self.FloatSlider2.value
# look how closely the following two lines match the construction code
new_marker = self._create_marker(latitude, longitude)
self.marker_layer.markers = [new_marker]