root / static / js / world-map.js @ 242932f3
History | View | Annotate | Download (7.3 kB)
1 | 242932f3 | Kroustouris Stauros | var lat = ""; |
---|---|---|---|
2 | 242932f3 | Kroustouris Stauros | var lng = ""; |
3 | 242932f3 | Kroustouris Stauros | var zoomLevel = 6; |
4 | 242932f3 | Kroustouris Stauros | var latlng;
|
5 | 242932f3 | Kroustouris Stauros | var map = ''; |
6 | 242932f3 | Kroustouris Stauros | var bounds = ''; |
7 | 242932f3 | Kroustouris Stauros | var image = ''; |
8 | 242932f3 | Kroustouris Stauros | var infoWindow;
|
9 | 242932f3 | Kroustouris Stauros | addr = {}; |
10 | 242932f3 | Kroustouris Stauros | var styles;
|
11 | 242932f3 | Kroustouris Stauros | var pinImg;
|
12 | 242932f3 | Kroustouris Stauros | var pinsUrl;
|
13 | 242932f3 | Kroustouris Stauros | var cityImg;
|
14 | 242932f3 | Kroustouris Stauros | var countryImg;
|
15 | 242932f3 | Kroustouris Stauros | |
16 | 242932f3 | Kroustouris Stauros | function initialize() { |
17 | 242932f3 | Kroustouris Stauros | image = new google.maps.MarkerImage(pinImg,
|
18 | 242932f3 | Kroustouris Stauros | // This marker is 29 pixels wide by 40 pixels tall.
|
19 | 242932f3 | Kroustouris Stauros | new google.maps.Size(29, 40), |
20 | 242932f3 | Kroustouris Stauros | // The origin for this image is 0,0.
|
21 | 242932f3 | Kroustouris Stauros | new google.maps.Point(0, 0), |
22 | 242932f3 | Kroustouris Stauros | // The anchor for this image is the base of the flagpole at 18,42.
|
23 | 242932f3 | Kroustouris Stauros | new google.maps.Point(14, 40)); |
24 | 242932f3 | Kroustouris Stauros | |
25 | 242932f3 | Kroustouris Stauros | var styleArray = [ {
|
26 | 242932f3 | Kroustouris Stauros | featureType : "all", |
27 | 242932f3 | Kroustouris Stauros | stylers : [ {
|
28 | 242932f3 | Kroustouris Stauros | saturation : -60 |
29 | 242932f3 | Kroustouris Stauros | }, { |
30 | 242932f3 | Kroustouris Stauros | gamma : 1.00 |
31 | 242932f3 | Kroustouris Stauros | } ] |
32 | 242932f3 | Kroustouris Stauros | }, { |
33 | 242932f3 | Kroustouris Stauros | featureType : "poi.business", |
34 | 242932f3 | Kroustouris Stauros | elementType : "labels", |
35 | 242932f3 | Kroustouris Stauros | stylers : [ {
|
36 | 242932f3 | Kroustouris Stauros | visibility : "off" |
37 | 242932f3 | Kroustouris Stauros | } ] |
38 | 242932f3 | Kroustouris Stauros | }, { |
39 | 242932f3 | Kroustouris Stauros | "featureType" : "transit.line", |
40 | 242932f3 | Kroustouris Stauros | "elementType" : "geometry", |
41 | 242932f3 | Kroustouris Stauros | "stylers" : [ {
|
42 | 242932f3 | Kroustouris Stauros | "visibility" : "off" |
43 | 242932f3 | Kroustouris Stauros | } ] |
44 | 242932f3 | Kroustouris Stauros | }, { |
45 | 242932f3 | Kroustouris Stauros | "featureType" : "poi", |
46 | 242932f3 | Kroustouris Stauros | "elementType" : "all", |
47 | 242932f3 | Kroustouris Stauros | "stylers" : [ {
|
48 | 242932f3 | Kroustouris Stauros | "visibility" : "off" |
49 | 242932f3 | Kroustouris Stauros | } ] |
50 | 242932f3 | Kroustouris Stauros | }, { |
51 | 242932f3 | Kroustouris Stauros | 'featureType' : "administrative.country", |
52 | 242932f3 | Kroustouris Stauros | 'elementType' : "labels", |
53 | 242932f3 | Kroustouris Stauros | 'stylers' : [ {
|
54 | 242932f3 | Kroustouris Stauros | 'visibility' : "off" |
55 | 242932f3 | Kroustouris Stauros | } ] |
56 | 242932f3 | Kroustouris Stauros | } |
57 | 242932f3 | Kroustouris Stauros | |
58 | 242932f3 | Kroustouris Stauros | ]; |
59 | 242932f3 | Kroustouris Stauros | |
60 | 242932f3 | Kroustouris Stauros | geocoder = new google.maps.Geocoder();
|
61 | 242932f3 | Kroustouris Stauros | if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { |
62 | 242932f3 | Kroustouris Stauros | isDraggable = false;
|
63 | 242932f3 | Kroustouris Stauros | isScrollable = true;
|
64 | 242932f3 | Kroustouris Stauros | } else {
|
65 | 242932f3 | Kroustouris Stauros | isDraggable = true;
|
66 | 242932f3 | Kroustouris Stauros | isScrollable = false;
|
67 | 242932f3 | Kroustouris Stauros | } |
68 | 242932f3 | Kroustouris Stauros | var mapOptions = {
|
69 | 242932f3 | Kroustouris Stauros | center : latlng,
|
70 | 242932f3 | Kroustouris Stauros | zoom : zoomLevel,
|
71 | 242932f3 | Kroustouris Stauros | mapTypeId : google.maps.MapTypeId.ROADMAP,
|
72 | 242932f3 | Kroustouris Stauros | styles : styleArray,
|
73 | 242932f3 | Kroustouris Stauros | mapTypeId : google.maps.MapTypeId.ROADMAP,
|
74 | 242932f3 | Kroustouris Stauros | mapTypeControlOptions : {
|
75 | 242932f3 | Kroustouris Stauros | style : google.maps.MapTypeControlStyle.DEFAULT
|
76 | 242932f3 | Kroustouris Stauros | }, |
77 | 242932f3 | Kroustouris Stauros | navigationControl : true, |
78 | 242932f3 | Kroustouris Stauros | mapTypeControl : false, |
79 | 242932f3 | Kroustouris Stauros | scrollwheel: isScrollable,
|
80 | 242932f3 | Kroustouris Stauros | draggable: isDraggable
|
81 | 242932f3 | Kroustouris Stauros | }; |
82 | 242932f3 | Kroustouris Stauros | map = new google.maps.Map(document.getElementById("map_canvas"), |
83 | 242932f3 | Kroustouris Stauros | mapOptions); |
84 | 242932f3 | Kroustouris Stauros | |
85 | 242932f3 | Kroustouris Stauros | |
86 | 242932f3 | Kroustouris Stauros | var homeControlDiv = document.createElement('div'); |
87 | 242932f3 | Kroustouris Stauros | homeControlDiv.className='roundButtonHolder';
|
88 | 242932f3 | Kroustouris Stauros | homeControlDiv.id="locationButton";
|
89 | 242932f3 | Kroustouris Stauros | var homeControl = new HomeControl(homeControlDiv, map); |
90 | 242932f3 | Kroustouris Stauros | |
91 | 242932f3 | Kroustouris Stauros | homeControlDiv.index = 1;
|
92 | 242932f3 | Kroustouris Stauros | map.controls[google.maps.ControlPosition.TOP_LEFT].push(homeControlDiv); |
93 | 242932f3 | Kroustouris Stauros | |
94 | 242932f3 | Kroustouris Stauros | bounds = new google.maps.LatLngBounds();
|
95 | 242932f3 | Kroustouris Stauros | infoWindow = new google.maps.InfoWindow();
|
96 | 242932f3 | Kroustouris Stauros | google.maps.event.addListener(map, 'idle', function() { |
97 | 242932f3 | Kroustouris Stauros | center = map.getCenter(); |
98 | 242932f3 | Kroustouris Stauros | geocode(center); |
99 | 242932f3 | Kroustouris Stauros | zoom = map.getZoom(); |
100 | 242932f3 | Kroustouris Stauros | if (zoom > 12){ |
101 | 242932f3 | Kroustouris Stauros | $("#showCityBtn").show(); |
102 | 242932f3 | Kroustouris Stauros | $("#showCountryBtn").hide(); |
103 | 242932f3 | Kroustouris Stauros | } |
104 | 242932f3 | Kroustouris Stauros | else if ((zoom <= 12) && (zoom > 7)){ |
105 | 242932f3 | Kroustouris Stauros | $("#showCityBtn").hide(); |
106 | 242932f3 | Kroustouris Stauros | $("#showCountryBtn").show(); |
107 | 242932f3 | Kroustouris Stauros | } |
108 | 242932f3 | Kroustouris Stauros | else {
|
109 | 242932f3 | Kroustouris Stauros | $("#showCityBtn").hide(); |
110 | 242932f3 | Kroustouris Stauros | $("#showCountryBtn").hide(); |
111 | 242932f3 | Kroustouris Stauros | } |
112 | 242932f3 | Kroustouris Stauros | }); |
113 | 242932f3 | Kroustouris Stauros | |
114 | 242932f3 | Kroustouris Stauros | |
115 | 242932f3 | Kroustouris Stauros | } |
116 | 242932f3 | Kroustouris Stauros | |
117 | 242932f3 | Kroustouris Stauros | var markers = new Array(); |
118 | 242932f3 | Kroustouris Stauros | function placeMarkers() { |
119 | 242932f3 | Kroustouris Stauros | $.get(
|
120 | 242932f3 | Kroustouris Stauros | pinsUrl, |
121 | 242932f3 | Kroustouris Stauros | function(data) {
|
122 | 242932f3 | Kroustouris Stauros | $.each(
|
123 | 242932f3 | Kroustouris Stauros | data, |
124 | 242932f3 | Kroustouris Stauros | function(index, jsonMarker) {
|
125 | 242932f3 | Kroustouris Stauros | var marker = createMarker(jsonMarker);
|
126 | 242932f3 | Kroustouris Stauros | if (marker) {
|
127 | 242932f3 | Kroustouris Stauros | bounds.extend(marker.position); |
128 | 242932f3 | Kroustouris Stauros | markers.push(marker); |
129 | 242932f3 | Kroustouris Stauros | google.maps.event.addListener( |
130 | 242932f3 | Kroustouris Stauros | marker, |
131 | 242932f3 | Kroustouris Stauros | 'click',
|
132 | 242932f3 | Kroustouris Stauros | function() {
|
133 | 242932f3 | Kroustouris Stauros | infoWindow.setContent(jsonMarker.text); |
134 | 242932f3 | Kroustouris Stauros | infoWindow.open( |
135 | 242932f3 | Kroustouris Stauros | map, |
136 | 242932f3 | Kroustouris Stauros | marker |
137 | 242932f3 | Kroustouris Stauros | ); |
138 | 242932f3 | Kroustouris Stauros | } |
139 | 242932f3 | Kroustouris Stauros | ); |
140 | 242932f3 | Kroustouris Stauros | } |
141 | 242932f3 | Kroustouris Stauros | } |
142 | 242932f3 | Kroustouris Stauros | ); |
143 | 242932f3 | Kroustouris Stauros | var mcOptions = {
|
144 | 242932f3 | Kroustouris Stauros | gridSize : 60, |
145 | 242932f3 | Kroustouris Stauros | maxZoom : null, |
146 | 242932f3 | Kroustouris Stauros | styles : styles
|
147 | 242932f3 | Kroustouris Stauros | }; |
148 | 242932f3 | Kroustouris Stauros | |
149 | 242932f3 | Kroustouris Stauros | var markerCluster = new MarkerClusterer( |
150 | 242932f3 | Kroustouris Stauros | map, |
151 | 242932f3 | Kroustouris Stauros | markers, |
152 | 242932f3 | Kroustouris Stauros | mcOptions |
153 | 242932f3 | Kroustouris Stauros | ); |
154 | 242932f3 | Kroustouris Stauros | map.fitBounds(bounds); |
155 | 242932f3 | Kroustouris Stauros | } |
156 | 242932f3 | Kroustouris Stauros | ); |
157 | 242932f3 | Kroustouris Stauros | } |
158 | 242932f3 | Kroustouris Stauros | |
159 | 242932f3 | Kroustouris Stauros | function createMarker(markerObj) { |
160 | 242932f3 | Kroustouris Stauros | var latLng = new google.maps.LatLng(markerObj.lat, markerObj.lng); |
161 | 242932f3 | Kroustouris Stauros | var marker = new google.maps.Marker({ |
162 | 242932f3 | Kroustouris Stauros | 'position' : latLng,
|
163 | 242932f3 | Kroustouris Stauros | 'map' : map,
|
164 | 242932f3 | Kroustouris Stauros | 'icon' : image,
|
165 | 242932f3 | Kroustouris Stauros | }); |
166 | 242932f3 | Kroustouris Stauros | return marker
|
167 | 242932f3 | Kroustouris Stauros | } |
168 | 242932f3 | Kroustouris Stauros | |
169 | 242932f3 | Kroustouris Stauros | function clusterMarkers(markers) { |
170 | 242932f3 | Kroustouris Stauros | var markerCluster = new MarkerClusterer(map, markers); |
171 | 242932f3 | Kroustouris Stauros | } |
172 | 242932f3 | Kroustouris Stauros | |
173 | 242932f3 | Kroustouris Stauros | |
174 | 242932f3 | Kroustouris Stauros | function geocode(position){ |
175 | 242932f3 | Kroustouris Stauros | addr = {}; |
176 | 242932f3 | Kroustouris Stauros | geocoder |
177 | 242932f3 | Kroustouris Stauros | .geocode( |
178 | 242932f3 | Kroustouris Stauros | { |
179 | 242932f3 | Kroustouris Stauros | 'latLng' : position
|
180 | 242932f3 | Kroustouris Stauros | }, |
181 | 242932f3 | Kroustouris Stauros | function(results, status) {
|
182 | 242932f3 | Kroustouris Stauros | if (status == google.maps.GeocoderStatus.OK) {
|
183 | 242932f3 | Kroustouris Stauros | if (results.length >= 1) { |
184 | 242932f3 | Kroustouris Stauros | for ( var ii = 0; ii < results[0].address_components.length; ii++) { |
185 | 242932f3 | Kroustouris Stauros | var street_number = route = street = city = state = zipcode = country = formatted_address = ''; |
186 | 242932f3 | Kroustouris Stauros | var types = results[0].address_components[ii].types |
187 | 242932f3 | Kroustouris Stauros | .join(",");
|
188 | 242932f3 | Kroustouris Stauros | if (types == "sublocality,political" |
189 | 242932f3 | Kroustouris Stauros | || types == "locality,political"
|
190 | 242932f3 | Kroustouris Stauros | || types == "neighborhood,political"
|
191 | 242932f3 | Kroustouris Stauros | || types == "political") {
|
192 | 242932f3 | Kroustouris Stauros | addr.city = (city == '' || types == "locality,political") ? results[0].address_components[ii].long_name |
193 | 242932f3 | Kroustouris Stauros | : city; |
194 | 242932f3 | Kroustouris Stauros | } |
195 | 242932f3 | Kroustouris Stauros | if (types == "country,political") { |
196 | 242932f3 | Kroustouris Stauros | addr.country = results[0].address_components[ii].long_name;
|
197 | 242932f3 | Kroustouris Stauros | } |
198 | 242932f3 | Kroustouris Stauros | } |
199 | 242932f3 | Kroustouris Stauros | } |
200 | 242932f3 | Kroustouris Stauros | } |
201 | 242932f3 | Kroustouris Stauros | }); |
202 | 242932f3 | Kroustouris Stauros | } |
203 | 242932f3 | Kroustouris Stauros | |
204 | 242932f3 | Kroustouris Stauros | function codeAddress(address) { |
205 | 242932f3 | Kroustouris Stauros | geocoder.geocode( { 'address': address}, function(results, status) { |
206 | 242932f3 | Kroustouris Stauros | if (status == google.maps.GeocoderStatus.OK) {
|
207 | 242932f3 | Kroustouris Stauros | map.setCenter(results[0].geometry.location);
|
208 | 242932f3 | Kroustouris Stauros | map.fitBounds(results[0].geometry.bounds)
|
209 | 242932f3 | Kroustouris Stauros | } else {
|
210 | 242932f3 | Kroustouris Stauros | //alert("Geocode was not successful for the following reason: " + status);
|
211 | 242932f3 | Kroustouris Stauros | } |
212 | 242932f3 | Kroustouris Stauros | }); |
213 | 242932f3 | Kroustouris Stauros | } |
214 | 242932f3 | Kroustouris Stauros | |
215 | 242932f3 | Kroustouris Stauros | function HomeControl(controlDiv, map) { |
216 | 242932f3 | Kroustouris Stauros | |
217 | 242932f3 | Kroustouris Stauros | // Set CSS styles for the DIV containing the control
|
218 | 242932f3 | Kroustouris Stauros | // Setting padding to 5 px will offset the control
|
219 | 242932f3 | Kroustouris Stauros | // from the edge of the map.
|
220 | 242932f3 | Kroustouris Stauros | controlDiv.style.padding = '5px';
|
221 | 242932f3 | Kroustouris Stauros | |
222 | 242932f3 | Kroustouris Stauros | // Set CSS for the control border.
|
223 | 242932f3 | Kroustouris Stauros | var controlUI = document.createElement('button'); |
224 | 242932f3 | Kroustouris Stauros | controlUI.className='btn btn-warning roundButton';
|
225 | 242932f3 | Kroustouris Stauros | controlUI.id = "showCityBtn";
|
226 | 242932f3 | Kroustouris Stauros | extraCSS = 'background-image: url(' + cityImg +');background-position: center center; background-repeat: no-repeat;'; |
227 | 242932f3 | Kroustouris Stauros | controlUI.style.cssText='display:none; cursor:pointer; white-space:nowrap; position:absolute; '+extraCSS;
|
228 | 242932f3 | Kroustouris Stauros | controlUI.title = "City View";
|
229 | 242932f3 | Kroustouris Stauros | |
230 | 242932f3 | Kroustouris Stauros | // Set CSS for the control border.
|
231 | 242932f3 | Kroustouris Stauros | var controlUI2 = document.createElement('button'); |
232 | 242932f3 | Kroustouris Stauros | controlUI2.className='btn btn-warning roundButton';
|
233 | 242932f3 | Kroustouris Stauros | controlUI2.id = "showCountryBtn";
|
234 | 242932f3 | Kroustouris Stauros | extraCSS2 = 'background-image: url('+ countryImg + ');background-position: center center; background-repeat: no-repeat;'; |
235 | 242932f3 | Kroustouris Stauros | controlUI2.style.cssText='display:none; cursor:pointer; white-space:nowrap; position:absolute; '+extraCSS2;
|
236 | 242932f3 | Kroustouris Stauros | controlUI2.title = "Country View";
|
237 | 242932f3 | Kroustouris Stauros | |
238 | 242932f3 | Kroustouris Stauros | controlDiv.appendChild(controlUI); |
239 | 242932f3 | Kroustouris Stauros | controlDiv.appendChild(controlUI2); |
240 | 242932f3 | Kroustouris Stauros | |
241 | 242932f3 | Kroustouris Stauros | // Setup the click event listeners: simply set the map to Chicago.
|
242 | 242932f3 | Kroustouris Stauros | google.maps.event.addDomListener(controlUI, 'click', function() { |
243 | 242932f3 | Kroustouris Stauros | codeAddress(addr.city+','+addr.country);
|
244 | 242932f3 | Kroustouris Stauros | }); |
245 | 242932f3 | Kroustouris Stauros | google.maps.event.addDomListener(controlUI2, 'click', function() { |
246 | 242932f3 | Kroustouris Stauros | codeAddress(addr.country); |
247 | 242932f3 | Kroustouris Stauros | }); |
248 | 242932f3 | Kroustouris Stauros | |
249 | 242932f3 | Kroustouris Stauros | } |
250 | 242932f3 | Kroustouris Stauros | |
251 | 242932f3 | Kroustouris Stauros | $(document).ready(function() { |
252 | 242932f3 | Kroustouris Stauros | mapDiv = $('#map_canvas'); |
253 | 242932f3 | Kroustouris Stauros | lat = mapDiv.data('center-lat');
|
254 | 242932f3 | Kroustouris Stauros | lng = mapDiv.data('center-lng');
|
255 | 242932f3 | Kroustouris Stauros | lat = parseFloat(lat.toString().replace(",",".")); |
256 | 242932f3 | Kroustouris Stauros | lng = parseFloat(lng.toString().replace(",",".")); |
257 | 242932f3 | Kroustouris Stauros | latlng = new google.maps.LatLng(lat,lng);
|
258 | 242932f3 | Kroustouris Stauros | group = mapDiv.data('group');
|
259 | 242932f3 | Kroustouris Stauros | pinImg = mapDiv.data('pin');
|
260 | 242932f3 | Kroustouris Stauros | pinsUrl = mapDiv.data('url');
|
261 | 242932f3 | Kroustouris Stauros | cityImg = mapDiv.data('city');
|
262 | 242932f3 | Kroustouris Stauros | countryImg = mapDiv.data('country');
|
263 | 242932f3 | Kroustouris Stauros | styles = [ { |
264 | 242932f3 | Kroustouris Stauros | url : group,
|
265 | 242932f3 | Kroustouris Stauros | height : 54, |
266 | 242932f3 | Kroustouris Stauros | width : 63, |
267 | 242932f3 | Kroustouris Stauros | textColor : '#ffffff', |
268 | 242932f3 | Kroustouris Stauros | textSize : 11 |
269 | 242932f3 | Kroustouris Stauros | }, { |
270 | 242932f3 | Kroustouris Stauros | url : group,
|
271 | 242932f3 | Kroustouris Stauros | height : 54, |
272 | 242932f3 | Kroustouris Stauros | width : 63, |
273 | 242932f3 | Kroustouris Stauros | textColor : '#ffffff', |
274 | 242932f3 | Kroustouris Stauros | textSize : 11 |
275 | 242932f3 | Kroustouris Stauros | }, { |
276 | 242932f3 | Kroustouris Stauros | url : group,
|
277 | 242932f3 | Kroustouris Stauros | height : 54, |
278 | 242932f3 | Kroustouris Stauros | width : 63, |
279 | 242932f3 | Kroustouris Stauros | textColor : '#ffffff', |
280 | 242932f3 | Kroustouris Stauros | textSize : 11 |
281 | 242932f3 | Kroustouris Stauros | } ]; |
282 | 242932f3 | Kroustouris Stauros | initialize(); |
283 | 242932f3 | Kroustouris Stauros | marks = placeMarkers(); |
284 | 242932f3 | Kroustouris Stauros | clusterMarkers(marks); |
285 | 242932f3 | Kroustouris Stauros | }); |