Здравствуйте.
Подскажите, пожалуйста, как создать группы у меток, взятых из базы данных и преобразованных с помощью множественного геокодирования? При этом с возможностью отображать или скрывать определенные группы.
Вот код, где в массив заносится все необходимая инфа из таблицы. В зависимости от значения в поле category, все метки получают соотвествующий цвет. Таким образом я попытался добится подобия рзбиения всех меток на группы. Если если возможность скрывать метки определенных цветов, тогда пожалуй задача была бы решена или же как иначе разбить все метки на группы? Подскажите пожалуйста!
//-----
$script = '';
$script='var data = [';
$query = 'SELECT `address`,`id`,`city`,`category` FROM `company` ORDER BY id';
$result = mysql_query($query) or die(mysql_error()) ;
while(true){
if (($row = mysql_fetch_array($result))==false) {break;};
$query1 = 'SELECT `name` FROM `cities` WHERE id='.$row[2].'';
$result1 = mysql_query($query1) or die(mysql_error()) ;
$row1 = mysql_fetch_array($result1);
$script.='{request:"'.$ro
if ($row[3]==1) {
$script.='style: {parentStyle: "default#redPoint",
balloonContentStyle: {
template: new YMaps.Template("<div>$[text]</div><br>$[name]")
}}';
}
elseif ($row[3]==2) {
$script.='style: {parentStyle: "default#greenPoint",
balloonContentStyle: {
template: new YMaps.Template("<div>$[text]</div><br>$[name]")
}}';
}
elseif ($row[3]==3) {
$script.='style: {parentStyle: "default#bluePoint",
balloonContentStyle: {
template: new YMaps.Template("<div>$[text]</div><br>$[name]")
}}';
}
$script.='},';}
$script.='""];';
//-----
Вот основной код:
//-----
<script type="text/javascript">
// Создание обработчика для события window.onLoad
YMaps.jQuery(function () {
// Создание экземпляра карты и его привязка к созданному контейнеру
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]
// Установка для карты ее центра и масштаба
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 4);
map.addControl(new YMaps.Zoom()
map.enableScrollZoom(
map.addControl(new YMaps.SearchControl()
map.addControl(new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [1,2,3])
// Координаты или адреса географических объектов
<?php echo($script); ?>
var geocoder = new MultiplyGeocoder(data);
geocoder.setStyle({ balloonContentStyle : { template : new YMaps.Template("<div>$[text]</div>") } }
map.addOverlay(geocoder);
YMaps.Events.observe(geocoder, "Load", function (geocoder) {
alert("Загрузка адресов завершена");
}
}
// Реализует наследование прототипа без исполнения конструктора родителя
function extend (child, parent) {
var c = function () {};
c.prototype = parent.prototype;
c.prototype.constructor = parent;
return child.prototype = new c;
};
// Множественный геокодер
// requests - массив адресов
function MultiplyGeocoder (requests) {
YMaps.GeoObjectCollection.call(this);
var _this = this,
geocodeCallCount = 0,
listeners = [];
for (var i = 0, l = requests.length; i < l; i++) {
geocode(requests[i]
}
function geocode (data) {
var geocoder = new YMaps.Geocoder(data.request);
geocodeCallCount++;
listeners = listeners.concat(
YMaps.Events.observe(geocoder, [geocoder.Events.Load, geocoder.Events.Fault], function (geocoder) {
if (geocoder.length()) {
var geocodeResult = geocoder.get(0);
geocodeResult.name = data.name;
geocodeResult.setStyle(data.style);
_this.add(geocodeResult);
}
geocodeCallCount--;
isFinish(
})
}
function isFinish () {
if (!geocodeCallCount) {
YMaps.Events.notify(_this, "Load", _this);
for (var i = 0, l = listeners.length; i < l; i++) {
listeners[i].cleanup(
}
}
}
}
var ptp = YMaps.Utils.extend(MultiplyGeocoder, YMaps.GeoObjectCollection);
</script>