Pull to refresh

Яндекс-карта федеральных округов

Стоит задача сделать карту с федеральными округами РФ на картах яндекса. В данной статье я не стараюсь открыть Америку, но думаю этот материал поможет вам сэкономить время на создание подобной карты.

В этом деле нам поможет документация и песочница для экспериментов. За основу берем этот пример. tech.yandex.ru/maps/jsbox/2.1/regions

//В консоль выводим все названия регионов и их osmId
lastCollection.each(function (reg) {
	console.log(reg.properties.get('name') + ' -> ' + reg.properties.get('osmId'));
});


Разбросал регионы по федеральным округам:

Центральный федеральный округ
Белгородская область -> 83184
Брянская область -> 81997
Владимирская область -> 72197
Воронежская область -> 72181
Ивановская область -> 85617
Калужская область -> 81995
Костромская область -> 85963
Курская область -> 72223
Липецкая область -> 72169
Московская область -> 51490
Орловская область -> 72224
Рязанская область -> 71950
Смоленская область -> 81996
Тамбовская область -> 72180
Тверская область -> 2095259
Тульская область -> 81993
Ярославская область -> 81994
Москва -> 102269


Южный федеральный округ
Адыгея -> 253256
Республика Калмыкия -> 108083
Краснодарский край -> 108082
Астраханская область -> 112819
Волгоградская область -> 77665
Ростовская область -> 85606


Северо-Западный федеральный округ
Республика Карелия -> 393980
Республика Коми -> 115136
Архангельская область -> 140337
Вологодская область -> 115106
Калининградская область -> 103906
Ленинградская область -> 176095
Мурманская область -> 2099216
Новгородская область -> 89331
Псковская область -> 155262
Санкт-Петербург -> 337422
Ненецкий автономный округ -> 274048


Дальневосточный федеральный округ
Республика Саха -> 151234
Камчатский край -> 151233
Приморский край -> 151225
Хабаровский край -> 151223
Амурская область -> 147166
Магаданская область -> 151228
Сахалинская область -> 394235
Еврейская автономная область -> 147167
Чукотский автономный округ -> 151231


Сибирский федеральный округ
Алтай -> 145194
Бурятия -> 145729
Тыва -> 145195
Республика Хакасия -> 190911
Алтайский край -> 144764
Забайкальский край -> 145730
Красноярский край -> 190090
Иркутская область -> 145454
Кемеровская область -> 144763
Новосибирская область -> 140294
Омская область -> 140292
Томская область -> 140295


Уральский федеральный округ
Курганская область -> 140290
Свердловская область -> 79379
Тюменская область -> 140291
Челябинская область -> 77687
Ханты-Мансийский автономный округ — Югра -> 140296
Ямало-Ненецкий автономный округ -> 191706


Приволжский федеральный округ
Башкортостан -> 77677
Марий Эл -> 115114
Республика Мордовия -> 72196
Татарстан -> 79374
Удмуртская республика -> 115134
Чувашия -> 80513
Кировская область -> 115100
Нижегородская область -> 72195
Оренбургская область -> 77669
Пензенская область -> 72182
Ульяновская область -> 72192
Самарская область -> 72194
Саратовская область -> 72193
Пермский край -> 115135


Северо-Кавказский федеральный округ
Дагестан -> 109876
Ингушетия -> 253252
Кабардино-Балкарская республика -> 109879
Карачаево-Черкесская республика -> 109878
Северная Осетия — Алания -> 110032
Чеченская республика -> 109877
Ставропольский край -> 108081


Далее надо окрасить регионы
        lastCollection.each(function (reg) {

            switch (reg.properties.get('osmId')) {
                /* begin Северо-Кавказский федеральный округ*/
                case '108081':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                case '109877':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
               // и так далее – полный код в конце статьи.
                /* end Северо-Кавказский федеральный округ*/
            }
        });


При клике на регион ничего необычного делать не будем – просто этот регион будет подсвечиваться.
        lastCollection.events.add('click', function (event) {
            //var region = event.get('target');
            //console.log(region.properties.get('name') + ' -> ' + region.properties.get('osmId'));

            var target = event.get('target');
            if (lastActiveRegion) {
                lastActiveRegion.options.set('preset', '')
            }
            lastActiveRegion = target;
            lastActiveRegion.options.set('preset', {
                strokeWidth: 3,
                fillColor: 'F99',
                strokeColor: '9f9'
            });
        });


