Home > Mobile >  Adding GeoJSON contours as layers on Plotly Density_Mapbox
Adding GeoJSON contours as layers on Plotly Density_Mapbox

Time:10-05

I would like to add a weather contour on top of a plotly density_mapbox map, but am unsure of the necessary steps.

First, I created a matplotlib contour plot to visualize the data.

Then, I used geojsoncontour to create a geojson file from said matplotlib contour plot of the contours.

What I would like to do now, is plot the contours in the same map as the density_mapbox.

geojson and .csv files containing data can be found enter image description here

Creating the matplotlib contour plot and generating the geojson file

# Load in the DataFrame
path = r'/Users/joe_kiefner/Desktop/Sample_Data.csv'
df = pd.read_csv(path, index_col=[0])
data = []

# Define rain levels to be contours in geojson
levels = [0.25,0.5,1,2.5,5,10]

colors = ['royalblue',  'cyan',  'lime',  'yellow', 'red']
vmin   = 0
vmax   = 1
cm     = branca.colormap.LinearColormap(colors, vmin=vmin, vmax=vmax).to_step(len(levels))


x_orig = (df.long.values.tolist())
y_orig = (df.lat.values.tolist())
z_orig = np.asarray(df['Rain_in'].values.tolist())


x_arr          = np.linspace(np.min(x_orig), np.max(x_orig), 500)
y_arr          = np.linspace(np.min(y_orig), np.max(y_orig), 500)
x_mesh, y_mesh = np.meshgrid(x_arr, y_arr)

xscale = df.long.max() - df.long.min()
yscale = df.lat.max() - df.lat.min()

scale = np.array([xscale, yscale])


z_mesh = griddata((x_orig, y_orig), z_orig, (x_mesh, y_mesh), method='linear')


sigma = [5, 5]
z_mesh = sp.ndimage.filters.gaussian_filter(z_mesh, sigma, mode='nearest')

# Create the contour
contourf = plt.contourf(x_mesh, y_mesh, z_mesh, levels, alpha=0.9, colors=colors, 
                        linestyles='none', vmin=vmin, vmax=vmax)

# Convert matplotlib contourf to geojson
geojson = geojsoncontour.contourf_to_geojson(
    contourf=contourf,
    min_angle_deg=3,
    ndigits=2,
    unit='in',
    stroke_width=1,
    fill_opacity=0.3)
d = json.loads(geojson)
len_features=len(d['features'])
if not data:
    data.append(d)
else:
    for i in range(len(d['features'])):
         data[0]['features'].append(d['features'][i])
            
with open('/path/to/Sample.geojson', 'w') as f:
   dump(geojson, f)

enter image description here

CodePudding user response:

  • there are two core options
    1. add as layers enter image description here

      traces

      enter image description here

  • Related