设置Folium地图的边界并停止无限循环平移。

4
这是我的folium代码:

import folium
mp = folium.Map(location=[37, -102], 
                zoom_start=1, 
                tiles="Stamen Terrain", 
                )
display(mp)

这是我得到的输出: enter image description here leaflet地图存在两个问题:
1. 大陆地区会循环显示2次或更多。 2. 地图可以无限制地从左到右或从右到左地平移,形成一个循环。
这些都会让人感到烦恼。第一个问题可以通过将zoom_start设置为1以外的值来临时解决。但是,即使这样,缩小地图后这个问题仍然会出现。关于第二个问题,最好少说。
现在我想要的是将我的地图边界限制在[-150,150,-70,70]或更小的范围内。我也不想通过平移或缩放来显示此范围之外的地图。并且我也不希望我的地图无限制地进行平移。
在Folium中是否有可能实现这一点?

https://github.com/python-visualization/folium/issues/648 - Farhan.K
这是我目前找到的最佳解决方案:https://dev59.com/MmEh5IYBdhLWcg3wrVAN#42961284;基本上,您需要添加一些JS代码来设置一些叶片参数来限制边界(`setMaxBounds`)并禁用动画(`animate: false)。其他解决方案建议使用maxBoundsViscosity`,但该解决方案无法按预期工作,因为我们仍然可以强制横向拖动屏幕。 - JorgeAmVF
3个回答

6
可以实现!只需使用min_zoom属性(对于相反的问题,使用max_zoom属性)!
f = folium.Figure(width=1000, height=500)
m = folium.Map(location= initial_location, tiles="openstreetmap",
zoom_start=zoom_start_defined, min_zoom = min_zoom_defined).add_to(f)

我认为设置最小缩放级别为2就可以达到目的


6

一种简单的方法是在Map()函数中使用max_bounds参数,并将其设置为True。使用此参数可以将地图限制在一个大陆视图。

以下是一个示例:

m = folium.Map(location=loc,max_bounds=True)

3
感谢此讨论。我一直在尝试使我的地图更美观,控制更好,所以这很有帮助。就个人看法而言,
max_bounds = True

这并不妨碍我缩小地图查看不同大陆的多个版本。如果我拖动地图向左/右移动,我可以这样做,但是视图会弹回以保持我的初始地图(例如北美洲)在屏幕中央。

f = folium.Figure(width=1000, height=500)
m = folium.Map(location= initial_location,
               tiles="openstreetmap",
               zoom_start=zoom_start_defined, 
               min_zoom = min_zoom_defined
               ).add_to(f)

这个方案可以限制用户缩小地图以至于看到同一个大陆的多个副本。但是如果用户拖动地图左右移动,就可能滚动到另一个版本(比如北美洲)。

但是当我把这两个想法结合起来时,它确实起作用了:

f = folium.Figure(width=1000, height=500)
m = folium.Map(location= initial_location, 
           tiles="openstreetmap",
           zoom_start=zoom_start_defined, 
           min_zoom = min_zoom_defined,
           max_bounds = True 
           ).add_to(f)

这可以防止用户缩放得太远。用户仍然可以抓住地图并向左/右滚动以获得(例如)北美的另一个版本,但是一旦松开鼠标按钮,视图会弹回到原始版本的NA。虽然不允许用户滚动到第二个(或第三个)NA版本不是很好,但由于它会弹回,因此是一种改进。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接