Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/27: Рейтинг темы: голосов - 27, средняя оценка - 4.74
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210

Кластеризация объектов на Яндекс карте

31.05.2015, 10:10. Показов 6030. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Вывожу заранее заданные объекты на яндекс карте. Объекты
заданы следующим образом:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var myPlaces = [{
            'name': 'ст. м. Алтуфьево,<br>выход метро - поcледний вагон из центра,<br> секция №19',
            'coords': [55.8984, 37.5873]
            },
            {
            'name': 'ст. м. Нагорная,<br>выход метро - единственный,<br>секция №2',
            'coords': [55.6729, 37.6107]
            },
            {
            'name': 'ст. м. Чертановская,<br>выход метро - поcледний вагон из центра,<br>секция  №3',
            'coords': [0, 0]
            },
            {
            'name': 'ст. м. Южная,<br>выход метро - первый вагон из центра,<br>секция №16',
            'coords': [55.6224, 37.6090]
            },
            {
            'name': 'ст. м. Лубянка,<br>выход метро - единственный,<br>секция №7',
            'coords': [55.759162, 37.627346]
            },
            {
            'name': 'ст. м. Аэропорт,<br>выход метро - первый вагон из центра,<br>секция №19',
            'coords': [55.8003, 37.5329]
            },
            {
            'name': 'ст. м. Кантемировская,<br>выход метро - последний вагон из центра,<br>секция №11',
            'coords': [55.6361, 37.6562]
            },
            {
            'name': 'ст. м. Красногвардейская,<br>выход метро - поcледний вагон из центра,<br>секция №17',
            'coords': [55.6137, 37.7464]
            }]
Но есть 2 объекта, которые нужно кластеризовать:
JavaScript
1
2
3
4
5
6
    var points = [{
        'name':'ст. м. Текстильщики,<br>выход метро - первый вагон из центра,<br>секция №17',
         'coords':[55.7082, 37.7299]}, 
        {'name':'ст. м. Текстильщики,<br>выход метро - поcледний вагон из центра,<br>секция №10',
         'coords':[55.7090, 37.7326]
         }];
Точки, которые в массиве myPlaces выводяться нормально, но когда пытаюсь выводить дополнительно кластер из двух точек, то карта вовсе не загружается или загружается, но без данного кластера. Код при помощи которого пытаюсь всё это выводить:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
    ymaps.ready(
     function()
     { myMap = new ymaps.Map(
       'map', 
       { center:[55.7470, 37.6806], 
        zoom:10 /*, 
       controls: ['geolocationControl', 'typeSelector'],
        behaviors: ['Drag', 'rightMouseButtonMagnifier', 'dblClickZoom']*/
       } 
      ),
           clusterer = new ymaps.Clusterer({
            // Зададим массив, описывающий иконки кластеров разного размера.
            clusterIcons: [{
                href: 'img/map3.png',
                size: [39, 49],
                offset: [-29, -39]
            }],
            // Эта опция отвечает за размеры кластеров.
            // В данном случае для кластеров, содержащих до 100 элементов,
            // будет показываться маленькая иконка. Для остальных - большая.
            clusterNumbers: [100],
            clusterIconContentLayout: null
        }),
 
 
 
         myGeoObjects = [];
        
    for (var i = 0, i < 2; i++) 
    {
       var placecluster[i] = new ymaps.Placemark([parseFloat (points[i].coords[0]), parseFloat(points[i].coords[1])], 
                                            {balloonContent: points[i].name}
        
 
    );
        myGeoObjects.push(placecluster);
    }
 
    clusterer.add(myGeoObjects);
    myMap.geoObjects.add(clusterer);
 
     myMap.setBounds(clusterer.getBounds(), 
     { checkZoomRange: true }).then(function()
            { 
                if (myMap.getZoom() > 10) 
                myMap.setZoom(10);
            }
        );
            
      
    myMap.behaviors.enable(['drag', 'rightMouseButtonMagnifier']);
      myMap.controls.add('zoomControl', {position: {right: 10, top: 200}});
 
      myMap.controls.add('rulerControl');
      myMap.controls.add('routeEditor'); 
 
    for (i = 0; i < 23; i++){   
 
        myPlacemark = new ymaps.Placemark(
         [parseFloat (myPlaces[i].coords[0]),parseFloat(myPlaces[i].coords[1])], 
         { /*hintContent: "Pens5.ru Пункт самовывоза. " + myPlaces[i].name,*/
          balloonContent: myPlaces[i].name
          
         },
         { 
            
            preset: 'islands#icon',
            iconColor: '#0095b6',
            iconLayout: 'default#image',
            iconImageHref: 'img/map3.png',
            iconImageSize: [29, 39],
            iconImageOffset: [-29, -39],
            hideIconOnBalloonOpen: false
 
         }
        );
 
          myMap.geoObjects.add(myPlacemark,i);
 
     }
 
     
     }
 
);
Благодарю за внимание.

