我正在 Databricks 上运行 jupyter notebook 并尝试渲染地图。我尝试了文档中的示例进行测试,但它没有绘制要点。
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>"))
# Load data from sample csv
data_url = 'https://raw.githubusercontent.com/mapbox/mapboxgl-jupyter/master/examples/data/points.csv'
df = pd.read_csv(data_url)
# Must be a public token, starting with `pk`
token = mapbox_token
# Create a geojson file export from a Pandas dataframe
df_to_geojson(df, filename='points.geojson',
properties=['Avg Medicare Payments', 'Avg Covered Charges', 'date'],
lat='lat', lon='lon', precision=3)
# Generate data breaks and color stops from colorBrewer
color_breaks = [0,10,100,1000,10000]
color_stops = create_color_stops(color_breaks, colors='YlGnBu')
# Create the viz from the dataframe
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()
此问题似乎特定于 Databricks 平台以及它们如何使您能够使用文件。一个简单的解决方案是将
df_to_geojson
中的对象存储在内存中并直接在 CircleViz
类中使用它,而不是将其保存到文件中并传递文件名。下面是我在平台上成功运行的完整示例:
import mapboxgl
import pandas as pd
from mapboxgl.viz import *
from mapboxgl.utils import df_to_geojson, create_color_stops
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>"))
# Load data from sample csv
data_url = 'https://raw.githubusercontent.com/mapbox/mapboxgl-jupyter/master/examples/data/points.csv'
df = pd.read_csv(data_url)
# Must be a public token, starting with `pk`
token = mapbox_token
# Create a geojson file export from a Pandas dataframe
points = df_to_geojson(df,
properties=['Avg Medicare Payments', 'Avg Covered Charges', 'date'],
lat='lat', lon='lon', precision=3)
# Generate data breaks and color stops from colorBrewer
color_breaks = [0,10,100,1000,10000]
color_stops = create_color_stops(color_breaks, colors='YlGnBu')
# Create the viz from the dataframe
viz = CircleViz(points,
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()
它在您的示例中不起作用的原因是浏览器的 CORS 策略。根据控制台中出现的错误,您的源代码存储在不同的域 (databricksusercontent.com),并且您正试图从另一个域(databricks.com - 它可能也未存储)获取
points.geojson
文件。如果没有适当的请求标头,它会被 CORS 阻止。您可以通过开发人员工具调出控制台并运行您的代码来验证这一点。
如果您希望改为使用文件,您可以在此处阅读有关如何在 Databricks 上执行此操作的更多信息:https://docs.databricks.com/files/index.html