从python构建交互式地图

时间:2017-08-14 15:30:38

标签: python openstreetmap mapbox plotly

我正在尝试构建一个显示交互式地图的网页(占据页面的100%),其中我提供了包含信息的点或线。 Plotly似乎是完美的,我真的很喜欢它的可视化,但它不支持内置的Open Street Map等地图,它使用Mapbox。我没有任何反对Mapbox的东西,但从我发现它可以免费获得一定数量的视图(当它使用OSM时)。

简单地说:有一个简单的(作为开源和免费使用)方式使用python构建这样一个网页,其中包含一个显示信息的地图吗?

2 个答案:

答案 0 :(得分:0)

确实有!您可以使用Mapbox GL JS,而无需进行绘图。这里有一些html代码示例,它们将为您创建这些完整尺寸的地图。它们可以是人造卫星,也可以只是普通地图。

画线: https://docs.mapbox.com/mapbox-gl-js/example/geojson-line/

创建弹出式onclick: https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/

答案 1 :(得分:0)

您确实可以在 Plotly 和 Dash 中不受限制地免费使用 OSM 地图或 Mapbox API 帐户,请参阅https://plotly.com/python/mapbox-layers/

<块引用>

layout.mapbox.style 中的基本地图

layout.mapbox.style 的可接受值为以下之一:

  • "white-bg" 生成一个空的白色画布,导致没有外部 HTTP 请求
  • “open-street-map”、“carto-positron”、“carto-darkmatter”、“stamen-terrain”、“stamen-toner”或“stamen-watercolor”产量图,由来自各种不需要注册或访问令牌的公共磁贴服务器
  • “basic”、“streets”、“outdoors”、“light”、“dark”、“satellite”或“satellite-streets”地图由 Mapbox 服务的矢量切片组成,并且需要 Mapbox Access令牌或本地 Mapbox 安装。
  • Mapbox 服务样式 URL,需要 Mapbox 访问令牌或本地 Mapbox 安装。
  • https://docs.mapbox.com/mapbox-gl-js/style-spec/ 处定义的 Mapbox 样式对象

以下是同一 plotly 文档中的代码示例,该文档使用 OSM 底图而没有任何身份验证令牌:

import pandas as pd
us_cities = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/us-cities-top-1k.csv")

import plotly.express as px

fig = px.scatter_mapbox(us_cities, lat="lat", lon="lon", hover_name="City", hover_data=["State", "Population"],
                        color_discrete_sequence=["fuchsia"], zoom=3, height=300)
fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

至于构建一个实际的网站,我推荐使用 Dash,它是一个与 plotly 很好地集成的网络服务器。