На вход подаётся список городов, при чем каждому городу соотвествует количество людей.
Например, Москва - 3, Севастополь - 5, Ялта - 7
По идее, чтобы не загружать трафик, нужно воспользоваться множественным геокодированием и сделать как-то так:
var objects = ymaps.geoQuery(ymaps.geocode('Москва'))
for (var key in cities) {
city = cities[key].title;
objects.add(ymaps.geocode(city));
}
objects.addToMap(myMap);
Но. Нужно, чтобы каждый геообъект менял iconContent на соотвествующее количество, и другие мелочи (текст балуна, вид метки в зависимости от количества).
Более того, нужно еще, чтобы кластеризатор учитывал это количество.
Поэтому я сделал так:
for (var ck in cts) //cts - города, ck - идентификатор-название города
{
var current = {
city: ck
};
ymaps.geocode(ck,{kind:"l
ocality",results:1}).then (ymaps.util.bind(function (res) { var object = res.geoObjects.get(0);
object.properties.set('iconContent', cts[this.city]["count"]);
object.properties.set('balloonContentHeader', this.city+" ("+cts[this.city]["count"]+")");
clusterer.add(object);
clusterer.createCluster = function (center, geoObjects) {
// Создаем метку-кластер с помощью стандартной реализации метода.
var clusterPlacemark = ymaps.Clusterer.prototype
.createCluster.call(this, center, geoObjects), geoObjectsLength = clusterPlacemark.getGeoObjects().length,
realGeoObjectsLength = 0;
var objs = clusterPlacemark.getGeoObjects();
for (var j=0; j<geoObjectsLength; j++) {
realGeoObjectsLength = realGeoObjectsLength + objs[j].properties.get('iconContent');
}
clusterPlacemark.options.
set('clusterIconContentLa yout', ymaps.templateLayoutFactory.createClass('<div style="color: #FFFFFF; font-weight: bold;">'+realGeoObjectsLength+'</div>')); return clusterPlacemark;
};
}, current));
}
myMap.geoObjects.add(clusterer);
Так метки с городами и кластерами отображаются с нужными числами.
Но, во-первых, такое решение далеко от принципа множественного геокодирования.
При этом, города могут быть абсолютно любые, самые популярные города можно сохранить в БД, и оттуда вытягивать, но все равно - будут и непопулярные города.
А во-вторых, с этим вариантом кастомизации не получается дальше работать - например, я не нашел, как спозиционировать карту по объектам(стандартные решения не работают).
Как быть? Как сделать кастомный вывод метки в зависимости от города(от его параметров) и при этом не превысить лимит запросов?
П.С.: текст кода упрощен в процессе задавания вопроса, поэтому может содержать формальные ошибки. Важен же ответ по существу.