Databricks中Jupyter Notebook调用Mapbox无法渲染GeoJSON点位
问题
在Databricks的Jupyter Notebook中运行Mapbox官方示例代码渲染地图,仅能显示基础地图框架,无法加载点位数据。代码如下:
import mapboxgl from mapboxgl.viz import * from mapboxgl.utils import df_to_geojson import matplotlib.pyplot as plt from IPython.display import display, HTML display(HTML("<script src='https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js'></script>")) # 加载示例CSV数据 data_url = 'https://raw.githubusercontent.com/mapbox/mapboxgl-jupyter/master/examples/data/points.csv' df = pd.read_csv(data_url) # Mapbox公开访问令牌(以pk开头) token = mapbox_token # 将DataFrame导出为GeoJSON文件 df_to_geojson(df, filename='points.geojson', properties=['Avg Medicare Payments', 'Avg Covered Charges', 'date'], lat='lat', lon='lon', precision=3) # 生成颜色分段和色阶 color_breaks = [0,10,100,1000,10000] color_stops = create_color_stops(color_breaks, colors='YlGnBu') # 创建地图可视化实例 viz = CircleViz('points.geojson', access_token=token, height='400px', color_property = "Avg Medicare Payments", color_stops = color_stops, center = (-95, 40), zoom = 3, below_layer = 'waterway-label' ) viz.show()
渲染结果:
解决办法
- 避免文件路径问题,直接传入GeoJSON字符串
Databricks的文件系统环境特殊,写入本地文件后可能无法被正确读取。跳过文件生成步骤,直接将DataFrame转换为GeoJSON字符串传入可视化实例:
# 替换原文件生成和CircleViz初始化代码 geojson_data = df_to_geojson(df, properties=['Avg Medicare Payments', 'Avg Covered Charges', 'date'], lat='lat', lon='lon', precision=3) viz = CircleViz(geojson_data, access_token=token, height='400px', color_property = "Avg Medicare Payments", color_stops = color_stops, center = (-95, 40), zoom = 3, below_layer = 'waterway-label' )
- 加载完整的Mapbox GL依赖资源
原代码中加载的Leaflet与Mapbox GL是不同地图库,属于冗余依赖。替换为Mapbox官方的JS和CSS资源:
display(HTML(""" <link href='https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css' rel='stylesheet' /> <script src='https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js'></script> """))
- 验证访问令牌有效性
确保使用的是Mapbox公开访问令牌(以pk开头),且令牌未被设置IP或权限限制。可临时硬编码令牌测试(注意不要泄露至公共场景):
token = 'pk-your-public-token-here'
调整图层显示优先级
below_layer = 'waterway-label'可能导致点位被其他图层遮挡,尝试移除该参数,或改为below_layer = 'background'确保点位图层处于可见层级。核对数据字段匹配
确认GeoJSON中的属性名与color_property完全一致,可通过打印GeoJSON字符串检查结构:
print(geojson_data)
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