Добавлено через 8 часов 17 минут
Скажите, пожалуйста, в чём может быть ошибка?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2015, 10:10
Ответы с готовыми решениями:

Кластеризация точечных объектов
Ребята помогите. Имеется карта на которой есть множество точечных объектов. Но отображаются они все не важно при каком масштабе. Нужно...

Java Android - сделать кнопку "показать адрес на карте", которая вызывает яндекс-карты или яндекс-навигатор и гугл-карты
Доброго дня, формучане! Подскажите, как сделать возможность из моего приложения при клике по кнопке &quot;Показать на карте&quot; перейти...

Метки на карте Яндекс
Вопрос: Как сделать что бы при нажатие на метку(иконку на карте) появилось окно где была бы картинка с текстом? Вот я нашел ссылку как...

18
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 17:46
ошибка может быть в том что вы не соеденили два этих массива

Добавлено через 1 минуту
я вообще не понял где вы берёте этот массив myPlaces и его как-либо задействуете, а про второй вообще молчу
0
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 18:14  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
ошибка может быть в том что вы не соеденили два этих массива
Зачем их соединять ?
Цитата Сообщение от BANO Посмотреть сообщение
я вообще не понял где вы берёте этот массив myPlaces и его как-либо задействуете
Самый верхний пост, первый листинг.
Цитата Сообщение от BANO Посмотреть сообщение
а про второй вообще молчу
А разве есть что сказать дельное?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 18:27

Не по теме:

да
нашёл человека, который как и я любит придираться к словам )))


ты его где в коде использовал? нигде ты его просто объявил и всё, больше ничего с ним не сделал
я тебе говорю что не вижу его в 3 листенге, ты мне покажи где там он используется, может тогда легче будет понимать почему не работает

Добавлено через 1 минуту
Цитата Сообщение от pro1004ok Посмотреть сообщение
Зачем их соединять ?
ну наверное так легче будет всё это давать бедному api
просто взять и соединить, чтобы не парится с двумя, а парится с одним

Добавлено через 39 секунд
у массивов есть concat

Добавлено через 1 минуту
всё я нашёл myPlaces, но всё равно не вижу где ты использовал переменную points

Добавлено через 1 минуту
а теперь и points нашёл
но зачем их разделять я не понимаю
1
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 18:32  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
но всё равно не вижу где ты использовал переменную points
JavaScript
1
2
3
4
5
6
7
8
9
 for (var i = 0, i < 2; i++) 
    {
       var placecluster[i] = new ymaps.Placemark([parseFloat (points[i].coords[0]), parseFloat(points[i].coords[1])], 
                                            {balloonContent: points[i].name}
        
 
    );
        myGeoObjects.push(placecluster);
    }
Добавлено через 2 минуты
Цитата Сообщение от BANO Посмотреть сообщение
а теперь и points нашёл
но зачем их разделять я не понимаю
Удобнее.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 18:41
а без обработки points как я понял это работает

Добавлено через 3 минуты
Удобнее
а где удобнее-то
там у тебя что в одно что в другом одна и таже иконка
0
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 18:47  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
а без обработки points как я понял это работает
Если не секрет, то как же это работает?
Без points у меня просто не получается кластер.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 18:52
я так и не понял почему ты так замороченно это делаешь, зачем тебе там кластеры, если у тебя это уже разделенно на два разных массива
0
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 18:59  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
я так и не понял почему ты так замороченно это делаешь, зачем тебе там кластеры, если у тебя это уже разделенно на два разных массива
Кластер нужен для того, чтобы совместить те самые 2 точки в одну, т.к они близко друг к другу расположены (в малом масштабе)
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 19:05
блин я вообще запутался, вроде код правильный и всё "по феншую", но не работает
я честно в ступоре

