Lösungen Folium¶
Exercise 1: Create a map¶
Create a map with the coordinates of your hometown, or your favorite city (Braunschweig does not count as a solution). Save your Solution in the variable my_map
.
Adjust the zoom_start parameter so that your place is visible in the center. To find out which coordinates your place has you can use the online tool latlong.net.
Use CartoDB Positron as tileset.
Set the prefer_canvas parameter to True.
Also please add your city as a comment.
In case of problems, please check the Folium API Map object.
# Your City: Gifhorn
my_map = folium.Map(
location=(52.485291, 10.547030),
tiles='cartodb positron',
zoom_start=13,
prefer_canvas=True
)
my_map
2.1: Defining a Tooltip¶
Define a tooltip variable named tooltip
with the text More about TU Braunschweig
.
tooltip = "More about TU Braunschweig"
2.2: Defining a Popup¶
Define a popup object with HTML text named tu_popup_html
and the TU BS Logo.
Address: Universitätspl. 2, 38106 Braunschweig
You can also use the Template from the Explanation.
You can find a HTML reference here. If you write better in Markdown I recommend the following converter and this Markdown reference.
tu_popup_html = folium.Popup(
'''
<p>
<img
src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/Siegel_TU_Braunschweig_transparent.svg/1200px-Siegel_TU_Braunschweig_transparent.svg.png"
alt="TU BS Logo"
height="100"
>
</p>
<p><strong>Universitätspl. 2</strong></p>
<p><em>38106 Braunschweigg</em></p>
<p><small>Germany, DE</small></p>
<p>Visit: <a href="https://www.tu-bs.de/">tu-bs.de</a> </p>
''',
show=False
)
2.3 Defining an Icon¶
Next, a red icon named tu_icon
should be defined.
The color for the glyphicon should be a gray hexcode that you can choose freely. To make the color selection easier you can use the Color Picker.
As glyph, glyphicon-education, should be used.
tu_icon = folium.Icon(
color='red',
icon_color='#eeeeee',
prefix='glyphicon',
icon='glyphicon-education',
angle=0
)
2.4 Defining a Marker¶
All previously created objects should now be combined into one marker named tu_bs_marker
.
As the location data use (52.273460, 10.529231)
.
tu_bs_marker = folium.Marker(
location=(52.273460, 10.529231),
popup=tu_popup_html,
tooltip=tooltip,
icon=tu_icon
)
m = folium.Map(
location=(52.274, 10.53),
tiles='OpenStreetMap',
zoom_start=17,
prefer_canvas=False
)
tu_bs_marker.add_to(m)
m
Exercise 3: Mapping the Universties in Lower Saxony¶
3.1: Reading the Dataset¶
The data set for this notebook is unis_nd.csv.
Read this into the variable df
using the pandas read_csv
function.
(I recommend that you take a look at the data set)
df = pd.read_csv('unis_nd.csv')
df.head(2)
University name | Type of university | Sponsorship | Right of promotion | Founding year | Number of students | Address | lat | lon | plz | pic | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | Hochschule für Bildende Künste Braunschweig | Artistic university | public | yes | 1963 | 976.0 | Johannes-Selenka-Platz 1 | 52.257738 | 10.502315 | 38118 Braunschweig | https://www.hbk-bs.de/fileadmin/_processed_/5/... |
1 | Technische Universität Carolo-Wilhelmina zu Br... | University | public | yes | 1745 | 17709.0 | Universitätspl. 2 | 52.273550 | 10.530097 | 38106 Braunschweig | https://upload.wikimedia.org/wikipedia/commons... |
3.2: Defining the Map¶
Before we plot the dataset, define a map with the name lower_saxony
.
- The location should be the georaphic centre of Lower Saxony in Wehrenberg 27318 Hoyerhagen
(52.806390, 9.135110)
. - Use a suitable tileset from the documentation
- Use a suitable zoom setting
lower_saxony = folium.Map(
# Georaphical centre Point of Lower Saxony Wehrenberg 27318 Hoyerhagen
location=(52.806390, 9.135110),
tiles='OpenStreetMap',
zoom_start=7
)
Detour Factory Functions¶
def popup_factory(adr: str, zipc: str, country: str, pic: str):
html = '''
<p><img src="{}" width="300px" height="auto"></p>
<p><strong>{}</strong></p>
<p><em>{}</em></p>
<p><small>{}</small></p>
'''.format(pic, adr, zipc, country)
return folium.Popup(html)
def icon_factory(is_public=True):
icon = folium.Icon(
color='black' if is_public else 'white',
icon_color = 'white' if is_public else 'black',
icon='glyphicon-home'
)
return icon
def marker_factory(loc, popup, is_public=True):
std_tooltip = 'Click for more information'
std_icon = icon_factory(is_public)
return folium.Marker(loc, popup=popup,
icon=std_icon, tooltip=std_tooltip)
3.3 Plotting the Dataset¶
Write a for loop which reads the values from the dataset df
and add the markers to the map lower_saxony
using the already defined functions popup_factory
and marker_factory
.
for index, row in df.iterrows():
pp = popup_factory(
adr=row['Address'],
zipc=row['plz'],
country='Germany, DE',
pic=row['pic'],
)
location = (float(row['lat']), float(row['lon']))
is_public = False
if row['Sponsorship'] == 'public':
is_public = True
marker = marker_factory(location, pp, is_public)
marker.add_to(lower_saxony)
lower_saxony