Принцип:
Есть порядка 200 точек (меток), есть несколько кнопок (галочек) управления. Все эти 200 точек могут биться на несколько типов учреждений (например, многоэтажка, частный дом и т.п.). Но в то же время могут биться и на другие группы, например, магазин, ларек и т.п. Т.е. все эти маленькие группы могут перекликаться.
Вопрос:
как при установке "галочки" (или нажатии "кнопки-флажка") поштучно отобразить метки на основе выбранного параметра (критерия), а потом при снятии галочки (или отжатии "кнопки-флажка") убрать эти метки. Причем, если должны остаться другие метки (допустим, если было выбрано два критерия, а один убираем), то метки оставленного критерия должны быть отображены на карте. Как-то так.
Код примерно следующий:
var uchr_arr = [];
var placemark = [];
placemark[0] = new YMaps.Placemark(new YMaps.GeoPoint(xxx,xxx), {style: \"icons#style_school_sov\"});\n
placemark[0].name = 'Учреждение 1';\n
placemark[0].description = 'Описание учреждения 1';\n
//uchr_arr - [id, uchr_type, rajon, number]
uchr_arr = uchr_arr.concat([["0", "school", "sov", "52"]]);\n
placemark[1] = new YMaps.Placemark(new YMaps.GeoPoint(xxx,xxx), {style: \"icons#style_school_sov\"});\n
placemark[1].name = 'Учреждение 2';\n
placemark[1].description = 'Описание учреждения 2';\n
uchr_arr = uchr_arr.concat([["1", "dou", "len", "44"]]);\n
//и еще раз 200 в php-цикле
//дальше создали меню с галочками, и нажимаем на эту галочку:
li.bind(\"click\", function () {
var link = YMaps.jQuery(this);
if (link.attr(\"checked\")) {
var filter_add = new Array();
filter_add = ivedu_find_objects(uchr_arr, link.attr(\"id\"), map);
for (i=0; i<filter_add.length; i++) {
var uchr_id = uchr_arr[filter_add[i]][0];
map.addOverlay(placemark[uchr_id]);
}
}
else
{
var filter_remove = ivedu_find_objects(uchr_arr, link.attr(\"id\"), map);
for (i=0; i<filter_add.length; i++) {
var uchr_id = uchr_arr[filter_remove[i]][0];
map.removeOverlay(placemark[uchr_id]);
}
}
});
//функция поиска по районам:
function ivedu_find_objects(uchr_arr, id, map) {
var filter_out = [];
for (i=0;i<uchr_arr.length;i++) {
if (id==0) { var rajon = \"sov\"; }
if (id==1) { var rajon = \"okt\"; }
if (id==2) { var rajon = \"len\"; }
if (id==3) { var rajon = \"fr\"; }
if (uchr_arr[i][2] == rajon) {
filter_out = filter_out.concat(uchr_arr[i][0]);
}
}
return filter_out;
}
Т.е. по сути, есть массив точек. Часть этих точек размещаются на карте с помощью map.addOverlay(placemark[uchr_id]), но потом не хотят удаляться. Почему?
Варианты с группами мне не подходят, т.к., повторюсь, одно и то же учреждение может относиться к нескольким группам - комбинаций из 200 учреждений может быть очень много.
Пробовал через uchr_arr[i].filter(function (obj) { }
Есть, конечно, вариант "из пушки по воробьям" - при удалении части меток удалять абсолютно все, а потом заново выставлять те метки, которые не должны быть удалены, но, думаю, должно быть более корректное решение.