Клуб API Карт

Изменить стиль отображения региона

Пост в архиве.

Никак не получаеться изменить стиль отображения региона (без наведения мышки). Тоесть что бы одни выбранные регионы были серыми а другие например красными, а при наведении курсора синими. С изменением стиля при наведении на регион все понятно.

 

YMaps.Regions.load("ru", function (state, response) {
                if (state == YMaps.State.SUCCESS) {
                    response.setStyle({
                        polygonStyle : {
                            fillColor : "B43384CC",
                            strokeColor : "743278CC",
                            strokeWidth : "1",
                        },
                        hasHint : true,
                        hasBalloon : false
                    });
                    
                    map.addOverlay(response);
                    
                    YMaps.Events.observe(response, response.Events.Click, function (response, region, mEvent) {
                        showRegion(region);
                    });
                } else {
                    alert("Во время выполнения запроса произошла ошибка: " + response.error.message + "\nКод ошибки: " + response.error.code);
                }
            });

 

Заранее спасибо.

1 комментарий
Тут дело в том, что если вы отобразите на карте сразу все регионы, это может подтормаживать, т.к. может получится много полигонов на карте. И у каждого довольно много точек.
В модуле полигон добавляется только по наведению в область (это расчитывается математически), а до этого полигона на карте нет и стилизовать соответственно нечего.

Вам нужно самому взять данные и добавить на карту соответствующие области. Плюс повесить на них обработчики для подсветки.
Вот как это примерно делается:

YMaps.Regions.load("by", function (state, data) {
            if (state == YMaps.State.SUCCESS) {
                // myMap.addOverlay(data);

                data.forEach(function (region) {
                    var encodedData = region.metaDataProperty.encodedShapes;
                    YMaps.jQuery.each(encodedData, function (i, rec) {
                        var style = {
                            polygonStyle: {
                                strokeColor: "ff00ff88",
                                strokeWidth: 3,
                                fillColor: "ff00ff33"
                            }
                        },
                        poly = YMaps.Polygon.fromEncodedPoints(rec.coords, rec.levels, {
                            style: style
                        });
                        poly.name = region.name;
                        myMap.addOverlay(poly);

                        YMaps.Events.observe(poly, poly.Events.MouseEnter, function (poly) {
                            poly.setStyle({
                                polygonStyle: {
                                    strokeColor: "00ffff88",
                                    strokeWidth: 3,
                                    fillColor: "00ffff33"
                                }
                            });
                        });

                        YMaps.Events.observe(poly, poly.Events.MouseLeave, function (poly) {
                            poly.setStyle(style);
                        });
                    });
                });
            }
        });