13zone
Профессор
- Регистрация
- 22 Ноя 2008
- Сообщения
- 203
- Реакции
- 45
- Автор темы
- #1
Из базы данных через хмл собираю массив маркеров, затем вывожу на карте. Никак не могу сделать кластеризацию (обьединение) ближайших маркеров в одну группу. Подскажите где туплю?
библиотека подключена, пробую сделать как указано в гугле - не работает...
<script>
var markers = [];
var icons = {
batarei: {
icon: 'batarei.png'
},
makulatura: {
icon: 'makulatura.png'
},
odejda: {
icon: 'odejda.png'
},
metallolom: {
icon: 'metallolom.png'
},
info: {
icon: 'info-i_maps.png'
}
};
var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var map;
var geocoder;
var infoWindow;
function initialize() {
map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(49.988546, 36.233000),
zoom: 11,
gridSize: 50,
mapTypeControl: true,
disableDefaultUI: true,
zoomControl: true,
imagePath: 'images/',
});
infoWindow = new google.maps.InfoWindow;
// читаю хмл файлик
downloadUrl('/dbtoxml.php', function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName('marker');
Array.prototype.forEach.call(markers, function(markerElem) {
var id = markerElem.getAttribute('id');
var markers = markerElem.getAttribute('markers');
var name = markerElem.getAttribute('name');
var address = markerElem.getAttribute('address');
var type = markerElem.getAttribute('type');
var photo = markerElem.getAttribute('photo');
var point = new google.maps.LatLng(
parseFloat(markerElem.getAttribute('lat')),
parseFloat(markerElem.getAttribute('lng')));
// формирование информационного бокса для маркеров
var infowincontent = document.createElement('div');
var strong = document.createElement('strong');
strong.textContent = ("Что принимают: "+name)
infowincontent.appendChild(strong);
// infowincontent.appendChild(document.createElement('br'));
var text = document.createElement('text');
text.textContent = ("Адрес: "+address)
infowincontent.appendChild(text);
infowincontent.appendChild(document.createElement('br'));
text.textContent = ("Описание обьекта: "+type)
infowincontent.appendChild(text);
infowincontent.appendChild(document.createElement('br'));
// добавляю фото в инфоблок маркера
var img = document.createElement('img');
img.src = (""+photo+"");
infowincontent.appendChild(img);
// кластеризация (обьединение) маркеров на карте
var markerCluster = new MarkerClusterer(_this.map, markers,
{
maxZoom: 10,
gridSize: 60,
styles: null
});
var marker = new google.maps.Marker({
map: map,
position: point,
// label: icon.label,
title: name,
icon: icons[markers].icon,
// анимация, маркеры падают на карту
// animation: google.maps.Animation.DROP,
});
// наложение слоя автомобильного трафика
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
marker.addListener('click', function() {
infoWindow.setContent(infowincontent);
infoWindow.open(map, marker);
map.setZoom(15); // Устанавливаем ZOOM 16
map.setCenter(marker.getPosition()); // Центруем карту по маркеру, на который кликнули
// маркер подпрыгивает при нажатии, только не останавливается
if (icons[markers].getAnimation() !== null) {
icons[markers].setAnimation(null);
} else {
icons[markers].setAnimation(google.maps.Animation.BOUNCE);
}
});
google.maps.event.addListener(infoWindow, 'closeclick', function(event) {
map.setZoom(12);
});
});
});
}
function newLocation(newLat,newLng)
{
map.setCenter({
lat : newLat,
lng : newLng
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
google.maps.event.addDomListener(window, 'load', initialize);
function doNothing() {}
</script>
библиотека подключена, пробую сделать как указано в гугле - не работает...
<script>
var markers = [];
var icons = {
batarei: {
icon: 'batarei.png'
},
makulatura: {
icon: 'makulatura.png'
},
odejda: {
icon: 'odejda.png'
},
metallolom: {
icon: 'metallolom.png'
},
info: {
icon: 'info-i_maps.png'
}
};
var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var map;
var geocoder;
var infoWindow;
function initialize() {
map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(49.988546, 36.233000),
zoom: 11,
gridSize: 50,
mapTypeControl: true,
disableDefaultUI: true,
zoomControl: true,
imagePath: 'images/',
});
infoWindow = new google.maps.InfoWindow;
// читаю хмл файлик
downloadUrl('/dbtoxml.php', function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName('marker');
Array.prototype.forEach.call(markers, function(markerElem) {
var id = markerElem.getAttribute('id');
var markers = markerElem.getAttribute('markers');
var name = markerElem.getAttribute('name');
var address = markerElem.getAttribute('address');
var type = markerElem.getAttribute('type');
var photo = markerElem.getAttribute('photo');
var point = new google.maps.LatLng(
parseFloat(markerElem.getAttribute('lat')),
parseFloat(markerElem.getAttribute('lng')));
// формирование информационного бокса для маркеров
var infowincontent = document.createElement('div');
var strong = document.createElement('strong');
strong.textContent = ("Что принимают: "+name)
infowincontent.appendChild(strong);
// infowincontent.appendChild(document.createElement('br'));
var text = document.createElement('text');
text.textContent = ("Адрес: "+address)
infowincontent.appendChild(text);
infowincontent.appendChild(document.createElement('br'));
text.textContent = ("Описание обьекта: "+type)
infowincontent.appendChild(text);
infowincontent.appendChild(document.createElement('br'));
// добавляю фото в инфоблок маркера
var img = document.createElement('img');
img.src = (""+photo+"");
infowincontent.appendChild(img);
// кластеризация (обьединение) маркеров на карте
var markerCluster = new MarkerClusterer(_this.map, markers,
{
maxZoom: 10,
gridSize: 60,
styles: null
});
var marker = new google.maps.Marker({
map: map,
position: point,
// label: icon.label,
title: name,
icon: icons[markers].icon,
// анимация, маркеры падают на карту
// animation: google.maps.Animation.DROP,
});
// наложение слоя автомобильного трафика
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
marker.addListener('click', function() {
infoWindow.setContent(infowincontent);
infoWindow.open(map, marker);
map.setZoom(15); // Устанавливаем ZOOM 16
map.setCenter(marker.getPosition()); // Центруем карту по маркеру, на который кликнули
// маркер подпрыгивает при нажатии, только не останавливается
if (icons[markers].getAnimation() !== null) {
icons[markers].setAnimation(null);
} else {
icons[markers].setAnimation(google.maps.Animation.BOUNCE);
}
});
google.maps.event.addListener(infoWindow, 'closeclick', function(event) {
map.setZoom(12);
});
});
});
}
function newLocation(newLat,newLng)
{
map.setCenter({
lat : newLat,
lng : newLng
});
}
function downloadUrl(url, callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
google.maps.event.addDomListener(window, 'load', initialize);
function doNothing() {}
</script>