Прописываем все регионы и метки для федеральных округов.
api.yandex.ru/maps/doc/jsapi/2.x/dg/concepts/geoobjects.xml Объекты на карте.

        var myPlacemark = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [44.128040, 44.736990]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Северо-Кавказский федеральный округ",
                balloonContentHeader: "Северо-Кавказский федеральный округ",
                balloonContentBody: "Россия"
            }
        });
        var myPlacemark2 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [55.424665, 38.240499]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Центральный федеральный округ",
                balloonContentHeader: "Центральный федеральный округ",
                balloonContentBody: "Россия"
            }
        });
// и так далее – полный код в конце статьи.


И в завершении прописываем:
geoMap.geoObjects.add(myPlacemark);
geoMap.geoObjects.add(myPlacemark1);
//и тд.


Итоговый код
html
<!DOCTYPE html>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Яндекс карта федеральных округов.</title>
    <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    <script src="map.js" type="text/javascript"></script>
    <style>
        body, html {
            padding: 0;
            margin: 0;
            width: 100%;
            height: 100%;
        }

        #map {
            width: 100%;
            height: 90%;
        }
    </style>
</head>

<body>

<div id="map"></div>

</body>

</html>



map.js
ymaps.ready(function () {

    geoMap = new ymaps.Map('map', {
        center: [60, 90],
        type: "yandex#map",
        zoom: 3
    });
    geoMap.controls.add('zoomControl');

    var lastCollection = 0,
        lastActiveRegion = 0;

    var lng = 'ru',
        contr = 'RU',
        level = '0';
    if (lastCollection) {
        geoMap.geoObjects.remove(lastCollection);
    }
    ymaps.regions.load(contr, {
        lang: lng,
        quality: level
    }).then(function (result) {
        lastCollection = result.geoObjects;

        lastCollection.each(function (reg) {

            switch (reg.properties.get('osmId')) {
                /* begin Северо-Кавказский федеральный округ*/
                case '108081':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                case '109877':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                case '110032':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                case '109878':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                case '109879':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                case '253252':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                case '109876':
                {
                    reg.options.set('fillColor', '#ff001a');
                    break;
                }
                /* end Северо-Кавказский федеральный округ*/

                /* begin Приволжский федеральный округ*/
                case '109876':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '77677':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '115114':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '72196':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '79374':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '115134':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '80513':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '115100':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '72195':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '77669':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '72182':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '72192':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '72194':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '72193':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                case '115135':
                {
                    reg.options.set('fillColor', '#52ac62');
                    break;
                }
                /* end Приволжский федеральный округ*/

                /* begin Уральский федеральный округ*/
                case '140290':
                {
                    reg.options.set('fillColor', '#ffff00');
                    break;
                }
                case '79379':
                {
                    reg.options.set('fillColor', '#ffff00');
                    break;
                }
                case '140291':
                {
                    reg.options.set('fillColor', '#ffff00');
                    break;
                }
                case '77687':
                {
                    reg.options.set('fillColor', '#ffff00');
                    break;
                }
                case '140296':
                {
                    reg.options.set('fillColor', '#ffff00');
                    break;
                }
                case '191706':
                {
                    reg.options.set('fillColor', '#ffff00');
                    break;
                }
                /* end Уральский федеральный округ*/

                /* begin Сибирский федеральный округ*/
                case '145194':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '145729':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '145195':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '190911':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '144764':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '145730':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '190090':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '145454':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '144763':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '140294':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '140292':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                case '140295':
                {
                    reg.options.set('fillColor', '#0000ff');
                    break;
                }
                /* end Сибирский федеральный округ*/

                /* begin Дальневосточный федеральный округ*/
                case '151234':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '151233':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '151225':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '151223':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '147166':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '151228':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '394235':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '147167':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                case '151231':
                {
                    reg.options.set('fillColor', '#8b00ff');
                    break;
                }
                /* end Дальневосточный федеральный округ*/

                /* begin Северо-Западный федеральный округ*/
                case '393980':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '115136':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '140337':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '115106':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '103906':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '176095':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '2099216':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '89331':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '155262':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '337422':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                case '274048':
                {
                    reg.options.set('fillColor', '#ffa500');
                    break;
                }
                /* end Северо-Западный федеральный округ*/

                /* begin Южный федеральный округ*/
                case '253256':
                {
                    reg.options.set('fillColor', '#ffffff');
                    break;
                }
                case '108083':
                {
                    reg.options.set('fillColor', '#ffffff');
                    break;
                }
                case '108082':
                {
                    reg.options.set('fillColor', '#ffffff');
                    break;
                }
                case '112819':
                {
                    reg.options.set('fillColor', '#ffffff');
                    break;
                }
                case '77665':
                {
                    reg.options.set('fillColor', '#ffffff');
                    break;
                }
                case '85606':
                {
                    reg.options.set('fillColor', '#ffffff');
                    break;
                }
                /* end Южный федеральный округ*/

                /* begin Центральный федеральный округ*/
                case '83184':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '81997':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '72197':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '72181':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '85617':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '81995':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '85963':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '72223':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '72169':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '51490':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '72224':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '71950':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '81996':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '72180':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '2095259':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '81993':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '81994':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                case '102269':
                {
                    reg.options.set('fillColor', '#7b3f00');
                    break;
                }
                /* end Центральный федеральный округ*/

            }
        });


        lastCollection.options.set({
            zIndex: 1,
            zIndexHover: 1,
            draggable: false
        });


        lastCollection.events.add('click', function (event) {
            //var region = event.get('target');
            //console.log(region.properties.get('name') + ' -> ' + region.properties.get('osmId'));

            var target = event.get('target');
            if (lastActiveRegion) {
                lastActiveRegion.options.set('preset', '')
            }
            lastActiveRegion = target;
            lastActiveRegion.options.set('preset', {
                strokeWidth: 3,
                fillColor: 'F99',
                strokeColor: '9f9'
            });
        });


        var myPlacemark = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [44.128040, 44.736990]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Северо-Кавказский федеральный округ",
                balloonContentHeader: "Северо-Кавказский федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        var myPlacemark1 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [49.041646, 43.254042]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Южный федеральный округ",
                balloonContentHeader: "Южный федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        var myPlacemark2 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [55.424665, 38.240499]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Центральный федеральный округ",
                balloonContentHeader: "Центральный федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        var myPlacemark3 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [56.248661, 51.963736]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Приволжский федеральный округ",
                balloonContentHeader: "Приволжский федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        var myPlacemark4 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [63.335770, 36.146574]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Северо-Западный федеральный округ",
                balloonContentHeader: "Северо-Западный федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        var myPlacemark5 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [61.830704, 64.789900]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Уральский федеральный округ",
                balloonContentHeader: "Уральский федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        var myPlacemark6 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [64.218118, 98.192932]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Сибирский федеральный округ",
                balloonContentHeader: "Сибирский федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        var myPlacemark7 = new ymaps.GeoObject({
            geometry: {
                type: "Point",
                coordinates: [67.127115, 124.131856]
            },
            // Описываем данные геообъекта.
            properties: {
                hintContent: "Дальневосточный федеральный округ",
                balloonContentHeader: "Дальневосточный федеральный округ",
                balloonContentBody: "Россия"
            }
        });

        geoMap.geoObjects.add(myPlacemark);
        geoMap.geoObjects.add(myPlacemark1);
        geoMap.geoObjects.add(myPlacemark2);
        geoMap.geoObjects.add(myPlacemark3);
        geoMap.geoObjects.add(myPlacemark4);
        geoMap.geoObjects.add(myPlacemark5);
        geoMap.geoObjects.add(myPlacemark6);
        geoMap.geoObjects.add(myPlacemark7);
        geoMap.geoObjects.add(lastCollection);


    }, function () {
        //alert('no response');
    });

});


П.С. Эту карту делал, когда такого нюанса как Крым еще не было, так что с ним разбирайтесь сами в зависимости от ваших (либо вашего заказчика) предпочтений.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.