Стоит задача сделать карту с федеральными округами РФ на картах яндекса. В данной статье я не стараюсь открыть Америку, но думаю этот материал поможет вам сэкономить время на создание подобной карты.
В этом деле нам поможет документация и песочница для экспериментов. За основу берем этот пример. tech.yandex.ru/maps/jsbox/2.1/regions
//В консоль выводим все названия регионов и их osmId
lastCollection.each(function (reg) {
console.log(reg.properties.get('name') + ' -> ' + reg.properties.get('osmId'));
});
Разбросал регионы по федеральным округам:
Брянская область -> 81997
Владимирская область -> 72197
Воронежская область -> 72181
Ивановская область -> 85617
Калужская область -> 81995
Костромская область -> 85963
Курская область -> 72223
Липецкая область -> 72169
Московская область -> 51490
Орловская область -> 72224
Рязанская область -> 71950
Смоленская область -> 81996
Тамбовская область -> 72180
Тверская область -> 2095259
Тульская область -> 81993
Ярославская область -> 81994
Москва -> 102269
Республика Калмыкия -> 108083
Краснодарский край -> 108082
Астраханская область -> 112819
Волгоградская область -> 77665
Ростовская область -> 85606
Республика Коми -> 115136
Архангельская область -> 140337
Вологодская область -> 115106
Калининградская область -> 103906
Ленинградская область -> 176095
Мурманская область -> 2099216
Новгородская область -> 89331
Псковская область -> 155262
Санкт-Петербург -> 337422
Ненецкий автономный округ -> 274048
Камчатский край -> 151233
Приморский край -> 151225
Хабаровский край -> 151223
Амурская область -> 147166
Магаданская область -> 151228
Сахалинская область -> 394235
Еврейская автономная область -> 147167
Чукотский автономный округ -> 151231
Бурятия -> 145729
Тыва -> 145195
Республика Хакасия -> 190911
Алтайский край -> 144764
Забайкальский край -> 145730
Красноярский край -> 190090
Иркутская область -> 145454
Кемеровская область -> 144763
Новосибирская область -> 140294
Омская область -> 140292
Томская область -> 140295
Свердловская область -> 79379
Тюменская область -> 140291
Челябинская область -> 77687
Ханты-Мансийский автономный округ — Югра -> 140296
Ямало-Ненецкий автономный округ -> 191706
Марий Эл -> 115114
Республика Мордовия -> 72196
Татарстан -> 79374
Удмуртская республика -> 115134
Чувашия -> 80513
Кировская область -> 115100
Нижегородская область -> 72195
Оренбургская область -> 77669
Пензенская область -> 72182
Ульяновская область -> 72192
Самарская область -> 72194
Саратовская область -> 72193
Пермский край -> 115135
Ингушетия -> 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); //и тд.
Итоговый код
<!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>
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');
});
});
П.С. Эту карту делал, когда такого нюанса как Крым еще не было, так что с ним разбирайтесь сами в зависимости от ваших (либо вашего заказчика) предпочтений.
