Skip to content

Commit 26f9668

Browse files
birdageocefpaf
authored andcommitted
adds wms,tile support
adds in a style sheet for the rotation
1 parent 741ea04 commit 26f9668

File tree

7 files changed

+391
-13
lines changed

7 files changed

+391
-13
lines changed

examples/test_rotate.ipynb

Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
{
2+
"metadata": {
3+
"name": "",
4+
"signature": "sha256:509e0d4cb2b4d71fa867a2b995bbfb634356899902221e053b1506494e2c6b33"
5+
},
6+
"nbformat": 3,
7+
"nbformat_minor": 0,
8+
"worksheets": [
9+
{
10+
"cells": [
11+
{
12+
"cell_type": "code",
13+
"collapsed": false,
14+
"input": [
15+
"import folium\n",
16+
"from IPython.display import HTML, Javascript, display"
17+
],
18+
"language": "python",
19+
"metadata": {},
20+
"outputs": [],
21+
"prompt_number": 2
22+
},
23+
{
24+
"cell_type": "code",
25+
"collapsed": false,
26+
"input": [
27+
"def inline_map(m):\n",
28+
" m._build_map()\n",
29+
" srcdoc = m.HTML.replace('\"', '"')\n",
30+
" embed = HTML('<iframe srcdoc=\"{srcdoc}\" '\n",
31+
" 'style=\"width: 100%; height: 500px; '\n",
32+
" 'border: none\"></iframe>'.format(srcdoc=srcdoc))\n",
33+
" return embed"
34+
],
35+
"language": "python",
36+
"metadata": {},
37+
"outputs": [],
38+
"prompt_number": 3
39+
},
40+
{
41+
"cell_type": "code",
42+
"collapsed": false,
43+
"input": [],
44+
"language": "python",
45+
"metadata": {},
46+
"outputs": [],
47+
"prompt_number": 3
48+
},
49+
{
50+
"cell_type": "code",
51+
"collapsed": false,
52+
"input": [
53+
"#station = st_list[st_list.keys()[0]]\n",
54+
"#map = folium.Map(location=[station[\"lat\"], station[\"lon\"]], zoom_start=4)\n",
55+
"map = folium.Map(location=[41, -71], zoom_start=4)\n",
56+
"#map.line(get_coordinates(bounding_box, bounding_box_type), line_color='#FF0000', line_weight=5)\n",
57+
"\n",
58+
"#plot the obs station, \n",
59+
"#for st in st_list: \n",
60+
"map.simple_marker([41,-72], popup='something something...<br>',marker_color=\"green\",marker_icon=\"arrow-up\",icon_angle=0)\n",
61+
"inline_map(map) "
62+
],
63+
"language": "python",
64+
"metadata": {},
65+
"outputs": [
66+
{
67+
"html": [
68+
"<iframe srcdoc=\"<!DOCTYPE html>\n",
69+
"<head>\n",
70+
" <meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; />\n",
71+
" <link rel=&quot;stylesheet&quot; href=&quot;http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css&quot; />\n",
72+
" <script src=&quot;http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js&quot;></script>\n",
73+
"\n",
74+
" <script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js&quot;></script>\n",
75+
"\n",
76+
" <link rel=&quot;stylesheet&quot; href=&quot;//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css&quot;>\n",
77+
" <link rel=&quot;stylesheet&quot; href=&quot;//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css&quot;>\n",
78+
" <script src=&quot;//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js&quot;></script>\n",
79+
"\n",
80+
" <link href=&quot;//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css&quot; rel=&quot;stylesheet&quot;>\n",
81+
"\n",
82+
" <link rel=&quot;stylesheet&quot; href=&quot;https://rawgit.com/lvoogdt/Leaflet.awesome-markers/2.0/develop/dist/leaflet.awesome-markers.css&quot;>\n",
83+
" <script src=&quot;https://rawi.8713187.xyz/lvoogdt/Leaflet.awesome-markers/2.0/develop/dist/leaflet.awesome-markers.js&quot;></script>\n",
84+
"\n",
85+
"\n",
86+
" <link rel=&quot;stylesheet&quot; href=&quot;//cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/0.4.0/MarkerCluster.Default.css&quot;>\n",
87+
" <link rel=&quot;stylesheet&quot; href=&quot;//cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/0.4.0/MarkerCluster.css&quot;>\n",
88+
" <script src=&quot;//cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/0.4.0/leaflet.markercluster-src.js&quot;></script>\n",
89+
" <script src=&quot;//cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/0.4.0/leaflet.markercluster.js&quot;></script>\n",
90+
"\n",
91+
" <link rel=&quot;stylesheet&quot; href=&quot;http://birdage.github.io/Leaflet.awesome-markers/dist/leaflet.awesome.rotate.css&quot;>\n",
92+
"\n",
93+
" \n",
94+
" \n",
95+
" \n",
96+
" \n",
97+
"\n",
98+
" <style>\n",
99+
"\n",
100+
" #map {\n",
101+
" position:absolute;\n",
102+
" top:0;\n",
103+
" bottom:0;\n",
104+
" right:0;\n",
105+
" left:0;\n",
106+
" }\n",
107+
"\n",
108+
" </style>\n",
109+
"</head>\n",
110+
"\n",
111+
"<body>\n",
112+
"\n",
113+
" <div class=&quot;folium-map&quot; id=&quot;folium_2461ec9ce3594ac382519ac321e4f100&quot; style=&quot;width: 960px; height: 500px&quot;></div>\n",
114+
"\n",
115+
" <script>\n",
116+
"\n",
117+
" \n",
118+
"\n",
119+
" var base_tile = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n",
120+
" maxZoom: 18,\n",
121+
" attribution: 'Map data (c) <a href=&quot;http://openstreetmap.org&quot;>OpenStreetMap</a> contributors'\n",
122+
" });\n",
123+
"\n",
124+
" var baseLayer = { \n",
125+
" &quot;Base Layer&quot;: base_tile\n",
126+
" };\n",
127+
"\n",
128+
" var temperature = L.tileLayer.wms('http://gis.srh.noaa.gov/arcgis/services/NDFDTemps/MapServer/WMSServer', {\n",
129+
" format: 'img/png',\n",
130+
" transparent: true,\n",
131+
" layers: 16\n",
132+
" });\n",
133+
"\n",
134+
" var precipitation = L.tileLayer.wms('http://nowcoast.noaa.gov/wms/com.esri.wms.Esrimap/obs', {\n",
135+
" format: 'image/png',\n",
136+
" transparent: true,\n",
137+
" layers: 'RAS_RIDGE_NEXRAD'\n",
138+
" });\n",
139+
"\n",
140+
" var viz = L.tileLayer.wms('http://nowcoast.noaa.gov/wms/com.esri.wms.Esrimap/obs', {\n",
141+
" format: 'image/png',\n",
142+
" transparent: true,\n",
143+
" layers: 'OBS_MET_VIS'\n",
144+
" });\n",
145+
"\n",
146+
" var hfradar1 = L.tileLayer('http://hfradar.ndbc.noaa.gov/tilesavg.php?s=10&e=100&x={x}&y={y}&z={z}&t=2014-8-7%2014:00:00&rez=1');\n",
147+
" var hfradar2 = L.tileLayer('http://hfradar.ndbc.noaa.gov/tilesavg.php?s=10&e=100&x={x}&y={y}&z={z}&t=2014-8-7%2014:00:00&rez=2');\n",
148+
" var hfradar6 = L.tileLayer('http://hfradar.ndbc.noaa.gov/tilesavg.php?s=10&e=100&x={x}&y={y}&z={z}&t=2014-8-7%2014:00:00&rez=6');\n",
149+
" var hfradar05 = L.tileLayer('http://hfradar.ndbc.noaa.gov/tilesavg.php?s=10&e=100&x={x}&y={y}&z={z}&t=2014-8-7%2014:00:00&rez=0.5');\n",
150+
"\n",
151+
" \n",
152+
"\n",
153+
" var marker_list = {\n",
154+
" &quot;temp&quot;:temperature,\n",
155+
" &quot;precip&quot;:precipitation,\n",
156+
" &quot;NOAA HF Radar 1km&quot;:hfradar1,\n",
157+
" &quot;NOAA HF Radar 2km&quot;:hfradar2,\n",
158+
" &quot;NOAA HF Radar 6km&quot;:hfradar6,\n",
159+
" &quot;NOAA HF Radar 500m&quot;:hfradar05,\n",
160+
" &quot;viz&quot;:viz\n",
161+
" };\n",
162+
"\n",
163+
" //var map = L.map('folium_2461ec9ce3594ac382519ac321e4f100').setView([41, -71], 4);\n",
164+
"\n",
165+
" var map = L.map('folium_2461ec9ce3594ac382519ac321e4f100', {\n",
166+
" center:[41, -71],\n",
167+
" zoom: 4,\n",
168+
" layers: [base_tile]\n",
169+
" });\n",
170+
"\n",
171+
" L.control.layers(baseLayer, marker_list).addTo(map);\n",
172+
"\n",
173+
"\n",
174+
"\n",
175+
" //cluster group\n",
176+
" var clusteredmarkers = L.markerClusterGroup();\n",
177+
" //section for adding clustered markers\n",
178+
" \n",
179+
" //add the clustered markers to the group anyway\n",
180+
" map.addLayer(clusteredmarkers);\n",
181+
"\n",
182+
" \n",
183+
" var marker_1_icon = L.AwesomeMarkers.icon({ icon: 'arrow-up',markerColor: 'green',prefix: 'glyphicon',extraClasses: 'fa-rotate-0'});\n",
184+
" var marker_1 = L.marker([41, \n",
185+
"\t\t\t\t\t\t\t-72],\n",
186+
"\t\t\t\t\t\t\t{'icon':marker_1_icon}\n",
187+
"\t\t\t\t\t\t\t);\n",
188+
" marker_1.bindPopup(&quot;something something...<br>&quot;);\n",
189+
" map.addLayer(marker_1)\n",
190+
" \n",
191+
"\n",
192+
" \n",
193+
"\n",
194+
" \n",
195+
"\n",
196+
" \n",
197+
"\n",
198+
" \n",
199+
"\n",
200+
" </script>\n",
201+
"\n",
202+
"</body>\" style=\"width: 100%; height: 500px; border: none\"></iframe>"
203+
],
204+
"metadata": {},
205+
"output_type": "pyout",
206+
"prompt_number": 7,
207+
"text": [
208+
"<IPython.core.display.HTML at 0x10cd86990>"
209+
]
210+
}
211+
],
212+
"prompt_number": 7
213+
},
214+
{
215+
"cell_type": "code",
216+
"collapsed": false,
217+
"input": [],
218+
"language": "python",
219+
"metadata": {},
220+
"outputs": []
221+
},
222+
{
223+
"cell_type": "code",
224+
"collapsed": false,
225+
"input": [],
226+
"language": "python",
227+
"metadata": {},
228+
"outputs": []
229+
},
230+
{
231+
"cell_type": "code",
232+
"collapsed": false,
233+
"input": [],
234+
"language": "python",
235+
"metadata": {},
236+
"outputs": []
237+
},
238+
{
239+
"cell_type": "code",
240+
"collapsed": false,
241+
"input": [],
242+
"language": "python",
243+
"metadata": {},
244+
"outputs": []
245+
},
246+
{
247+
"cell_type": "code",
248+
"collapsed": false,
249+
"input": [],
250+
"language": "python",
251+
"metadata": {},
252+
"outputs": [],
253+
"prompt_number": 3
254+
}
255+
],
256+
"metadata": {}
257+
}
258+
]
259+
}

