Клуб API Карт

Кластеризация разных типов меток, возможно ли?

ifl2001
3 декабря 2013, 02:25

Привет всем, столкнулся с одной проблемой! В общем у меня на карте разные типы меток, все метки вытаскиваются с базы данных определяя их вид и размещение на карте. Возможно ли кластеризировать разные типы меток на одной карте?

Вот так вызываю саму карту и внутри прописывается откуда брать данные о метках:

 

<script type="text/javascript">
       
        ymaps.ready(init);

        //Определение начальных параметров карты
        function init () {
            var myMap = new ymaps.Map("map", {
                    center: [42.87,74.59],
                    zoom: 12,
                    behaviors:['default', 'scrollZoom']
                }, {
                    balloonMaxWidth: 600
                });
           
            //Добавляем элементы управления   
            myMap.controls               
                .add('zoomControl')               
                .add('typeSelector')               
                .add('mapTools');
               
            //Запрос данных и вывод маркеров на карту
        $.getJSON("vivodpointsmap.php",
        function(json){
                for (i = 0; i < json.markers.length; i++) {

                    var myPlacemark = new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], {
                    // Свойства
                    iconContent: json.markers[i].icontext,
                    hintContent: json.markers[i].hinttext,
                    balloonContentBody: json.markers[i].balloontext                  
                    }, {
                    // Опции
                    preset: json.markers[i].styleplacemark                   
                });

                // Добавляем метку на карту
                myMap.geoObjects.add(myPlacemark);

            }
 
        });   
               
        }

 

 

ну и так определяю массив данных внутри метки и его вид:

 

<?php
header('Content-Type: text/html; charset=utf-8');
 
require ("bd.php");
 
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 
$result = mysql_query("SELECT * FROM prodam");
if(mysql_num_rows($result)>0)
{
while ($mar = mysql_fetch_array($result))
{
        $json =  array(
        icontext=>$mar['rooms'],
        styleplacemark=>$mar['stylePlacemark'],
        lat=>$mar['lat'],
        lon=>$mar['lon']
    );
   
    $json["hinttext"] .= "{$mar["price"]} $";
    $json["balloontext"] .= "<div id=\"ballooncontent\">Комнат:<b> {$mar["rooms"]}</b></div>";
    $json["balloontext"] .= "<div id=\"ballooncontent\">Площадь:<b> {$mar["square"]} кв.м.</b></div>";
    $json["balloontext"] .= "<div id=\"ballooncontent\">Цена:<b> {$mar["price"]} $</b></div>";
    $json["balloontext"] .= "<div id=\"ballooncontent2\">Этаж:<b> {$mar["etage"]}</b></div><div id=\"linkballon\"><a target=\"_blank\" href=\"details.php?id={$mar["id"]}\">Подробнее ...</a></div>";
   
    $markers[] = $json;
}
 
}
$points = array(markers=>$markers);

echo json_encode($points);
 
}
 
?>

 

stylePlacemark - определяет вид метки

карту можно саму посмотреть тут http://kv.livewebmap.com/proba.php

кто поможет разобраться?

16 комментариев
Подписаться на комментарии к посту

Спрячьте код под кат.
Код запроса должен выглядеть как-то так:

$.getJSON("vivodpointsmap.php", function (json) {
  var placemarks = [];
  for (i = 0; i < json.markers.length; i++) {
    placemarks.push(new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], {
      // Свойства
      iconContent: json.markers[i].icontext,
      hintContent: json.markers[i].hinttext,
      balloonContentBody: json.markers[i].balloontext
    }, {
      // Опции
      preset: json.markers[i].styleplacemark
    }));
  }
  var cluster = new ymaps.geoQuery(placemarks).clusterize();
  myMap.geoObjects.add(cluster);
});


Можете почитать про кластеризатор и модные молодежные geoQuerygeoQueryResult

Попробовал, не работает ( ... что может быть не так?

Ночь… нужно поправить строчку:
var cluster = new ymaps.geoQuery(placemarks).clusterize();
Убрать из нее «new».
var cluster = ymaps.geoQuery(placemarks).clusterize();

попробовал убрать .. всё равно не работает ... даже карта не грузится (((

что не так я не знаю ... js не рублю! посмотрите ссылку может всё равно что-то ещё лишнее? или дело в выгрузке самих меток?

в конце, перед закрытием тега script пропущена скобочка }

спасибо большое! заработало ) уффф ... такой ещё вопрос, у меня там разные типы меток - какие-то синие, другие зелёные. Можно ли сделать кластеризацию по группам? если да, то как ... можно тут ответить или ссылку скинуть )

Спасибо ещё раз за помощь

Класс! Это то, что нужно ... попробовал вставить нужную строку в код и не работает (, что у меня там не так?

http://kv.livewebmap.com/proba.php

в консоли все написано, Вы обратились к не инициализированной переменной

 

Uncaught ReferenceError: generator is not defined proba.php:36

и что делать? как исправить то?

Инстанцировать генератор (вызвать с new) 

Посмотрите в код исходного примера, Вы просто не все скопировали.

Впрочем у Вас должны быть свои данные, а не сгенеренные, как в примере.

хорошо ... попробую ... у меня просто данные из mysql выводятся

Не знаю ... просто js не рублю сильно ... где-то что-то я явно не так вставил ... или упустил скобку или ещё какой знак ... sos прошу помочь найти грабли )

Используй консоль браузера для поска ошибок.

Чтобы вставить готовый код сильно рубить не надо

Это Вам легко рассуждать, что легко вставить, когда знаешь, а если б я рубил я бы сюда и не писал ... в общем нифига у меня не получилось (

http://kv.livewebmap.com/proba2.php

ну так поможете решить вопрос? )