Карта плотно разбитой карты не будет увеличиваться после перезагрузки - PullRequest
0 голосов
/ 28 марта 2019

Я хотел бы сделать карту с возможностью масштабирования (например, с помощью колеса прокрутки). Сначала это работает, но после перезагрузки карты функция масштабирования перестает работать.

Другим решением было бы отображение инструментов +/- масштабирования на карте.

Вот минимальный сценарий, который воспроизводит проблему.

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd

from dash.dependencies import Input, Output, State
import plotly.graph_objs as go

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/2011_february_us_airport_traffic.csv')

app.layout = html.Div([
    html.Button('Update Graph',id='get'),
    html.P("On first load, zoom works fine. After reloading, zoom doesn't work anymore."),
    dcc.Graph(id='map')
])

@app.callback(
    Output('map', 'figure'),
    [Input('get', 'n_clicks')])
def update_map_callback(n_clicks):
    return {
        'data': [
            go.Scattermapbox(
                lat=df['lat'],
                lon=df['long'],
                mode='markers',
                marker=dict(
                    size=4
                )
            )
        ],
        'layout': go.Layout(
            autosize=True,
            hovermode='closest',
            mapbox=dict(
                accesstoken='enter-your-mapbox-key-here',
                center=dict(
                    lat=40,
                    lon=-100
                ),
                zoom=2
            )
        )}

if __name__ == '__main__':
    app.run_server(debug=True)

Когда страница появляется впервые, можно увеличивать и уменьшать масштаб карты. Я ожидаю, что после нажатия кнопки «обновить график» масштабирование все равно должно работать. Однако при нажатии кнопки «Обновить график» уровень масштабирования на карте становится фиксированным.

Ответы [ 4 ]

0 голосов
/ 09 апреля 2019

Как и в случае с @ user47389, лучше всего для меня использовалась модификация кода, в которой я явно установил scrollZoom = True, когда я вначале определил объект графа

dcc.Graph(id='graph', config={'scrollZoom': True})

Следуя найденному решению здесь .

0 голосов
/ 28 марта 2019

Спасибо, видел это, и хотя это лучше, чем ничего, на самом деле это не приемлемый обходной путь. Есть ли способ предупредить mapbox на эту проблему? Это серьезная поломка.

0 голосов
/ 04 апреля 2019

Я разобрался, благодаря теме здесь . Хитрость заключается в изменении конфигурации. Вот рабочий пример:

import dash
import dash_core_components as dcc
import dash_html_components as html

from dash.dependencies import Input, Output, State
import plotly.graph_objs as go

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
    html.Button('Update Graph',id='get'),
    html.P("On first load, zoom works fine. After reloading, zoom doesn't work anymore."),
    dcc.Graph(id='map')
])

@app.callback(
    [Output('map', 'figure'),
     Output('map', 'config'),
     ],
    [Input('get', 'n_clicks')])
def update_map_callback(n_clicks):
    map_figure = {
        'data': [
            go.Scattermapbox(
                lat=[32],
                lon=[-110],
                mode='markers',
                marker=dict(
                    size=4
                )
            )
        ],
        'layout': go.Layout(
            autosize=True,
            hovermode='closest',
            mapbox=dict(
                accesstoken='pk.eyJ1IjoidG9kZGthcmluIiwiYSI6Ik1aSndibmcifQ.hwkbjcZevafx2ApulodXaw',
                center=dict(
                    lat=40,
                    lon=-100
                ),
                zoom=2
            )
        )}

    map_config = dict(scrollZoom = True)

    return map_figure, map_config

if __name__ == '__main__':
    app.run_server(debug=True)
0 голосов
/ 28 марта 2019

Эта проблема возникла только недавно - у меня, по сути, та же проблема, которая на данный момент делает мое приложение бесполезным. См. эту запись в сообществе, которое предлагает обходной путь - если вы можете жить с неуклюжей заменой колесика мыши.

...