gpt4 book ai didi

python - 在 Plotly Python API 中控制 MapBox 范围

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:32 26 4
gpt4 key购买 nike

Plotly Python API 可以使用 MapBox (ScatterMapbox) 制作漂亮的交互式 map ,但无法控制 map 范围。例如,如果您想要将图像另存为 PDF 或 PNG 文件并且不希望用户以交互方式缩放,则能够控制 map 范围非常重要。

我面临的问题是没有办法直接表明你只想查看某个区域。例如,无法指示您希望 map 仅显示佛罗里达州。

但是,您可以设置 map 的中心和缩放级别。当您知道要显示的框的纬度/经度坐标并且知道 CENTER 坐标时,是否有一个公式可以用来定义 ZOOM 级别?

例如,如果我希望 map 以坐标 (center_lat, center_long) 为中心并进行缩放,使可见部分具有西南坐标 (sw_lat, sw_long) 和东北坐标 (ne_lat, ne_long),那么什么是我必须提供的 MapBox ZOOM 级别?

我意识到公式可能取决于 map 投影,这就是为什么我要具体使用 MapBox 和 Plotly。此外,我在 SO 上看到过类似的问题,但这些问题似乎都与通过 JS 使用 MapBox 有关,而不是在 Plotly Python API 中使用,这让我很难将解决方案转化为我认为可以使用的东西。

最佳答案

这是我为 this Dash app 所做的.

我创建了一个 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},
}

然后我将 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(...)
])

完整代码 here .

关于python - 在 Plotly Python API 中控制 MapBox 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46891914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com