Interested in a map of Russia, embedded in a web-page, with clickable regions, with adjustable hovers on regions, not flash. Desirable non-obfuscated JS code.

Popular such a paid map http://fla-shop.com.ru/products/html5/ru-locator-map/ . There is such a free http://evrohimservis.ru/map/ - apparently the pirated version of the first map.

Are there similar free, non-stolen JS plugins?

Closed due to the fact that off-topic participants Aleksey Shimansky , br3t ,, sanmai , Sasha Omelchenko 11 Sep '17 at 8:19 .

  • Most likely, this question does not correspond to the subject of Stack Overflow in Russian, according to the rules described in the certificate .
If the question can be reformulated according to the rules set out in the certificate , edit it .

  • one
    OpenStreetMaps + Leflet not? - Dmitriy Simushev
  • @Dmitriy Simushev In general, yes, there is something similar to what you need: leafletjs.com/examples/choropleth.html . But geometry must somehow be taken from here geojson.org . It’s cheaper to buy the first map - it’s definitely going to debriefing and day 2 integration) Thank you. - Goncharov Alexander
  • Do a search on the Internet - github.com/neveldo/jQuery-Mapael In the above case, no plug-in other than RaphaelJS is needed for the output of the SVG map. Data is publicly available, so somehow ... - Daniel Protopopov
  • five
    This question should be closed, because the search for resources is offtopic. - αλΡχολυτ

2 answers 2

Yandex also has it, for sure there is free https://tech.yandex.ru/maps/jsbox/2.1/regions