folium/folium.py

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,85 @@ def __init__(self, location=None, width=960, height=500,
175175
self.template_vars['attr'] = attr
176176
self.tile_types.update({'Custom': {'template': tiles, 'attr': attr}})
177177

178+
self.added_layers = []
179+
self.template_vars.setdefault('wms_layers', [])
180+
self.template_vars.setdefault('tile_layers', [])
181+
182+
@iter_obj('simple')
183+
def add_tile_layer(self, tile_name=None,tile_url=None,active=False):
184+
'''adds a simple tile layer
185+
Parameters
186+
----------
187+
tile_name: string
188+
name of the tile layer
189+
tile_url: string
190+
url location of the tile layer
191+
active: boolean
192+
should the layer be active when added
193+
'''
194+
if not tile_name in self.added_layers:
195+
tile_name = tile_name.replace (" ", "_")
196+
tile_temp = self.env.get_template('tile_layer.js')
197+
198+
tile = tile_temp.render({'tile_name': tile_name,
199+
'tile_url': tile_url
200+
})
201+
202+
self.template_vars.setdefault('tile_layers', []).append((tile))
203+
204+
self.added_layers.append({tile_name:tile_url})
205+
206+
207+
@iter_obj('simple')
208+
def add_wms_layer(self, wms_name=None,wms_url=None,wms_format=None,wms_layers=None,wms_transparent=True):
209+
'''adds a simple tile layer
210+
Parameters
211+
----------
212+
wms_name: string
213+
name of wms layer
214+
wms_url : string
215+
url of wms layer
216+
'''
217+
if not wms_name in self.added_layers:
218+
wms_name = wms_name.replace (" ", "_")
219+
wms_temp = self.env.get_template('wms_layer.js')
220+
221+
wms = wms_temp.render({'wms_name': wms_name,
222+
'wms_url': wms_url,
223+
'wms_format': wms_format,
224+
'wms_layer_names':wms_layers,
225+
'wms_transparent':str(wms_transparent).lower()
226+
})
227+
228+
self.template_vars.setdefault('wms_layers', []).append((wms))
229+
230+
self.added_layers.append({wms_name:wms_url})
231+
232+
@iter_obj('simple')
233+
def add_layers_to_map(self):
234+
'''
235+
Required function to actually add the layers to the html packet
236+
'''
237+
layers_temp = self.env.get_template('add_layers.js')
238+
239+
data_string = ''
240+
for i, layer in enumerate(self.added_layers):
241+
name = layer.keys()[0]
242+
data_string+='\"'
243+
data_string+=name
244+
data_string+='\"'
245+
data_string+=': '
246+
data_string+=name
247+
if i < len(self.added_layers)-1:
248+
data_string+=",\n"
249+
else:
250+
data_string+="\n"
251+
252+
data_layers = layers_temp.render({'layers': data_string})
253+
self.template_vars.setdefault('data_layers', []).append((data_string))
254+
178255
@iter_obj('simple')
179-
def simple_marker(self, location=None, popup='Pop Text', popup_on=True,marker_color='blue',marker_icon='info-sign',clustered_marker=False):
256+
def simple_marker(self, location=None, popup='Pop Text', popup_on=True,marker_color='blue',marker_icon='info-sign',clustered_marker=False,icon_angle=0):
180257
'''Create a simple stock Leaflet marker on the map, with optional
181258
popup text or Vincent visualization.
182259
@@ -216,7 +293,8 @@ def simple_marker(self, location=None, popup='Pop Text', popup_on=True,marker_co
216293
icon_temp = self.env.get_template('simple_icon.js')
217294
icon = icon_temp.render({'icon_name': marker_num+"_icon",
218295
'icon': marker_icon,
219-
'markerColor': marker_color
296+
'markerColor': marker_color,
297+
'icon_angle': icon_angle
220298
})
221299

222300
#Get marker and popup

folium/templates/add_layers.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
var layer_list = { {{ layers }} };

0 commit comments

Comments
 (0)