Добавлено через 48 секунд
pro1004ok, это я в документации прочитал, и про колекции прочитал, и теперь у меня ступор ещё больше, поскольку я понял что ничерта не понял

Добавлено через 1 минуту
а зачем тебе на 78 строке нужно количество объектов?
0
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 19:05  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
блин я вообще запутался, вроде код правильный и всё "по феншую", но не работает
я честно в ступоре
Да вот и я тоже в ступоре ...
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 19:07
погоди, а почему ты тогда не сделаешь myPlaces коллекцией?

Добавлено через 27 секунд
хотя да так будет не очень удобно

Добавлено через 15 секунд
в общем меня пока смущает только 78 строка
0
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 19:08  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
а зачем тебе на 78 строке нужно количество объектов?
На 78 строке добавляются объекты (именно обычные, не кластеризованные точки myPlaces) на карту. В этом месте всё верно.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 19:15
как я понял, там не надо указывать id, который ты таким макаром сметаешь, короче попробуй просто убрать i в 78 строке и посмотри что получилось

Добавлено через 1 минуту
ну во всяком случае в примерах документации про id вообще ничего не видно(ну я не заметил)

Добавлено через 2 минуты
прошерстил поисковиком, ни в одном примере нету второго параметра у geoObjects.add
0
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 19:25  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
как я понял, там не надо указывать id, который ты таким макаром сметаешь, короче попробуй просто убрать i в 78 строке и посмотри что получилось
Попробовал, ничего из этого не получилось

Добавлено через 8 минут
Цитата Сообщение от BANO Посмотреть сообщение
ну во всяком случае в примерах документации про id вообще ничего не видно(ну я не заметил)
До добавления кластера с этим id всё нормально работало, а почему сейчас не работает - пока не знаю...
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
31.05.2015, 19:31
тк ты при добавлении кластера не указываешь id
а при добавлении элементов начинаешь "перезаписывать" эти id
ну допустим при добавлении кластера ему присвоенно id = 1
а ты в цикле для запихивания myPlaces берёшь все цифры от 0 да 23
вот тут-то и может возникнуть облом, но я не уверен что эта i вообще что-либо делает

Добавлено через 21 секунду
можешь на jsfidle скинуть эту вещь?
0
2 / 2 / 0
Регистрация: 13.11.2008
Сообщений: 210
31.05.2015, 23:19  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
можешь на jsfidle скинуть эту вещь?
Скинул http://jsfiddle.net/dojadyep/
0
134 / 130 / 57
Регистрация: 29.12.2011
Сообщений: 359
31.05.2015, 23:58
Цитата Сообщение от pro1004ok Посмотреть сообщение
for (var i = 0, i < 2; i++)
после var i = 0 стоит запятая - так задумано?
Цитата Сообщение от pro1004ok Посмотреть сообщение
var placecluster[i]
это вообще невалидно, не знаю что Вы хотели этим сделать
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
01.06.2015, 13:01
он ругается в основном на грамматику, ты проверь его в каком-нибудь ide(webstorm или phpstorm)
а я код возьму и завтра посмотрю в своём ide

Добавлено через 12 часов 55 минут
JokerNN, собствнно говоря именно на это и ругается

Добавлено через 1 минуту
pro1004ok, ты в jsfidle не подключил api карт, а я не знаю какую ты там версию выбрал, но граматику я под правил
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var myPlaces = [{
    'name': 'ст. м. Алтуфьево,<br>выход метро - поcледний вагон из центра,<br> секция №19',
    'coords': [55.8984, 37.5873]
},
    {
        'name': 'ст. м. Нагорная,<br>выход метро - единственный,<br>секция №2',
        'coords': [55.6729, 37.6107]
    },
    {
        'name': 'ст. м. Чертановская,<br>выход метро - поcледний вагон из центра,<br>секция  №3',
        'coords': [0, 0]
    },
    {
        'name': 'ст. м. Южная,<br>выход метро - первый вагон из центра,<br>секция №16',
        'coords': [55.6224, 37.6090]
    },
    {
        'name': 'ст. м. Лубянка,<br>выход метро - единственный,<br>секция №7',
        'coords': [55.759162, 37.627346]
    },
    {
        'name': 'ст. м. Аэропорт,<br>выход метро - первый вагон из центра,<br>секция №19',
        'coords': [55.8003, 37.5329]
    },
    {
        'name': 'ст. м. Кантемировская,<br>выход метро - последний вагон из центра,<br>секция №11',
        'coords': [55.6361, 37.6562]
    },
    {
        'name': 'ст. м. Красногвардейская,<br>выход метро - поcледний вагон из центра,<br>секция №17',
        'coords': [55.6137, 37.7464]
    }];