var REGIONS_DATA = { region: { title: 'Π Π΅Π³ΠΈΠΎΠ½', items: [{ id: '001', title: 'Π‘Ρ‚Ρ€Π°Π½Ρ‹ ΠΌΠΈΡ€Π°' }, { id: 'BY', title: 'Π‘Π΅Π»Π°Ρ€ΡƒΡΡŒ' }, { id: 'KZ', title: 'ΠšΠ°Π·Π°Ρ…ΡΡ‚Π°Π½' }, { id: 'RU', title: 'Россия' }, { id: 'TR', title: 'Вурция' }, { id: 'UA', title: 'Π£ΠΊΡ€Π°ΠΈΠ½Π°' }] }, lang: { title: 'Π―Π·Ρ‹ΠΊ', items: [{ id: 'en', title: 'Английский' }, { id: 'be', title: 'БСлорусский' }, { id: 'kk', title: 'ΠšΠ°Π·Π°Ρ…ΡΠΊΠΈΠΉ' }, { id: 'ru', title: 'Русский' }, { id: 'tr', title: 'Π’ΡƒΡ€Π΅Ρ†ΠΊΠΈΠΉ' }, { id: 'uk', title: 'Украинский' }] }, quality: { title: 'Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†', items: [{ id: '0', title: '0' }, { id: '1', title: '1' }, { id: '2', title: '2' }, { id: '3', title: '3' }] } }, // Π¨Π°Π±Π»ΠΎΠ½ html-содСрТимого ΠΌΠ°ΠΊΠ΅Ρ‚Π°. optionsTemplate = [ '<div style="line-height: 34px; background-color: #80808080;" id="regions-params">', '{% for paramName, param in data.params %}', '{% for key, value in state.values %}', '{% if key == paramName %}', '<div class="btn-group btn-group-xs">', '<button{% if state.enabled %}{% else %} disabled{% endif %} type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">', '<span>{{ param.title }}</span>', '<span class="value">: {{ value }}</span>', '&nbsp;<span class="caret"></span>', '</button>', '<ul class="dropdown-menu {{ paramName }}">', '{% for item in param.items %}', '<li{% if item.id == value %} class="active"{% endif %}>', '<a href="#" data-param="{{ paramName }}" data-id="{{ item.id }}">', '{{ item.title }}', '</a>', '</li>', '{% endfor %}', '</ul>', '</div>&nbsp;', '{% endif %}', '{% endfor %}', '{% endfor %}', '</div>' ].join(''); ymaps.ready(init); function init() { // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ собствСнный ΠΌΠ°ΠΊΠ΅Ρ‚ RegionControl. var RegionControlLayout = ymaps.templateLayoutFactory.createClass(optionsTemplate, { build: function () { RegionControlLayout.superclass.build.call(this); this.handleClick = ymaps.util.bind(this.handleClick, this); $(this.getParentElement) .on('click', 'a', this.handleClick); }, clear: function () { $(this.getParentElement) .off('click', 'a', this.handleClick); RegionControlLayout.superclass.clear.call(this); }, handleClick: function (e) { e.preventDefault(); var $target = $(e.currentTarget); var state = this.getData().state; var newValues = ymaps.util.extend({}, state.get('values')); if (!$target.hasClass('active')) { newValues[$target.data('param')] = $target.data('id'); state.set('values', newValues); } } }), // НаслСдуСм класс нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° ΠΎΡ‚ ymaps.control.Button. RegionControl = ymaps.util.defineClass(function (parameters) { RegionControl.superclass.constructor.call(this, parameters); this.regions = new ymaps.GeoObjectCollection(); }, ymaps.control.Button, /** @lends ymaps.control.Button */{ onAddToMap: function (map) { RegionControl.superclass.onAddToMap.call(this, map); map.geoObjects.add(this.regions); this.setupStateMonitor(); this.loadRegions(this.state.get('values')); }, onRemoveFromMap: function (map) { map.geoObjects.remove(this.regions); this.clearStateMonitor(); RegionControl.superclass.onRemoveFromMap.call(this, map); }, setupStateMonitor: function () { this.stateMonitor = new ymaps.Monitor(this.state); this.stateMonitor.add('values', this.handleStateChange, this); }, clearStateMonitor: function () { this.stateMonitor.removeAll(); }, handleStateChange: function (params) { this.loadRegions(params); }, handleRegionsLoaded: function (res) { this.regions .removeAll() .add(res.geoObjects); this.getMap().setBounds( this.regions.getBounds(), {checkZoomRange: true} ); }, loadRegions: function (params) { this.disable(); return ymaps.regions.load(params.region, params) .then(this.handleRegionsLoaded, this) .always(this.enable, this); } }), map = new ymaps.Map('map', { center: [50, 30], zoom: 3, controls: ['typeSelector'] }, { typeSelectorSize: 'small' }), // Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ экзСмпляр RegionControl. regionControl = new RegionControl({ state: { enabled: true, values: { region: 'RU', lang: 'ru', quality: '1' } }, data: { params: REGIONS_DATA }, options: { layout: RegionControlLayout }, float: 'left', maxWidth: [300] }); // Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° ΠΊΠ°Ρ€Ρ‚Ρƒ. map.controls.add(regionControl); // Π£Π·Π½Π°Π²Π°Ρ‚ΡŒ ΠΎ измСнСниях ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² RegionControl ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. regionControl.events.add('statechange', function (e) { console.log(e.get('target').get('values')); }); } 
 <!DOCTYPE html> <html> <head> <title>ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. Π Π΅Π³ΠΈΠΎΠ½Ρ‹</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <script src="https://api-maps.yandex.ru/2.1-dev/?lang=ru_RU" type="text/javascript"></script> <link rel="stylesheet" href="https://yastatic.net/bootstrap/3.3.4/css/bootstrap.min.css"/> <script src="https://yastatic.net/jquery/2.2.3/jquery.min.js"></script> <script src="https://yastatic.net/bootstrap/3.3.4/js/bootstrap.min.js"></script> <script src="regions.js" type="text/javascript"></script> <style> html, body, #map { width: 100%; height: 100%; padding: 0; margin: 0; } </style> </head><body> <div id="map"> </div> </body></html> 

Well, yes, you are not obliged to check whether it is a stolen card. And do not check it in any way. You can specify a link to the source where they downloaded and where it was written that it is free. Also go to correct the source and obfuscation.

  • Although the link can find the answer to the question, it is better to point out the most important thing here, and give the link as a source. If the page to which the link leads will be changed, the response link may become invalid. - From the queue of checks - aleksandr barakin
  • @ alexander-barakin Thank you for your comment. The first time I wrote the answer and I still don’t really know exactly how to respond, I introduced an amendment with a working example. - Alexey Abramov
  • By the way, Yandex has a good map because it updates it, a good and powerful API for working with it. - Abramov Alexey

And what this map does not suit you http://evrohimservis.ru/map/ ? Take and use

  • And what about the license? - andreymal
  • I wrote in the question - this is a copy-paste of the first card. - Goncharov Alexander
  • And who will ask you for a license?) And in general, I changed something and this is another card and it's purple that it looks exactly the same) - alex87.ru