def get_mini_map(): name = request.args.get('name') lat = request.args.get('lat') lng = request.args.get('lng') size = request.args.get('size') size = f"{round(float(size)*0.00024710538146717,1)} acres" if size else 'unknown size' # convert to acres m = folium.Map(location=(lat, lng), zoom_start=14, min_zoom=11, width='100%', height='100%', disable_3D=False) popup=folium.map.Popup(html=f""" <style> root {{ text-align: center; font-family: 'Noto Sans', sans-serif; font-size: 20%; }} h6 {{ margin-bottom: -1em }} </style> <h6>{name}</h6> <p> {size}<br> {lat}, {lng} </p> """) m.add_child(folium.Marker( [lat, lng], popup=popup, icon=folium.Icon(prefix='fa', icon='circle', color='lightgray') )) #, width='70vw', height='60vh', max_width='250', max_height='200' LocateControl().add_to(m) return m.get_root().render()
def on_change(change): if change['type'] == 'change' and change['name'] == 'value': clear_output(wait=True) display(w) valor = w.value print(valor) lat1 = valor[0] lon1 = valor[1] ubs = valor[2] mapa = folium.Map (location = [-4.275,-41.78], tiles = 'OpenStreetMap', zoom_start = 13.5, attr = 'Colaboradores do OpenStreetMap e Alunos de CartoUFPR/ Dados IPPUC' ) request_params = {'coordinates': [[lon1, lat1], [-41.77286170000001,-4.2696983]], 'format_out': 'geojson', 'profile': 'driving-car', 'preference': 'shortest', 'instructions': 'false',} route_normal = clnt.directions(**request_params) folium.features.GeoJson(data=route_normal, name='Rota entre os pontos', style_function=lambda x: style, overlay=True).add_to(mapa) coordenadas = [[lat1,lon1], [-4.2696983,-41.77286170000001]] folium.Marker([valor[0],valor[1]],icon=valor[2], tooltip=valor[3], popup=valor[4]).add_to(mapa) LocateControl(auto_start=True).add_to(mapa) mapa.fit_bounds(coordenadas) display(mapa)
def basemap_layer(): m = folium.Map( location=[39, 136], tiles= 'https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}{r}.png', attr= '© <a href="https://stadiamaps.com/">Stadia Maps</a>, © <a href="https://openmaptiles.org/">OpenMapTiles</a> © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors', prefer_canvas=True, control_scale=True, zoom_start=5, min_zoom=4, max_zoom=20, width=800, height=600) LocateControl(auto_start=False).add_to(m) return m
import folium from folium.plugins import MarkerCluster from folium.plugins import LocateControl import json m = folium.Map(location=[41.69342, 44.80182], zoom_start=11) mk = MarkerCluster().add_to(m) lc = LocateControl().add_to(m) node = json.load(open('pharmacy_geo.geojson', encoding='utf8')) gj = folium.GeoJson(node) try: for feature in gj.data['features']: if feature['geometry']['type'] == 'Point': folium.Marker( location=list(reversed(feature['geometry']['coordinates'])), popup=folium.Popup(feature['properties']['name'])).add_to(mk) except: pass m.save('index.html')
folium.Marker([-4.271438,-41.791732], popup = ppp02, tooltip=ttp02, icon = ubsf02).add_to(cluster) #Tempo Integral a20 = folium.features.CustomIcon('https://lh3.googleusercontent.com/BPN1b1myVtu9QMVeEGrx6ctrRIxD4vZ_rjlal-oIb7fzowjctFKgEKnzjVWekWswHMqrqPCmFwyOC1bgGiEjoWPpopeuu8ND6H359K5y8Fb_5Z6RXEXfVcuwY_uLdt6rZaxfFd0QjnLs-sKIGao1xZ8RCOcv2LIcduwXB4RCvUU2sgLgJh7k2K2AXzaM4xL51LRd8VmGjN9T9ke5BWmzlEFBTvQYo9oPtMsRNG4x4oTUr8MP-yao7rIZdqbbc5a3qUkp3PdXa6IYwoBCXO1zDnHqqTWjm-61ZqbfaIR-oYVP-a5rgBoqcmx-RySRpGFqt1y02TeNQxcBFzhwc106zbooGHJNVMMeYUH0YRzj626fBDd-im6hodn6cyOkDJffbp5CcBerhPkHJiR4b6KmEdSDzBqf7n4_Zxh3PnGNd6iPlwZZVpJTGSqJIfvBknYN0oiXJ1VMY54PpDOyXlAdL5jgHF8LTXzw5u6RIzjEJ8altqmIOPbcJ7sWOgOOSgeITEK3TGdakD0MZ3jftOZshKas9sW7FtMSd1XlYhZ3ixUpioeldCwLG2hV_dMZBU92s9SR1DPGi7Aa3rRa75FvmH8450qDYdkJZ4uDFU18Pk9LlAMMhlyW6KLaFnEIf0flqlUloXoiReRTz2K-Mzym5UNg2AsqLmoMqnU5ovszSjGfmmHnGf5-POnvAUbZZQ=w98-h82-no?authuser=0' ,icon_size=(75, 65)) f20 = folium.features.CustomIcon('https://lh3.googleusercontent.com/bZu6KNSlrfo8Nwz1IiQ4tY8hoXw7WuVP_r9TLui8JWKgz4Mz8PGfD79tUNKjdRTmVU-HHREzrpPfg_ef88loWj6EECjeGXzb3pPP6IlaD6abnmZjdUQBlG_A8a1Ffqhr1QAZjAic0qvLdA-0TG_KS4wUsXO9_q3pg_5cwGDV4P07fH_cXxtGj4kfR0C79O52ZNQ0YujSFEp24ZrVqRW0bxiZvlk8loqIcrPaY4lbCxK13WFN5KvMwarQIc2rJ4g90VaVcRlupig3xA4PxtXL9MsLpLla3yKkAg9WVdQLyXnTTbuM7rTV9QrAGmXndpKPa0mPuKapaLVeT8kzce0N5KzQ_-xQSqXuqjuqdcuqTnMNyAwAU45NACChJWBOuXCnu3bSpcneznMEqhF6aFmpZZfb8mADsBfn6XbRXew5oQRAtPdAO5C9SUIQyq_lu3pO0ioqRqRKww3tDyfEqm5JBUsw0HrAB1vjVFKZrGNY7fWnrRQjJVBRWJSPELOirqvKsnbJhJpw0bkJsdGT0ZvJPp7GF3P9QwkCfDlZmYyKA8I1yArHmzGYNLgNxCuf_JC2Y4nglvQ_63COHVpAnZdDtV0WSKtHGElRKKNIzAssF7svlTU7LD_YYMnS1NWHvkseyuRjPE5pVeR3Eeh567tpylMtHj-7vDYgG8I4fSY_fOPI-TyXvvvoK8egwyJyUg=w104-h79-no?authuser=0' ,icon_size=(70, 60)) if hora in range(7, 17) and dia in range(0,5): ubsf20 = a20 else: ubsf20 = f20 folium.Marker([-4.272683,-41.762476], popup=ppp20, tooltip = ttp20, icon = ubsf20).add_to(cluster) LocateControl(auto_start=True).add_to(m) #Legenda from branca.element import Template, MacroElement template = """ {% macro html(this, kwargs) %} <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>jQuery UI Draggable - Default functionality</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
def build_folium_map(language): # df_vol, df_req = get_sheets_df(gc, '16EcK3wX-bHfLpL3cj36j49PRYKl_pOp60IniREAbEB4') #TODO: hide sheetname df_vol, df_req = get_sheets_df( gc, '1CmhMm_RnnIfP71bliknEYy8HWDph2kUlXoIhAbYeJQE' ) #Uncomment this sheet for testing (links to public sheet) and comment out line above def get_popup_html(row, category): '''Builds a folium HTML popup to display in folium marker objects row (pandas Series): row from the google sheets dataframe ''' va_email = '*****@*****.**' if category == 'Volunteers': email_subject = f"Delivery%20Request%20for%20{row['Given Name']}" html = "<head><style>body{font-size:14px;font-family:sans-serif}</style></head><body>"+\ f"<b>{translator('Volunteers', language)}</b> <br>" + \ f"<b>{translator('Name', language)}:</b> {row['Given Name']} <br>" + \ f"<b>{translator('Country', language)}:</b> {row['Country']} <br>" +\ f"<b>{translator('City', language)}:</b> {row['City/Town']} <br>" +\ f"<b>{translator('Services', language)}:</b> {row['Type of Services']} <br>" +\ f"<b>{translator('Transportation', language)}:</b> {row['Mode of Transportation']} <br>" +\ f"<b>{translator('Radius', language)}:</b> {int(row['Radius'])} km <br>" +\ f"<b>{translator('Day of Week', language)}:</b> {row['Preferred Day of Week']} <br>" +\ f"<b>{translator('Time of Day', language)}:</b> {row['Preferred Time of Day']} <br>" +\ f"<b>{translator('Languages', language)}:</b> {row['Languages Spoken']} <br>" +\ f"<b>{translator('Payment', language)}:</b> {row['Reimbursement Method']} <br>" +\ f"<b>{translator('About Me', language)}:</b> {row['About Me']} <br>" +\ f"<a href='mailto:{row['Email Address']}?cc={va_email}&Subject={email_subject}' target='_blank'>Contact {row['Given Name']}</a> <br></body>" elif category == 'Requests': html = "<head><style>body{font-size:14px;font-family:sans-serif}</style></head><body>"+\ f"<b>{translator('Requests', language)}</b> <br>" + \ f"<b>{translator('Country', language)}:</b> {row['Country']} <br>" +\ f"<b>{translator('City', language)}:</b> {row['City/Town']} <br>" +\ f"<b>{translator('Services', language)}:</b> {row['Type of Services']} <br>" +\ f"<b>{translator('Type', language)}:</b> {row['Type of Request']} <br>" +\ f"<b>{translator('Day of Week', language)}:</b> {row['Preferred Day of Week']} <br>" +\ f"<b>{translator('Time of Day', language)}:</b> {row['Preferred Time of Day']} <br>" +\ f"<b>{translator('Languages', language)}:</b> {row['Languages Spoken']} <br>" +\ f"<b>{translator('Payment', language)}:</b> {row['Reimbursement Method']} <br>" +\ f"<a href='https://docs.google.com/forms/d/e/1FAIpQLSfw3LFsXtCCmr-ewkUuIltKIP5PKNY8Xn8h3MjVrFrvfvktPw/viewform?embedded=true' target='_blank'>Sign Up to Help</a> <br></body>" iframe = folium.IFrame(html=folium.Html(html, script=True), width=260, height=len(html) / 2.25) popup = folium.Popup(iframe) return popup def build_marker_cluster(m, df, category): dff = df.dropna(axis=0, how='any', subset=['Latitude', 'Longtitude']).copy() if category == 'Volunteers': dff = dff.loc[(dff.Health == 'Yes') & (dff.Availability == 'Yes')] marker_color = '#00d700' elif category == 'Requests': marker_color = '#d77a00' #add marker cluster mc = MarkerCluster(name=translator(category, language), control=True, overlay=True, showCoverageOnHover=False) #add circle markers for idx, row in dff.iterrows(): dense_cities = [ 'Montreal', 'Toronto', 'Ottawa', 'Montréal', 'Cote St Luc', 'Gatineau' ] #HACK: make people outside major clusters reflect their true radius if category == 'Volunteers' and row[ 'City/Town'] not in dense_cities: radius = row['Radius'] * 1000 else: radius = 250 mc.add_child( folium.Circle(radius=radius, location=[row['Latitude'], row['Longtitude']], popup=get_popup_html(row, category), color=marker_color, fill=True, fill_color=marker_color)).add_to(m) #build map m = folium.Map( location=[42, -97.5], #Canada tiles='Stamen Terrain', min_zoom=3, zoom_start=4, control_scale=True) build_marker_cluster(m, df_vol, 'Volunteers') build_marker_cluster(m, df_req, 'Requests') #add layer control folium.LayerControl(collapsed=True).add_to(m) #add location control LocateControl(flyTo=True, keepCurrentZoomLevel=False, showPopup=True, returnToPrevBounds=True, locateOptions=dict(maxZoom=13)).add_to(m) return m._repr_html_()
0, drop=True).fillna(0) df4['smoothedmap'] = df4.groupby( ['roadcode'])[map_param].rolling(smoothing).mean().reset_index( 0, drop=True).fillna(0) spacing = min(int((df3.shape[0] + df4.shape[0])**(1 / 3) / 200) + 1, 1) df3.iloc[1::spacing].apply(lambda x: plotDot(x, 'blue'), axis=1) df4.iloc[1::spacing].apply(lambda x: plotDot(x, 'red'), axis=1) #if df3.shape[0] > df4.shape[0]: # df3.iloc[1::10].apply(lambda x: plotChain(x), axis = 1) #else: # df4.iloc[1::10].apply(lambda x: plotChain(x), axis = 1) #gdf_gullies.apply(lambda x: plotGul(x), axis = 1) gdf_acc.apply(lambda x: plotAcc(x), axis=1) #mapa.add_child(feature_group2) mapa.add_child(feature_group4) mapa.add_child(feature_group5) mapa.add_child(feature_group6) mapa.add_child(feature_group7) mapa.add_child(feature_group8) mapa.add_child(folium.map.LayerControl()) from folium.plugins import LocateControl LocateControl().add_to(mapa) folium_static(mapa)
custom_marker = folium.Marker(location=coordinates, icon=custom_icon, tooltip=name, popup=popup) # If pub is within Oxford boundary, add to Oxford cluster if oxford_boundary.contains(Point((coordinates[1], coordinates[0]))): custom_marker.add_to(oxford_cluster) else: # Else add marker to map custom_marker.add_to(OxfordshireMap) # Add oxford cluster to map oxford_cluster.add_to(OxfordshireMap) # Add geolocation feature to map. LocateControl(auto_start=False).add_to(OxfordshireMap) # Define webpage title html and add to script. tab_title = """<title>Pubs of Oxfordshire Maps</title>""" OxfordshireMap.get_root().html.add_child(folium.Element(tab_title)) # Save map to HTML OxfordshireMap.save('Map.html') # Define tab icon html (using https://realfavicongenerator.net/ which generates favicons). Images must be in the ROOT folder. # Apple iOS truncates App names with > 12 chars. So we use Figure Space char ( ) to still get a space tab_icon = """<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"> <link rel="manifest" href="site.webmanifest"> <link rel="mask-icon" href="safari-pinned-tab.svg" color="#484848">