13.05.2016, 11:26
|
Кандидат Javascript-наук
|
|
Регистрация: 10.11.2015
Сообщений: 131
|
|
Вывод нескольких маркеров на карте и кластеризация
Приветствую!
Есть такой код, в данном примере он выводит 4 маркера на карте
все работает исправно, но есть проблема если таких маркеров я добавлю много то будет смотреться
плохо.
Для этого мне нужна кластеризация этих маркеров, помогите примером кто сталкивался с этим
я в курсе что нужна библиотека
markerclusterer.js
и возможно
jquery.min.js
нужна такая кластерезация маркеров как тут
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2"></script>
<body onload="showMap();" onunload="GUnload()">
<script type="text/javascript">
function showMap()
{
if (GBrowserIsCompatible()) {
var map = new GMap(document.getElementById("map_canvas"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(41.881576,12.495232), 6);
var icon = new GIcon();
icon.image = "http://mapszoom.com/temp/map/img/location.png";
icon.iconSize = new GSize(20, 34);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(6, 6);
icon.infoWindowAnchor = new GPoint(1, 1);
function createMarker(point, description, icon) {
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(description, icon);
});
return marker;
}
map.addOverlay(createMarker(new GLatLng(41.888014,12.482378), "Описание 1 - маркера", icon));
function createMarker(point, description, icon) {
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(description, icon);
});
return marker;
}
map.addOverlay(createMarker(new GLatLng(41.89616,12.484159), "Описание 2 - маркера", icon));
function createMarker(point, description, icon) {
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(description, icon);
});
return marker;
}
map.addOverlay(createMarker(new GLatLng(41.893445,12.483258), "Описание 3 - маркера", icon));
function createMarker(point, description, icon) {
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(description, icon);
});
return marker;
}
map.addOverlay(createMarker(new GLatLng(41.911132,12.48741), "Описание 4 - маркера", icon));
}
}
</script>
<div id="map_canvas" style="width: 800px; height: 500px;"></div>
|
|
13.05.2016, 12:33
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Последний раз редактировалось Dilettante_Pro, 13.05.2016 в 12:35.
|
|
13.05.2016, 12:38
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
sergofedor06,
А зачем у вас 4 раза повторяется описание одной и той же функции createMarker?
Достаточно и одного описания - и используй сколько хочешь раз
|
|
13.05.2016, 13:12
|
Кандидат Javascript-наук
|
|
Регистрация: 10.11.2015
Сообщений: 131
|
|
А зачем у вас 4 раза повторяется описание одной и той же функции createMarker?
Достаточно и одного описания - и используй сколько хочешь раз
если можно приведите пример как избавится от этих повторений кода
function createMarker(point, description, icon) {
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(description, icon);
});
return marker;
}
|
|
13.05.2016, 13:19
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
sergofedor06,
Просто удалить 2, 3, 4 дубли - оставить только первый
|
|
13.05.2016, 13:27
|
Кандидат Javascript-наук
|
|
Регистрация: 10.11.2015
Сообщений: 131
|
|
отлично все вышло
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2"></script>
<body onload="showMap();" onunload="GUnload()">
<script type="text/javascript">
function showMap()
{
if (GBrowserIsCompatible()) {
var map = new GMap(document.getElementById("map_canvas"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(41.881576,12.495232), 6);
var icon = new GIcon();
icon.image = "http://mapszoom.com/temp/map/img/location.png";
icon.iconSize = new GSize(20, 34);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(6, 6);
icon.infoWindowAnchor = new GPoint(1, 1);
function createMarker(point, description, icon) {
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(description, icon);
});
return marker;
}
map.addOverlay(createMarker(new GLatLng(41.888014,12.482378), "Описание 1 - маркера", icon));
map.addOverlay(createMarker(new GLatLng(41.89616,12.484159), "Описание 2 - маркера", icon));
map.addOverlay(createMarker(new GLatLng(41.893445,12.483258), "Описание 3 - маркера", icon));
map.addOverlay(createMarker(new GLatLng(41.911132,12.48741), "Описание 4 - маркера", icon));
}
}
</script>
<div id="map_canvas" style="width: 800px; height: 500px;"></div>
если можно сделайте правку в этом коде, что бы выводило маркеры с кластеризацией!
|
|
13.05.2016, 17:48
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
sergofedor06,
что-то никак не могу найти библиотеку для MarkerClusterer - все, что раньше подключал, недоступно...
Попутно переделал ваш вариант под API V3
<script src="https://maps.google.com/maps/api/js?sensor=false"> </script>
<script>
var mark = [{ LatLang: { lat: 41.888014, lng: 12.482378 }, description: "Описание 1 - маркера" },
{ LatLang: { lat: 41.89616, lng: 12.484159 }, description: "Описание 2 - маркера" },
{ LatLang: { lat: 41.893445, lng: 12.483258 }, description: "Описание 3 - маркера" },
{ LatLang: { lat: 41.911132, lng: 12.48741 }, description: "Описание 4 - маркера" }
];
function e() {
var centerLatLng = { lat: 41.881576, lng: 12.495232 };
var e = document.getElementById("map"),
t = {
center: centerLatLng,
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var gmap = new google.maps.Map(e, t);
var marker = [], infowindow=[];
for (i = 0; i < 4; i++) {
marker[i] = new google.maps.Marker({
position: mark[i].LatLang,
map: gmap,
title: mark[i].description
});
marker[i].setMap(gmap);
infowindow[i] = new google.maps.InfoWindow({
content: mark[i].description
});
marker[i].id = i;
marker[i].addListener('click', function () {
infowindow[this.id].open(gmap, this);
});
}
// var markerClusterer = new MarkerClusterer(_this.map, marker,
// {
// maxZoom: 13,
// gridSize: 50,
// styles: null
// });
};
google.maps.event.addDomListener(window, 'load', e);
</script>
</head>
<body>
<div id="map" style="width: 800px; height: 500px;">
</div>
</body>
Последний раз редактировалось Dilettante_Pro, 03.02.2018 в 16:31.
|
|
13.05.2016, 18:10
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
sergofedor06,
Скачал дистрибутив библиотеки из
https://github.com/googlemaps/js-marker-clusterer
Разместил markerclusterer.js в scripts в корне сайта,
картинки - в images в корне сайта.
В файле markerclusterer.js строки
190 MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ =
191 'https://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/' +
192 'images/m';
- удалил строку 191 ( а то обращается по полному пути и не находит. Раньше там же лежали и библиотеки, а теперь ничего не лежит - надо скачивать)
Добавил в код моего примера строку
<script src="scripts/markerclusterer.js"></script>
Раскомментировал в примере строки 38-43
Все работает
Последний раз редактировалось Dilettante_Pro, 13.05.2016 в 18:12.
|
|
15.05.2016, 13:47
|
Кандидат Javascript-наук
|
|
Регистрация: 10.11.2015
Сообщений: 131
|
|
Спасибо конечно, но если честно я ничего не понял!
где этот markerclusterer.js так и не нашел в корне сайта нет папки (scripts)
я взял markerclusterer.js отсюда - https://code.google.com/p/google-map...terer.js?r=360
положил в папку с моим скриптом то что вы правили
добавил
<script src="markerclusterer.js"></script>
то не работает кластеризация вообще!
может я не так делаю, если вы сделали и у вас работает, можете скинуть архив?
|
|
15.05.2016, 13:52
|
Кандидат Javascript-наук
|
|
Регистрация: 10.11.2015
Сообщений: 131
|
|
|
|
|
|