rsg*_*gny 5 python mapbox plotly-dash
Plotly Python API可以使用MapBox(ScatterMapbox)制作漂亮的交互式地图,但无法控制地图范围。例如,如果您想要将图像保存为 PDF 或 PNG 文件并且不希望用户以交互方式缩放,那么能够控制地图范围就很重要。
我面临的问题是没有办法直接表明您只想查看某个区域。例如,无法表明您希望地图仅显示佛罗里达州。
但是,您可以设置地图的中心和缩放级别。当您知道想要可见的框的纬度/经度坐标并且知道中心坐标时,是否可以使用一个公式来定义缩放级别?
例如,如果我希望地图以坐标(center_lat,center_long)为中心并进行缩放,以便可见部分具有西南坐标(sw_lat,sw_long)和东北坐标(ne_lat,ne_long),那么MapBox ZOOM是什么我必须提供的级别?
我意识到该公式可能取决于地图投影,这就是为什么我具体使用 MapBox 和 Plotly。此外,我在 SO 上看到过类似的问题,但这些问题似乎都与通过 JS 使用 MapBox 有关,而不是在 Plotly Python API 中,这使我很难将解决方案转化为我认为可以使用的东西。
这是我为这个 Dash 应用程序所做的事情。
我创建了一个dict包含一些具有纬度、经度和缩放级别的区域。
regions = {
'world': {'lat': 0, 'lon': 0, 'zoom': 1},
'europe': {'lat': 50, 'lon': 0, 'zoom': 3},
'north_america': {'lat': 40, 'lon': -100, 'zoom': 2},
'south_america': {'lat': -15, 'lon': -60, 'zoom': 2},
'africa': {'lat': 0, 'lon': 20, 'zoom': 2},
'asia': {'lat': 30, 'lon': 100, 'zoom': 2},
'oceania': {'lat': -10, 'lon': 130, 'zoom': 2},
}
Run Code Online (Sandbox Code Playgroud)
然后我将Graph对象置于使用 选定的区域的中心dropdown-region Dropdown。
import plotly.graph_objs as go
@app.callback(
output=Output('graph-geo', 'figure'),
inputs=[Input('dropdown-map-style', 'value'),
Input('dropdown-region', 'value')]
)
def _update_graph(map_style, region):
layout = go.Layout(
title='graph-title',
mapbox=dict(
accesstoken=mapbox_access_token,
bearing=0,
# center Graph object on region selected with 'dropdown-region'
center=dict(
lat=regions[region]['lat'],
lon=regions[region]['lon'],
),
pitch=0,
zoom=regions[region]['zoom'],
style=map_style,
),
)
data = go.Data([
# data for the Graph object...
go.Scattermapbox(...)
])
Run Code Online (Sandbox Code Playgroud)
完整代码在这里。
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |