使用Python构建交互式地图

7
我正在尝试构建一个网页,展示一个交互式地图(占据页面的100%),在其中展示带有信息的点或线。Plotly似乎非常适合这个需求,并且我真的很喜欢它的可视化效果,但是它并没有内置像Open Street Map这样的地图支持,而是使用Mapbox。我对Mapbox没有任何不满,但从我所了解到的,Mapbox在使用OSM的同时免费提供一定数量的视图。
简单来说:有没有一种容易(开源和免费使用)的方式,使用Python构建这样一个网页,显示一个带有信息的地图?

你能否更改瓦片源,使用OSM的瓦片服务器而不是MapBox的?此外,请注意OSM服务器也有瓦片使用政策。如果请求过多,则必须运行自己的瓦片服务器。 - scai
谢谢,我不知道OSM服务器政策的限制。虽然不会接近限制,但网页可能每周只会被10到20个人使用几次。在这种情况下,我可以使用MapBox,但是如果我使用MapBox,我也可以将输出绘制到HTML中吗?如果我确实想更改瓷砖服务器,我该怎么做? - Yorian
不幸的是,我不知道如何为Plotly配置瓦片源,我从未与之工作过。 - scai
2个回答

0

最好在这里解释问题并给出一些代码示例,而不仅仅粘贴外部服务的链接。 - mate00

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 Token或本地Mapbox安装。 - Mapbox服务样式URL,需要Mapbox Access Token或本地Mapbox安装。 - 如https://docs.mapbox.com/mapbox-gl-js/style-spec/所定义的Mapbox Style对象。
以下是相同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紧密集成的Web服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接