Revision ea51bc9d djnro/templates/front/geolocate.html
b/djnro/templates/front/geolocate.html | ||
---|---|---|
3 | 3 |
{% load staticfiles %} |
4 | 4 |
{% block currentpagetitle %}{% trans "Closest Access Point" %}{% endblock %} |
5 | 5 |
|
6 |
{% block extrajs %} |
|
7 |
<script type="text/javascript" src="//maps.google.com/maps/api/js?v=3.exp&sensor=true&language=en&libraries=places"></script> |
|
8 |
<script type="text/javascript"> |
|
9 |
var lat = "{{MAP_CENTER.0}}"; |
|
10 |
var lat = parseFloat(lat.replace(",",".")); |
|
11 |
var lng = "{{MAP_CENTER.1}}"; |
|
12 |
var lng = parseFloat(lng.replace(",",".")); |
|
13 |
var zoomLevel = 6; |
|
14 |
var latlng = new google.maps.LatLng(lat, lng); |
|
15 |
var map = ''; |
|
16 |
var bounds = ''; |
|
17 |
var image = ''; |
|
18 |
var marker = ''; |
|
19 |
var eduMarker = false; |
|
20 |
var infoWindow; |
|
21 |
var getOnce = false; |
|
22 |
var geocoder = null; |
|
23 |
var infoWindow; |
|
24 |
var directionDisplay; |
|
25 |
var directionsService = new google.maps.DirectionsService(); |
|
26 |
|
|
27 |
var styles = [{ |
|
28 |
url : '{% static 'img/edugroup.png' %}', |
|
29 |
height : 54, |
|
30 |
width : 63, |
|
31 |
textColor : '#ffffff', |
|
32 |
textSize : 11 |
|
33 |
}, { |
|
34 |
url : '{% static 'img/edugroup.png' %}', |
|
35 |
height : 54, |
|
36 |
width : 63, |
|
37 |
textColor : '#ffffff', |
|
38 |
textSize : 11 |
|
39 |
}, { |
|
40 |
url : '{% static 'img/edugroup.png' %}', |
|
41 |
height : 54, |
|
42 |
width : 63, |
|
43 |
textColor : '#ffffff', |
|
44 |
textSize : 11 |
|
45 |
}]; |
|
46 |
|
|
47 |
function initialize() { |
|
48 |
image = new google.maps.MarkerImage('{% static 'img/edupin.png' %}', |
|
49 |
new google.maps.Size(29, 40), |
|
50 |
new google.maps.Point(0, 0), |
|
51 |
new google.maps.Point(14, 40) |
|
52 |
); |
|
53 |
var styleArray = [{ |
|
54 |
featureType : "all", |
|
55 |
stylers : [{ |
|
56 |
saturation : -60 |
|
57 |
}, { |
|
58 |
gamma : 1.00 |
|
59 |
}] |
|
60 |
}, { |
|
61 |
featureType : "poi.business", |
|
62 |
elementType : "labels", |
|
63 |
stylers : [{ |
|
64 |
visibility : "off" |
|
65 |
}] |
|
66 |
}, { |
|
67 |
"featureType" : "transit.line", |
|
68 |
"elementType" : "geometry", |
|
69 |
"stylers" : [{ |
|
70 |
"visibility" : "off" |
|
71 |
}] |
|
72 |
}, { |
|
73 |
"featureType" : "poi", |
|
74 |
"elementType" : "all", |
|
75 |
"stylers" : [{ |
|
76 |
"visibility" : "off" |
|
77 |
}] |
|
78 |
}, { |
|
79 |
'featureType' : "administrative.country", |
|
80 |
'elementType' : "labels", |
|
81 |
'stylers' : [{ |
|
82 |
'visibility' : "off" |
|
83 |
}] |
|
84 |
}]; |
|
85 |
var mapOptions = { |
|
86 |
center : latlng, |
|
87 |
zoom : zoomLevel, |
|
88 |
mapTypeId : google.maps.MapTypeId.ROADMAP, |
|
89 |
styles : styleArray, |
|
90 |
mapTypeId : google.maps.MapTypeId.ROADMAP, |
|
91 |
mapTypeControlOptions : { |
|
92 |
style : google.maps.MapTypeControlStyle.DEFAULT |
|
93 |
}, |
|
94 |
navigationControl : true, |
|
95 |
mapTypeControl : false, |
|
96 |
}; |
|
97 |
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); |
|
98 |
|
|
99 |
var input = document.getElementById('searchTextField'); |
|
100 |
var autocomplete = new google.maps.places.Autocomplete(input); |
|
101 |
|
|
102 |
autocomplete.bindTo('bounds', map); |
|
103 |
|
|
104 |
infoWindow = new google.maps.InfoWindow(); |
|
105 |
bounds = new google.maps.LatLngBounds(); |
|
106 |
directionsDisplay = new google.maps.DirectionsRenderer(); |
|
107 |
geocoder = new google.maps.Geocoder(); |
|
108 |
directionsDisplay.setMap(map); |
|
109 |
|
|
110 |
if (getOnce == false) { |
|
111 |
marker = new google.maps.Marker({ |
|
112 |
position : latlng, |
|
113 |
draggable : true, |
|
114 |
animation : google.maps.Animation.DROP, |
|
115 |
|
|
116 |
}); |
|
117 |
marker.setMap(map); |
|
118 |
} |
|
119 |
google.maps.event.addListener(map, 'idle', function() { |
|
120 |
if(navigator.geolocation && getOnce == false) { |
|
121 |
navigator.geolocation.getCurrentPosition(getPosition); |
|
122 |
} |
|
123 |
|
|
124 |
}); |
|
125 |
google.maps.event.addListener(map, 'click', function(event) { |
|
126 |
moveMarker(event.latLng); |
|
127 |
}); |
|
128 |
google.maps.event.addListener(marker, 'dragend', function(event) { |
|
129 |
moveMarker(event.latLng); |
|
130 |
}); |
|
131 |
|
|
132 |
google.maps.event.addListener(autocomplete, 'place_changed', function() { |
|
133 |
var place = autocomplete.getPlace(); |
|
134 |
if (place.geometry.viewport) { |
|
135 |
map.fitBounds(place.geometry.viewport); |
|
136 |
} else { |
|
137 |
map.setCenter(place.geometry.location); |
|
138 |
map.setZoom(17); // Why 17? Because it looks good. |
|
139 |
} |
|
140 |
moveMarker(place.geometry.location); |
|
141 |
}); |
|
142 |
} |
|
143 |
|
|
144 |
function calcRoute(start, end) { |
|
145 |
$("#distanceText").html(); |
|
146 |
var request = { |
|
147 |
origin:start, |
|
148 |
destination:end, |
|
149 |
travelMode: google.maps.DirectionsTravelMode.WALKING |
|
150 |
}; |
|
151 |
directionsService.route(request, function(response, status) { |
|
152 |
if (status == google.maps.DirectionsStatus.OK) { |
|
153 |
directionsDisplay.setDirections(response); |
|
154 |
var route = response.routes[0]; |
|
155 |
var distText = route.legs[0].distance.text; |
|
156 |
$("#distanceText").html('Total distance: ' + distText); |
|
157 |
} |
|
158 |
}); |
|
159 |
} |
|
160 |
|
|
161 |
function moveMarker(position) { |
|
162 |
marker.setPosition(position); |
|
163 |
getClosest(position); |
|
164 |
} |
|
165 |
|
|
166 |
function getPosition(position) { |
|
167 |
latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); |
|
168 |
getOnce = true; |
|
169 |
map.setCenter(latlng); |
|
170 |
map.setZoom(12); |
|
171 |
marker.setPosition(latlng); |
|
172 |
getClosest(latlng); |
|
173 |
} |
|
174 |
|
|
175 |
function getClosest(coords){ |
|
176 |
$.ajax({ |
|
177 |
url:"{% url closest %}", |
|
178 |
data: {"lat": coords.lat(), "lng": coords.lng()}, |
|
179 |
type: "GET", |
|
180 |
cache: false, |
|
181 |
success:function(data){ |
|
182 |
bounds = new google.maps.LatLngBounds(); |
|
183 |
if (eduMarker){ |
|
184 |
eduMarker.setMap(null); |
|
185 |
} |
|
186 |
bounds.extend(coords); |
|
187 |
bounds.extend(new google.maps.LatLng(data.lat, data.lng)); |
|
188 |
eduMarker = new google.maps.Marker({ |
|
189 |
position : new google.maps.LatLng(data.lat, data.lng), |
|
190 |
draggable : true, |
|
191 |
'icon': image, |
|
192 |
animation : google.maps.Animation.DROP, |
|
193 |
|
|
194 |
}); |
|
195 |
eduMarker.setMap(map); |
|
196 |
map.fitBounds(bounds); |
|
197 |
calcRoute(coords, new google.maps.LatLng(data.lat, data.lng)); |
|
198 |
google.maps.event |
|
199 |
.addListener( |
|
200 |
eduMarker, |
|
201 |
'click', |
|
202 |
function() { |
|
203 |
infoWindow.setContent( "<div>" |
|
204 |
+ data.text |
|
205 |
+ "</div>"); |
|
206 |
infoWindow |
|
207 |
.open( |
|
208 |
map, |
|
209 |
eduMarker); |
|
210 |
}); |
|
211 |
} |
|
212 |
}); |
|
213 |
|
|
214 |
} |
|
215 |
|
|
216 |
function autocomplete() { |
|
217 |
|
|
218 |
var input = $('#searchTextField'); |
|
219 |
var autocomplete = new google.maps.places.Autocomplete(input); |
|
220 |
autocomplete.bindTo('bounds', map); |
|
221 |
var marker = new google.maps.Marker({ |
|
222 |
map: map |
|
223 |
}); |
|
224 |
|
|
225 |
|
|
226 |
} |
|
227 |
|
|
228 |
function resizeMap() |
|
229 |
{ |
|
230 |
|
|
231 |
if (map != undefined) |
|
232 |
{ |
|
233 |
google.maps.event.trigger(map, 'resize'); |
|
234 |
} |
|
235 |
|
|
236 |
return false; |
|
237 |
} |
|
238 |
|
|
239 |
$(document).ready(function() { |
|
240 |
initialize(); |
|
241 |
resizeMap(); |
|
242 |
$("#myloc").click(function(){ |
|
243 |
navigator.geolocation.getCurrentPosition(getPosition); |
|
244 |
return false; |
|
245 |
}); |
|
246 |
$("#mylocm").click(function(){ |
|
247 |
navigator.geolocation.getCurrentPosition(getPosition); |
|
248 |
return false; |
|
249 |
}); |
|
250 |
|
|
251 |
}); |
|
252 |
|
|
253 |
$(window).resize(function(){ |
|
254 |
resizeMap(); |
|
255 |
}); |
|
256 |
|
|
257 |
</script> |
|
258 |
{% endblock %} |
|
259 | 6 |
|
260 | 7 |
{% block bodyclass %}closest{% endblock%} |
261 |
{% block header %} |
|
262 |
<div class="push-top"></div> |
|
263 |
<nav class="navbar navbar-default navbar-fixed-top"> |
|
264 |
<div class="container"> |
|
265 |
<div class="navbar-header"> |
|
266 |
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> |
|
267 |
<span class="sr-only">Toggle navigation</span> |
|
268 |
<span class="icon-bar"></span> |
|
269 |
<span class="icon-bar"></span> |
|
270 |
<span class="icon-bar"></span> |
|
271 |
</button> |
|
272 |
<a class="navbar-brand" href="/"><img src="{% static 'img/eduroam_logo.png' %}" /></a> |
|
273 |
</div> |
|
274 |
<div id="navbar" class="navbar-collapse collapse"> |
|
275 |
<div class="col-sm-3 col-md-3 pull-right"> |
|
276 |
<div class="input-group" style="margin-top: 8px;"> |
|
277 |
<span class="input-group-btn"> |
|
278 |
<button id="mylocm" class="btn btn-default" type="button">My location</button> |
|
279 |
</span> |
|
280 |
<input type="text" id="searchTextField" class="form-control" placeholder="Search for..."> |
|
281 |
</div> |
|
282 |
</div> |
|
283 |
<div class="col-sm-3 col-md-3 pull-right" style="margin-top: 18px"> |
|
284 |
<span id="distanceText"></span> |
|
285 |
</div> |
|
286 |
</div> |
|
8 |
{% block header %} |
|
9 |
<div class="push-top"></div> |
|
10 |
<nav class="navbar navbar-default navbar-fixed-top"> |
|
11 |
<div class="container"> |
|
12 |
<div class="navbar-header"> |
|
13 |
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> |
|
14 |
<span class="sr-only">Toggle navigation</span> |
|
15 |
<span class="icon-bar"></span> |
|
16 |
<span class="icon-bar"></span> |
|
17 |
<span class="icon-bar"></span> |
|
18 |
</button> |
|
19 |
<a class="navbar-brand" href="/"><img src="{% static 'img/eduroam_logo.png' %}" /></a> |
|
287 | 20 |
</div> |
288 |
</nav> |
|
21 |
<div id="navbar" class="navbar-collapse collapse"> |
|
22 |
<div class="col-sm-3 col-md-3 pull-right"> |
|
23 |
<div class="input-group" style="margin-top: 8px;"> |
|
24 |
<span class="input-group-btn"> |
|
25 |
<button id="mylocm" class="btn btn-default" type="button">My location</button> |
|
26 |
</span> |
|
27 |
<input type="text" id="searchTextField" class="form-control" placeholder="Search for..."> |
|
28 |
</div> |
|
29 |
</div> |
|
30 |
<div class="col-sm-3 col-md-3 pull-right" style="margin-top: 18px"> |
|
31 |
<span id="distanceText"></span> |
|
32 |
</div> |
|
33 |
</div> |
|
34 |
</div> |
|
35 |
</nav> |
|
289 | 36 |
{% endblock %} |
37 |
|
|
290 | 38 |
{% block content %} |
291 |
<div id="map_canvas" style="width:100%"></div>
|
|
39 |
<div id="map_canvas" data-center-lat="{{ MAP_CENTER.0 }}" data-closest="{% url closest %}"" data-center-lng="{{ MAP_CENTER.1 }}" data-pin="{% static 'img/edupin.png' %}" data-group="{% static 'img/edugroup.png' %}" style="width:100%"></div>
|
|
292 | 40 |
{% endblock %} |
293 | 41 |
|
42 |
{% block extrajs %} |
|
43 |
<script type="text/javascript" src="//maps.google.com/maps/api/js?v=3.exp&sensor=true&language=en&libraries=places"></script> |
|
44 |
<script type="text/javascript" src="{% static 'js/geolocate.js' %}"></script> |
|
45 |
{% endblock %} |
Also available in: Unified diff