geojson 文件不会在 jupyter notebook 的 mapbox 上绘制点

问题描述 投票:0回答:1

我正在 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()

python jupyter-notebook mapbox mapbox-gl
1个回答
0
投票

此问题似乎特定于 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

© www.soinside.com 2019 - 2024. All rights reserved.