рдЯреИрдЧ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ 2.x рдХреЗ рддрд╣рдд Yandex.Maps рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ

рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдмрд▓ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ 2.x рдХреЛрд░ рдореИрдк рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдмрд╕ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдм рддрдХ, рдирдХреНрд╢рд╛ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреИрдХрд┐рдВрдЧ (рдкреГрд╖реНрдарднреВрдорд┐-рдЫрд╡рд┐) рдХреЗ рд╕рд╛рде divas рдкрд░ред рдФрд░ рдХреИрдирд╡рд╛рд╕ рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЬрд▓реНрджреА рд╕реЗ рдирдХреНрд╢реЗ рдХрд╛ рдПрдХ рдореБрджреНрд░рдг рдпреЛрдЧреНрдп рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдмрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ 600 рд╕реЗ рдЕрдзрд┐рдХ + рдХреНрд▓рд╕реНрдЯрд░ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рд╣реИред
рдХрдЯ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк

рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ - рд▓рд┐рдВрдХ рд╕реЗ рдЬрд╝реВрдо рдФрд░ рд╕реЗрдВрдЯрд░ рд▓реЗрдВ
ymaps.ready(function () { var mapTypes = ['yandex#map', 'yandex#satellite', 'yandex#hybrid', 'yandex#publicMap', 'yandex#publicMapHybrid'], map = new ymaps.Map($('#map')[0], { center:[ parseFloat(<?= $request_lat?>), parseFloat(<?= $request_lng?>)], zoom:parseInt(<?= $request_zoom?>), type: mapTypes[<?= $request_mtype ? $request_mtype : 0?>] }); 

рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд┐рдВрдЯрд░ рдлреНрд░реЗрдВрдбрд▓реА рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдПрдВ
рдпрд╣рд╛рдБ рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдлреНрд░реЗрдВрдбрд▓реА рдкреНрд░рд┐рдВрдЯрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб-рдЗрдореЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдореЗрдЬ рдХреЗ рд╕рд╛рде рдбрд┐рд╡ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред
рдореЗрд░реЗ рдЯреИрдЧ рдЖрдЗрдХрди рдореЗрдВ 2 рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ - рдПрдХ рдЪрд┐рддреНрд░ рдФрд░ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ред рджреЛрдиреЛрдВ рдкреНрд░реЗрдд рдореЗрдВред рдЗрд╕рд▓рд┐рдП рдРрд╕реА рдЙрдиреНрдорддреНрдд рд╢реИрд▓реАред рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдкрд░ рд▓рд╛рддрд╛ рд╣реВрдВ
  ymaps.layout.storage.add('voina#icon', ymaps.templateLayoutFactory.createClass( '<div style="position: absolute; width: 28px; height: 36px; overflow: hidden;z-index: 0; ">' + '<div style="position:absolute;width:20px;height:20px;overflow:hidden;top:4px;left:4px">' + '<img src="/img/new_buttons_21.png" style="position:absolute;left:$[properties.iconOffset]px;"></div>' + '<img src="/img/buttons7.gif" style="position: absolute; left: -264px; top: -70px; "></div>' )); 

рдХреНрд▓рд╕реНрдЯрд░ рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдмрд╛рддред рдореИрдВ рдЕрдВрджрд░ рд╡рд┐рднрд┐рдиреНрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рдЖрдЗрдХрдиреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдерд╛ - рдореБрдЭреЗ рдЬрд▓реНрджреА рдХрд░рдирд╛ рдкрдбрд╝рд╛)
  ymaps.layout.storage.add('voina#cluster', ymaps.templateLayoutFactory.createClass( '<div style="position: absolute; margin: -26px 0 0 -26px; width: 58px; height: 58px; overflow: hidden;z-index: 0; ">' + '<div style="z-index:800;position: absolute; width: 58px; height: 58px; text-align: center; font-size: 13px; line-height: 58px;">$[properties.geoObjects.length]</div>' + '<img src="/img/cluster_big.png" style="position: absolute;"></div>')); 

рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдкрд░рдд рдХреЗ рдХрдВрдЯреЗрдирд░ рдорд┐рд▓рддреЗ рд╣реИрдВ
  var $container = map.panes.get('layers').getElement(), 

рдЪреВрдВрдХрд┐ рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ рдореЗрдВ рдХрд╛рд░реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдЕрд▓рдЧ рд╣реИрдВ, рд╣рдо рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдб рдХрд╛ рдХреЗрдВрджреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ
  stMapTypes = {'yandex#map' : 'map', 'yandex#satellite' : 'sat', 'yandex#hybrid' : 'sat,ski', 'yandex#publicMap' : 'pmap'}, center = map.getCenter(), 

рдЖрдХрд╛рд░ рдПрдХ рдШрд╛рдд рд╣реИред рд╕реНрдереИрддрд┐рдХ рдЕрдзрд┐рдХрддрдо 650 рд╕реЗ 450 рджреЗрддрд╛ рд╣реИред рдореИрдВрдиреЗ рднреА рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ - рдЗрд╕реЗ рдЕрдзрд┐рдХрддрдо рд╣реЛрдиреЗ рджреЗрдВ
рдирдХреНрд╢реЗ рдХреЗ рд╕рд╛рде рдПрдХ div рдХреЛ рднреА рдЗрди рдЖрдХрд╛рд░реЛрдВ рд╕реЗ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рдпрджрд┐ рдЖрдк рдПрдХ рдмрдбрд╝реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ div рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд░рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  size = [650, 450], 

рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рд▓рд┐рдВрдХ
  mapUrl = 'http://static-maps.yandex.ru/1.x/?ll='+center[1]+','+center[0]+ '&z='+map.getZoom()+'&l='+stMapTypes[map.getType()]+ '&size='+size[0]+','+size[1]; 

рдпрд╣рд╛рдБ рдЬрд╛рджреВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ div рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдмреАрдЪ рдореЗрдВ рд░рдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд▓рдХ рдХреЛ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ map.panes.get ('рд▓реЗрдпрд░реНрд╕') рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред getViewport () рдФрд░ рдХреЗрдВрджреНрд░ рдкрдврд╝реЗрдВред рд▓реЗрдХрд┐рди рдЬрдм рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдлрд▓рдХ рдмреАрдЪ рдореЗрдВ рд╣реИ, рдФрд░ рд╣рдордиреЗ рдирдХреНрд╢рд╛ рдирд╣реАрдВ рдЪрд▓рдиреЗ рджрд┐рдпрд╛
  $('<div></div>').css({ position: 'absolute', left: -Math.round(size[0] / 2)+'px', top: -Math.round(size[1] / 2)+'px', zIndex: 800}). 

рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде img рдХреЗ рдЕрдВрджрд░ рдбрд╛рд▓реЗрдВ
  wrapInner($('<img>').attr({'src':mapUrl, width: size[0], height: size[1], border: '0'})). 

рдФрд░ рд╢реЗрд╖ рддрддреНрд╡реЛрдВ рдХреЗ рдКрдкрд░ рдкрд░рдд рдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдбрд╛рд▓реЗрдВ
  prependTo($container); 

рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ - рд╕рднреА рдорд╛рдирдЪрд┐рддреНрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрддреА рд╣реИред рдЕрдм рди рддреЛ рдЪрд▓реЗрдВ рдФрд░ рди рд╣реА рд╕реЛрдЪреЗрдВ
  map.events.removeAll(); 

рдпрд╣рд╛рдБ рдореИрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдБред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЪрд░ window.data рдореЗрдВ рджрд┐рдпрд╛ рд╣реИ
  var len = window.data.length; if (len) { for (var i = 0, markers = [ ], properties, latLng; i < len; i++) { latLng = [parseFloat(window.data[i][1]), parseFloat(window.data[i][2])]; markers.push( new ymaps.Placemark(latLng, { iconOffset: -window.data[i][5] * 20 - 1 }, { iconLayout:'voina#icon', iconOffset: [1, 2], openBalloonOnClick: false })); } 

рдЕрдм рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ред рдорд╛рд░реНрдЬрд┐рди рдХреНрдпрд╛ рд╣реИ - рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирдХреНрд╢реЗ рдкрд░ рдерд╛
  var clusterer = new ymaps.Clusterer({margin: [20]}); 

рдХреНрд▓рд╕реНрдЯрд░ рдЖрдЗрдХрди рдХреЗ рд▓рд┐рдП рд▓реЗрдЖрдЙрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ
  clusterer.options.set('clusterIconLayout', 'voina#cluster'); 

рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдореВрд╣реЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛ рдерд╛
  clusterer.createCluster = function (center, geoObjects) { var cluster = ymaps.Clusterer.prototype.createCluster.call(this, center, geoObjects); //          cluster.events.add('click', function(e) { e.stopImmediatePropagation(); e.preventDefault(); return false; }); return cluster; }; 

рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝реЗрдВ
  clusterer.add(markers); 

рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд▓рд╕реНрдЯрд░ рднреА рдбреВрдм рдЧрдпрд╛ рд╣реИ
  clusterer.events.removeAll(); 

рдХрд╛рд░реНрдб рдореЗрдВ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдЬреЛрдбрд╝реЗрдВ
  map.geoObjects.add(clusterer); } }); 


рдЯрд╛рдбрд╛ !!! рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдбреЛрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)
рдХреЗрд╡рд▓ рдПрдХ рдмрдЧ - рджреЛ рдХреЙрдкреАрд░рд╛рдЗрдЯред рдХрд╛рд░реНрдб рд╕реЗ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЫрд┐рдкрдиреЗ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдХреЗ рд▓рд┐рдП рдФрд░ рдареАрдХ рд╣реИред



рдЖрдк рдпрд╣рд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

Source: https://habr.com/ru/post/In150061/


All Articles