2017-10-23 18 views
1

Plotly Python APIはMapBox(ScatterMapbox)を使用して素晴らしいインタラクティブマップを作成できますが、マップエクステントを制御する方法はありません。たとえば、画像をPDFまたはPNGファイルとして保存し、対話的にズームすることを期待しない場合は、地図の範囲を制御できることが重要です。Plotly Python APIのMapBoxエクステント

私が直面している問題は、特定の地域のみを表示することを直接指示する方法がないことです。たとえば、地図にフロリダの州のみを表示するように指定する方法はありません。

ただし、地図の中心とズームレベルを設定することはできます。表示したいボックスの緯度/経度座標を知っていて、CENTER座標を知っているときに、ズームレベルを定義するための式がありますか?

たとえば、地図の座標を中心座標(center_lat、center_long)にして、可視部分が南西座標(sw_lat、sw_long)と北東座標(ne_lat、ne_long)になるようにズームすると、私が提供しなければならないMapBoxズームレベルですか?

私は、数式が地図投影法に依存することがあることを認識しています。そのため、MapBoxとPlotlyの使用について具体的に説明しています。また、同様の質問がありましたが、Plotly Python APIではなく、JSを介してMapBoxを使用することに関連しているように見えます。これにより、私が使用できるソリューションに翻訳することが難しくなりました。

答えて

0

これは私が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}, 
} 

そしてIはdropdown-regionDropdownで選択された領域にGraphオブジェクトを中心。

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