1/** 2 * ÐниÑиализаÑÐ¸Ñ ÐºÐ°ÑÑÑ (ÑоÑка Ð²Ñ Ð¾Ð´Ð°) 3 */ 4function initMapMushroomGisEspar() { 5 6 // СоздаÑÑ Ð¾Ð±ÑÐµÐºÑ ÐºÐ°ÑÑÑ GooglMaps 7 var map = new google.maps.Map(document.getElementById('map'), { 8 center: {lat: 55.7522200, lng: 37.6155600}, 9 zoom: 9, 10 mapTypeId: google.maps.MapTypeId.TERRAIN, 11 gestureHandling: 'greedy' 12 }); 13 14 // СоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð´Ð»Ñ ÑабоÑÑ Ñ ÐºÐ°ÑÑами (ÐиблиоÑека Mushroom Gis) 15 var mapWrapper = mushroom.gis.MapWrapperFactory.googleMaps(map, { 16 17 /** 18 * СобÑÑие: ÐниÑиализаÑÐ¸Ñ Ð²ÑаппеÑа 19 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 20 */ 21 onInit: function(mapWrapper) { 22 23 // ÐбÑÐµÐºÑ Ð°ÐºÑивного (оÑкÑÑÑого) маÑкеÑа 24 mapWrapper.param('currentOpenedItem', null); 25 // Ð¦Ð²ÐµÑ Ð²ÑбÑанного маÑкеÑа 26 mapWrapper.param('markerColorSelected', '00ff00'); 27 // Режим вÑбоÑа маÑкеÑов 28 mapWrapper.param('selectMode', 0); 29 // ÐбÑÐµÐºÑ Ð²ÑплÑваÑÑего окна (Ð´Ð»Ñ Ð¼Ð°ÑкеÑов) 30 mapWrapper.param('infoWindow', new google.maps.InfoWindow()); 31 32 mapWrapper.param('infoWindow').addListener('closeclick', function () { 33 var currentOpenedItem = mapWrapper.param('currentOpenedItem'); 34 mapWrapper.trigger('onBalloonClose', currentOpenedItem); 35 }); 36 37 // ÐÑи ÑобÑÑии ÑÐ¼ÐµÐ½Ñ Ñежима менÑÑÑ Ð¿Ð°ÑамеÑÑ Ñежима 38 $('#select-mode').off('change').on('change', function(e) { 39 mapWrapper.param('selectMode', $(this).is(':checked') ? 1 : 0); 40 }); 41 42 // ÐолÑÑиÑÑ ÑÑаÑÑÑ Ð¼Ð°ÑкеÑа 43 mapWrapper.getMarkerState = function(data) { 44 // ÐаÑÐºÐµÑ Ð¾ÑкÑÑÑ? 45 if(data.opened) { 46 return 2; 47 } 48 // УказаÑÐµÐ»Ñ Ð¼ÑÑи наведен на маÑкеÑ? 49 if(!(data.selected || data.hover)) { 50 return 0; 51 } 52 // ÐаÑÐºÐµÑ Ð²Ñделен 53 return 1; 54 }; 55 56 // ÐозвÑаÑÐ°ÐµÑ URL иконки по color и state 57 mapWrapper.getIconUrl = function(color, state) { 58 return '/map/draw/marker?hexCode=' + color + '&showMode=' + state; 59 }; 60 61 // ÐÑÑиÑование иконки 62 mapWrapper.cacheIcon = function(color, state) { 63 $img = new Image(); 64 $img.src = mapWrapper.getIconUrl(color, state); 65 }; 66 67 // ÐолÑÑиÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¸ÐºÐ¾Ð½ÐºÐ¸ 68 mapWrapper.getIconParams = function(data, state) { 69 return data.actions.getIconParams(data, state); 70 }; 71 72 // закÑÑиÑÑем Ð¸ÐºÐ¾Ð½ÐºÑ Ð¿Ñи оÑкÑÑÑом попапе 73 mapWrapper.cacheIcon('00ff00', 2); 74 }, 75 76 /** 77 * СобÑÑие: ÐоÑле иниÑиализаÑии вÑаппеÑа 78 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 79 */ 80 onInitAfter: function(mapWrapper) { 81 82 // СоздаÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа маÑкеÑов 83 var markersManager = new mushroom.gis.MarkersManager(mapWrapper); 84 85 /** 86 * ÐаÑÑомизиÑÑем дейÑÑÐ²Ð¸Ñ Ð´Ð»Ñ ÑазнÑÑ Ñипов обÑекÑов на каÑÑе 87 */ 88 var typeActionsMap = { 89 /** 90 * ÐбÑÑÐ½Ð°Ñ ÑоÑка на каÑÑе (маÑкеÑ) 91 */ 92 pointBase: { 93 /** 94 * ÐолÑÑение ÑвойÑÑв маÑкеÑа 95 * @param data 96 * @param state 97 * @returns {object} 98 */ 99 getIconParams: function(data, state) { 100 // ÐоÑÑÑпнÑе ÑазмеÑÑ Ð¼Ð°ÑкеÑов 101 var circleSizes = { 102 SMALL: 12, 103 BIG: 20 104 }; 105 var color = (state == 2) ? '00ff00' : data.color; 106 107 // ÐаÑамеÑÑÑ Ð¸ÐºÐ¾Ð½ÐºÐ¸ маÑкеÑа 108 params = { 109 url: mapWrapper.getIconUrl(color, state), 110 origin: new google.maps.Point(1, 1) 111 }; 112 113 // ÐенÑем Ð¸ÐºÐ¾Ð½ÐºÑ Ð² завиÑимоÑÑи Ð¾Ñ ÑÑаÑÑÑа 114 if (state) { 115 params.scaledSize = new google.maps.Size(circleSizes.BIG, circleSizes.BIG); 116 params.anchor = new google.maps.Point(circleSizes.BIG / 2,
116circleSizes.BIG / 2); 117 } else { 118 params.scaledSize = new google.maps.Size(circleSizes.SMALL, circleSizes.SMALL); 119 params.anchor = new google.maps.Point(circleSizes.SMALL / 2, circleSizes.SMALL / 2); 120 } 121 122 return params; 123 }, 124 /** 125 * ÐолÑÑение даннÑÑ Ð¾Ð±ÐµÑÑки над маÑкеÑом 126 * @param mapWrapper 127 * @param data 128 * @returns {{icon: *}} 129 */ 130 getMarkerData: function(mapWrapper, data) { 131 return { 132 icon: mapWrapper.getIconParams(data, 0) 133 }; 134 }, 135 /** 136 * СобÑÑие: СÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ñи Ñмене ÑоÑÑоÑÐ½Ð¸Ñ 137 * @param mapWrapper 138 * @param markerWrapper 139 */ 140 onMarkerStateUpdate: function(mapWrapper, markerWrapper) { 141 markerWrapper.marker.setIcon(mapWrapper.getIconParams(markerWrapper.data, markerWrapper.state)); 142 }, 143 /** 144 * СобÑÑие: СÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ð¾Ñле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°ÑкеÑа 145 * @param mapWrapper 146 * @param markerWrapper 147 */ 148 onMarkerCreateAfter: function(mapWrapper, markerWrapper) { 149 mapWrapper.cacheIcon(markerWrapper.data.color, 1); 150 }, 151 /** 152 * ÐолÑÑение ÑодеÑжимого баллÑна 153 * @param markerWrapper 154 * @returns {string} 155 */ 156 getBalloonContent: function(markerWrapper) { 157 return '<div class="infowindow">' + 158 '<h5>' + markerWrapper.data.name + '</h5>' + 159 '<p>СодеÑжимое инÑоÑмаÑионного окна Ð´Ð»Ñ Ð¾Ð±ÑÑной иконки</p>' + 160 '<p>Lat: '+markerWrapper.data.lat+'</p>' + 161 '<p>Lng: '+markerWrapper.data.lng+'</p>' + 162 '</div>'; 163 } 164 }, 165 /** 166 * ÐаÑÑомизиÑованнÑй маÑÐºÐµÑ (Ð¸Ð¼ÐµÐµÑ ÐºÐ°ÑÑинкÑ, не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñделен) 167 */ 168 pointCustom: { 169 /** 170 * ÐолÑÑение ÑвойÑÑв маÑкеÑа 171 * @param data 172 * @param state 173 * @returns {object} 174 */ 175 getIconParams: function(data, state) {}, 176 /** 177 * ÐолÑÑение даннÑÑ Ð¾Ð±ÐµÑÑки над маÑкеÑом 178 * @param mapWrapper 179 * @param data 180 * @returns {{icon: *}} 181 */ 182 getMarkerData: function(mapWrapper, data) { 183 return {}; 184 }, 185 /** 186 * СобÑÑие: СÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ñи Ñмене ÑоÑÑоÑÐ½Ð¸Ñ 187 * @param mapWrapper 188 * @param markerWrapper 189 */ 190 onMarkerStateUpdate: function(mapWrapper, markerWrapper) {}, 191 /** 192 * СобÑÑие: СÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ð¾Ñле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°ÑкеÑа 193 * @param mapWrapper 194 * @param markerWrapper 195 */ 196 onMarkerCreateAfter: function(mapWrapper, markerWrapper) { 197 var data = markerWrapper.data; 198 var image = new Image(); 199 image.src = data.icon; 200 image.onload = function() { 201 markerWrapper.marker.setIcon({ 202 url: data.icon, 203 anchor: new google.maps.Point(image.width/2, image.height/2), 204 scaledSize: new google.maps.Size(image.width, image.height) 205 }); 206 }; 207 }, 208 /** 209 * ÐолÑÑение ÑодеÑжимого баллÑна 210 * @param markerWrapper 211 * @returns {string} 212 */ 213 getBalloonContent: function(markerWrapper) { 214 return '<div class="infowindow">' + 215 '<h5>' + markerWrapper.data.name + '</h5>' + 216 '<p>СодеÑжимое инÑоÑмаÑионного окна Ð´Ð»Ñ ÐºÐ°ÑÑомизиÑованной иконки</p>' + 217 '</div>'; 218 } 219 } 220 }; 221 222 // СоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð°Ð½Ð½Ñми (пÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð´Ð°Ð½Ð½ÑÑ ) 223 var dataProvider = new mushroom.gis.MarkersDataProvider( 224 markersManager, 225 // ÐÑÑмое пÑеобÑазование 226 function(item, extraData) { 227 var type; 228 229 if(item.icon) { 230 type = 'pointCustom'; 231 } else { 232 type = 'pointBase'; 233 } 234 235 item.actions = extraData[type]; 236 return item; 237 }, 238 // ÐбÑаÑное пÑеобÑазование 239 function(item, extraData) { 240 delete item.actions; 241 return item; 242 }, 243 typeActionsMap 244 ); 245 246 /** 247 * ÐÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки 248 */ 249 markersManager.examples = new mushroom.gis.ExamplesFactory(markersManager, dataProvider); 250 251 // ÐенеÑиÑоваÑÑ Ð´ÐµÐ¼Ð¾-маÑкеÑÑ 252 //markersManager.examples.addNewMarkers(); 253 //markersManager.examples.addNewMarkersWithCustomIcon(); 254 //markersManager.examples.addOverlay(1); 255 256 // СокÑаÑение Ð´Ð»Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа маÑкеÑов 257 // Ðожно пÑобоваÑÑ Ð² конÑоли ÑеÑÑовÑе пÑимеÑÑ, иÑполÑзÑÑ Ð²Ñзов: 258 // $.mm.examples.repaintListInSegmentLatLng() 259 // или лÑбой дÑÑгой ÑÑнкÑии из обÑекÑа $.mm.examples 260 $.mm = markersManager; 261 262 /** 263 * ÐÑÐ¾Ð²Ð°Ð¹Ð´ÐµÑ Ð´Ð°Ð½Ð½ÑÑ 264 * @type {mushroom.gis.MarkersDataProvider|mushroom.gis.MarkersDataProvider} 265 */ 266 $.pr = dataProvider; 267 }, 268 269 /** 270 * СобÑÑие: ÐоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°ÑкеÑа 271 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 272 * @param {object} markerWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа маÑкеÑа 273 */ 274 onMarkerCreateAfter: function(mapWrapper, markerWrapper) { 275 markerWrapper.data.actions.onMarkerCreateAfter(mapWrapper, markerWrapper); 276 }, 277 278 /** 279 * СобÑÑие: ÐолÑÑение даннÑÑ Ð¼Ð°ÑкеÑа 280 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 281 * @param {object} data - ÐаннÑе маÑкеÑа 282 */ 283 getMarkerData: function(mapWrapper, data) { 284 return data.actions.getMarkerData(mapWrapper, data); 285 }, 286 287 /** 288 * СобÑÑие: Ðаведение ÑказаÑÐµÐ»Ñ Ð¼ÑÑи на маÑÐºÐµÑ 289 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 290 * @param {object} markerWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа маÑкеÑа 291 */ 292 onMarkerHoverOn: function(mapWrapper, markerWrapper) { 293 markerWrapper.data.hover = true; 294 }, 295 296 /** 297 * СобÑÑие: ÐÑведение ÑказаÑÐµÐ»Ñ Ð¼ÑÑи Ð¾Ñ Ð¼Ð°ÑкеÑа 298 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 299 * @param {object} markerWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа маÑкеÑа 300 */ 301 onMarkerHoverOff: function(mapWrapper, markerWrapper) { 302 markerWrapper.data.hover = false;
303 }, 304 305 /** 306 * СобÑÑие: Ðбновление ÑÑаÑÑÑа маÑкеÑа 307 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 308 * @param {object} markerWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа маÑкеÑа 309 */ 310 onMarkerStateUpdate: function(mapWrapper, markerWrapper) { 311 // ÐолÑÑиÑÑ ÑÑаÑÑÑ Ð¼Ð°ÑкеÑа 312 markerWrapper.state = mapWrapper.getMarkerState(markerWrapper.data); 313 // УÑÑановиÑÑ z-index CSS ÑвойÑÑво Ð´Ð»Ñ Ð¼Ð°ÑкеÑа 314 markerWrapper.marker.setZIndex(markerWrapper.state); 315 // УÑÑановаÑÑ Ð¸ÐºÐ¾Ð½ÐºÑ Ð´Ð»Ñ Ð¼Ð°ÑкеÑа 316 markerWrapper.data.actions.onMarkerStateUpdate(mapWrapper, markerWrapper); 317 }, 318 319 /** 320 * СобÑÑие: Ðлик по маÑкеÑÑ 321 * @param {object} mapWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа каÑÑÑ 322 * @param {object} markerWrapper - ÐбÑÐµÐºÑ Ð²ÑаппеÑа маÑкеÑа 323 */ 324 onMarkerClick: function(mapWrapper, markerWrapper) { 325 326 // ÐÑли Ð½Ð°Ñ Ð¾Ð´Ð¸Ð¼ÑÑ Ð² Ñежиме вÑбоÑа 327 if(mapWrapper.param('selectMode')) { 328 if (markerWrapper.data.unselectable) { 329 return false; 330 } 331 332 markerWrapper.data.selected = !markerWrapper.data.selected; 333 } else { 334 // ÐÑкÑÑÑÑ Ð¿Ð¾Ð¿Ð°Ð¿ 335 mapWrapper.trigger('onBalloonOpen', markerWrapper); 336 mapWrapper.param('infoWindow').open(map, markerWrapper.marker); 337 338 // ÐолÑÑиÑÑ Ð°ÐºÑивнÑй (оÑкÑÑÑÑй) маÑÐºÐµÑ 339 var currentOpenedItem = mapWrapper.param('currentOpenedItem'); 340 if(currentOpenedItem) { 341 currentOpenedItem.edit(function(data, marker) { 342 data.opened = false; 343 }); 344 } 345 markerWrapper.data.opened = true; 346 mapWrapper.param('currentOpenedItem', markerWrapper) 347 } 348 }, 349 350 /** 351 * СобÑÑие: ÐакÑÑÑие балÑна 352 * @param mapWrapper 353 * @param markerWrapper 354 */ 355 onBalloonClose: function(mapWrapper, markerWrapper) { 356 markerWrapper.edit(function (data, marker) { 357 data.opened = false; 358 }); 359 }, 360 361 /** 362 * СобÑÑие: ÐÑкÑÑÑие балÑна 363 * @param mapWrapper 364 * @param markerWrapper 365 */ 366 onBalloonOpen: function (mapWrapper, markerWrapper) { 367 var contentString = markerWrapper.data.actions.getBalloonContent(markerWrapper); 368 mapWrapper.param('infoWindow').setContent(contentString); 369 } 370 }); 371}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.