var points = [{
    'name':'ст. м. Текстильщики,<br>выход метро - первый вагон из центра,<br>секция №17',
    'coords':[55.7082, 37.7299]},
    {'name':'ст. м. Текстильщики,<br>выход метро - поcледний вагон из центра,<br>секция №10',
        'coords':[55.7090, 37.7326]
    }];
 
ymaps.ready(
    function()
    { myMap = new ymaps.Map(
        'map',
        { center:[55.7470, 37.6806],
            zoom:10 /*,
         controls: ['geolocationControl', 'typeSelector'],
         behaviors: ['Drag', 'rightMouseButtonMagnifier', 'dblClickZoom']*/
        }
    );
        clusterer = new ymaps.Clusterer({
            // Зададим массив, описывающий иконки кластеров разного размера.
            clusterIcons: [{
                href: 'img/map3.png',
                size: [39, 49],
                offset: [-29, -39]
            }],
            // Эта опция отвечает за размеры кластеров.
            // В данном случае для кластеров, содержащих до 100 элементов,
            // будет показываться маленькая иконка. Для остальных - большая.
            clusterNumbers: [100],
            clusterIconContentLayout: null
        });
 
 
 
        myGeoObjects = [];
 
        for (var i = 0; i < 2; i++)
        {
            placecluster[i] = new ymaps.Placemark([parseFloat (points[i].coords[0]), parseFloat(points[i].coords[1])],
            {balloonContent: points[i].name}
 
 
        );
            myGeoObjects.push(placecluster);
        }
 
        clusterer.add(myGeoObjects);
        myMap.geoObjects.add(clusterer);
 
        myMap.setBounds(clusterer.getBounds(),
            { checkZoomRange: true }).then(function()
            {
                if (myMap.getZoom() > 10)
                    myMap.setZoom(10);
            }
        );
 
 
        myMap.behaviors.enable(['drag', 'rightMouseButtonMagnifier']);
        myMap.controls.add('zoomControl', {position: {right: 10, top: 200}});
 
        myMap.controls.add('rulerControl');
        myMap.controls.add('routeEditor');
 
        for (i = 0; i < 23; i++){
 
            myPlacemark = new ymaps.Placemark(
                [parseFloat (myPlaces[i].coords[0]),parseFloat(myPlaces[i].coords[1])],
                { /*hintContent: "Pens5.ru Пункт самовывоза. " + myPlaces[i].name,*/
                    balloonContent: myPlaces[i].name
 
                },
                {
 
                    preset: 'islands#icon',
                    iconColor: '#0095b6',
                    iconLayout: 'default#image',
                    iconImageHref: 'img/map3.png',
                    iconImageSize: [29, 39],
                    iconImageOffset: [-29, -39],
                    hideIconOnBalloonOpen: false
 
                }
            );
 
            myMap.geoObjects.add(myPlacemark,i);
 
        }
 
 
    }
 
);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2015, 13:01
Помогаю со студенческими работами здесь

Предприятие на Яндекс карте
Привет Форумчане, подскажите пожалуйста как реализовать карту с информацией о моем предприятии? Это должно делаться в каком то сервисе,...

Не отображаются точки на карте Яндекс
В общем, такая проблема. Есть карта. Точки загружаются посредством файла импорта. На старом сайте все работало нормально. После...

Расчёт стоимости проезда по Яндекс карте
Здравствуйте господа! Может быть кто-то знает, как можно реализовать подобный калькулятор стоимости проезда по Яндекс карте ...

Размещение объектов на карте
Здравствуйте! У меня такой вопрос, подгружаю фоновую картинку карты и располагаю её в JFrame f.add(new Map()); Затем хочу поместить в...

Спавн объектов на карте
имеется 2d карта уровня, на ней игроки и прочие объекты. Новые игроки и объекты спавнятся по случайным координатам. Как при спавне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru