MapBox
Google Map にゼンリンがデータを提供するのをやめたと同時に,MapBoxとゼンリンの提携が報道された.
多くの一般ユーザーはGoogle MapのかわりにMapBoxを使おうとして失敗しているようだが,MapBoxはアプリではなく開発環境なのだ.
PythonからMapBoxを使って地図を書くにはユーザー登録をしてtokenを得てから,Plotly経由で書くのが一番簡単だ.
Plotlyのインストールは
conda install -c plotly plotly
もしくは
pip install plotly
できる.
Plotlyにおける図の構成要素は,
トレース:基本描画単位(Scatter, Line, Barなどのオブジェクト)
データ:トレースのリスト(複数のトレースをひとつの画面に描画)
レイアウト:図のレイアウト.タイトル,軸などを定義.
図:データとレイアウトから構成されるオブジェクト
であり,データ以外は,辞書(の辞書)から成るデータ構造で保管される.
描画は,オンラインとオフラインで描画できる.
オンラインの場合にはPlotlyのAPIキーが必要で,この場合には図はJupyter上だけでなく,サーバー側に保管される.無料ユーザーのデータはすべて公開(public)となるので注意が必要である.
オフラインの場合にはhtmlファイルを出力(と同時にブラウザで表示)する.肝心の地図の描画だが,前述したようにmapboxへの登録が別途必要(tokenを設定)で,枝が多いときには(Noneを間に挟むことによって)1つのトレースとして描画することによる高速化が必須になる.
# Plotlyによる描画の準備
import plotly
import plotly.plotly as py
from plotly.graph_objs import *
plotly.tools.set_credentials_file(username='ユーザー名' api_key='Plotlyのキー)
mapbox_access_token = 'トークン'
plotly.tools.set_config_file(world_readable=False,sharing='private')
と準備をした後で,こんな感じで書くと描画される.
edge_trace_x, edge_trace_y = [], []
for (c,b) in Edge:
edge_trace_x +=[c.lat, b.lat, None ]
edge_trace_y +=[c.lng, b.lng, None]
data = [
Scattermapbox( #edge
lat=edge_trace_x,
lon=edge_trace_y,
line=dict(width=1,color='yellow'),
hoverinfo='none',
mode='lines',
name ="枝"
),
Scattermapbox( #node
lat=latitude,
lon=longitude,
mode='markers',
marker=dict(
size =20, color="blue", opacity=0.5
),
text = text,
name = "点"
),
layout = Layout(
autosize=True,
hovermode='closest',
mapbox=dict(
accesstoken=mapbox_access_token,
bearing=0,
center=dict(
lat=35.8573157,
lon=139.64696
),
pitch=0,
zoom=5,
style="dark" #'satellite-streets'
),
)
fig = dict(data=data, layout=layout)
plotly.offline.plot(fig, filename='地図.html',
show_link=False, config={"displaylogo":False, "modeBarButtonsToRemove":["sendDataToCloud"]})
この記事が気に入ったらサポートをしてみませんか?