def plot_linestring(geometry, speed_color=None, config=None): if (type(geometry) == LineString): geometry = gpd.GeoSeries(geometry) # set initial coords as first point of first linestring geometry_ = geometry.geometry[0] initial_coords = [geometry_.xy[1][0], geometry_.xy[0][0]] map_ = folium.Map(initial_coords, zoom_start=14) traces_json = json.loads(geometry.buffer(.00001).to_json()) if (speed_color is not None): if (np.mean(speed_color) > 1): # if absolute speeds red_speed, yellow_speed, blue_speed = 0, 25, 40 cmap_caption = 'Speed Km/h' else: # if relative speed red_speed, yellow_speed, blue_speed = 0, .4, .8 cmap_caption = 'Relative Speed to Maximum %' speed_cm = LinearColormap( ['red', 'yellow', 'blue'], vmin=red_speed, vmax=blue_speed + (blue_speed * .2), # 20% maxspeed index=[red_speed, yellow_speed, blue_speed]) speed_cm.caption = cmap_caption for elem, speed in zip(traces_json['features'], speed_color): elem['properties']['style'] = {} elem['properties']['style']['color'] = speed_cm(speed) elem['properties']['style']['fillOpacity'] = 1 map_.add_child(speed_cm) traces = folium.features.GeoJson(traces_json) map_.add_child(traces) return map_
'style': { 'color': row['Color'] } } } features.append(feature) if row["id"] in ["DNK", "FRA", "ITA", "GBR", "GRC"]: for geometry in compl.get(row["id"]).get("geometries"): feature_new = dict(feature) feature_new["geometry"] = geometry features.append(feature_new) new_map = folium.Map([50.736455, 17.666], zoom_start=4.5) TimestampedGeoJson({ 'type': 'FeatureCollection', 'features': features }, period='P1M', duration='P1M', add_last_point=True, auto_play=False, loop=False, max_speed=1, loop_button=True, date_options='YYYY/MM', time_slider_drag_update=True).add_to(new_map) colormap = LinearColormap(color_scale, vmin=0, vmax=bin_edges[-1]) colormap.caption = "Monthly average " + pollutant + " (in µg/m3)" colormap.add_to(new_map) new_map.save("../maps/avg_" + pollutant + ".html")
def create_state_count_choropleth(df, designation): ''' This function counts the number of parks per state and stores the result in a dataframe. Then it creates a linear color map using the range of parks per state. The function then reads in a GeoJSON file of the United States and merges this with the parks per state dataframe. These objects are then used to create a choropleth map of the United States with state color based on the number of parks in that state. If there are no parks in a state, it will be gray. Parameters ---------- df : Pandas DataFrame DataFrame of all parks to add to the map. designation : str Designation of parks in the dataframe. Returns ------- map : Folium map object Folium map with choropleth color added. ''' # Create a two-column dataframe of state and a count of the number # of parks in that state. state_list = df['states'].apply(lambda x: x.split(',')) state_list = reduce(operator.add, state_list) parks_per_state = (pd.DataFrame.from_dict(Counter(state_list), orient='index').reset_index()) parks_per_state = (parks_per_state.rename(columns={ 'index': 'state', 0: 'park_count' })) # Create the color map. color_scale = LinearColormap(['yellow', 'green', 'blue'], vmin=parks_per_state['park_count'].min(), vmax=parks_per_state['park_count'].max()) color_scale.caption = ( "Number of parks per state ({})".format(designation)) # Create a dataframe from the json file using GeoPandas. df_geo = gpd.read_file('_reference_data/us-states.json') df_geo = df_geo.merge(parks_per_state, left_on='id', right_on='state', how='left').fillna(0) # Find the center of the data and create an empty map. centroid = df_geo.geometry.centroid map = folium.Map(location=[centroid.y.mean(), centroid.x.mean()], zoom_start=3) # Color each state based on the number of parks in it. folium.GeoJson( data=df_geo[['geometry', 'name', 'state', 'park_count']], name='United States of America', style_function=lambda x: { 'fillColor': get_state_color(x, parks_per_state, color_scale), 'fillOpacity': 0.7, 'color': 'black', 'line_opacity': 0.5, 'weight': 0.5 }, tooltip=folium.features.GeoJsonTooltip(fields=[ 'name', 'park_count', ], aliases=["State", "# of parks" ])).add_to(map) # Add color scale legend. map.add_child(color_scale) # Save choropleth to file. map.save(set_filename('choropleth_map', 'html', designation)) return map