You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

持有有效API密钥与CSV数据,Bokeh谷歌地图无法显示Glyphs(点)

问题描述

我尝试用CSV文件中的有效经纬度数据,在Bokeh谷歌地图上显示数据点(Glyphs)。API密钥有效,地图能正常渲染,但圆形标记始终不显示。我已验证数据类型,地图选项也设置到了对应位置,可数据点还是没出现。

尝试的代码

from bokeh.models import ColumnDataSource, GMapOptions
from bokeh.plotting import gmap
from bokeh.io import output_file, show
import pandas as pd

output_file("gmap.html")

edu = pd.read_csv('adult_education.csv')
latitude = edu['Latitude']
longitude = edu['Longitude']

map_options = GMapOptions(lat=50.748165, lng=-122.595148, map_type="roadmap", zoom=5)

p = gmap("Valid API", map_options, title="Vancouver") 
source = ColumnDataSource(
    data=dict(lat=latitude.tolist(), 
              lon=longitude.tolist()))

p.circle(x="lon", y="lat", size=20, fill_color="blue", fill_alpha=0.8, source=source)

show(p)

当前效果

无数据点的谷歌地图

预期效果

带有蓝色数据点的谷歌地图


解决方案

1. 检查数据有效性与坐标顺序

先确认CSV里的Latitude和Longitude是数值类型,且无缺失值(NaN),可以在代码中加入验证:

print(edu[['Latitude', 'Longitude']].info())
print(edu[['Latitude', 'Longitude']].head())

如果发现坐标顺序颠倒(比如经度存在Latitude列),需要交换circle方法的x和y参数:

p.circle(x="lat", y="lon", size=20, fill_color="blue", fill_alpha=0.8, source=source)

2. 确认API权限

确保你的谷歌API密钥已启用Maps JavaScript API,且没有IP限制或配额耗尽,可在谷歌云控制台查看API状态。

3. 调整图层添加方式

直接用p.circle可能存在渲染顺序问题,改用add_glyph显式添加标记:

from bokeh.models import Circle

glyph = Circle(x="lon", y="lat", size=20, fill_color="blue", fill_alpha=0.8)
p.add_glyph(source, glyph)

4. 匹配地图范围与数据

确认数据点的经纬度在当前地图可视范围内,打印坐标范围后调整地图参数:

print("纬度范围:", edu['Latitude'].min(), "-", edu['Latitude'].max())
print("经度范围:", edu['Longitude'].min(), "-", edu['Longitude'].max())

比如温哥华市区的合适参数:

map_options = GMapOptions(lat=49.2827, lng=-123.1207, map_type="roadmap", zoom=10)

修正后的完整代码

from bokeh.models import ColumnDataSource, GMapOptions, Circle
from bokeh.plotting import gmap
from bokeh.io import output_file, show
import pandas as pd

output_file("gmap.html")

edu = pd.read_csv('adult_education.csv')
# 验证并清理数据
cleaned_data = edu[['Latitude', 'Longitude']].dropna()
print(cleaned_data.describe())

map_options = GMapOptions(lat=49.2827, lng=-123.1207, map_type="roadmap", zoom=10)

p = gmap("你的有效API密钥", map_options, title="Vancouver") 
source = ColumnDataSource(
    data=dict(
        lat=cleaned_data['Latitude'].tolist(), 
        lon=cleaned_data['Longitude'].tolist()
    )
)

p.add_glyph(source, Circle(x="lon", y="lat", size=20, fill_color="blue", fill_alpha=0.8))

show(p)

内容的提问来源于stack exchange,提问作者oosapoyo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:44:59