Вывод нескольких маркеров на карте и кластеризация
Приветствую!
Есть такой код, в данном примере он выводит 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>
|
sergofedor06,
Пример использования http://www.sitedev.by/blog/google-ma...kerclustererjs http://webmap-blog.ru/google-maps/kl...-kartax-google jquery не нужен - чистый js |
sergofedor06,
А зачем у вас 4 раза повторяется описание одной и той же функции createMarker? Достаточно и одного описания - и используй сколько хочешь раз |
А зачем у вас 4 раза повторяется описание одной и той же функции createMarker?
Достаточно и одного описания - и используй сколько хочешь раз если можно приведите пример как избавится от этих повторений кода
function createMarker(point, description, icon) {
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(description, icon);
});
return marker;
}
|
sergofedor06,
Просто удалить 2, 3, 4 дубли - оставить только первый |
отлично все вышло
<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>
если можно сделайте правку в этом коде, что бы выводило маркеры с кластеризацией! |
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>
|
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 Все работает:victory: |
Спасибо конечно, но если честно я ничего не понял!
где этот markerclusterer.js так и не нашел в корне сайта нет папки (scripts) я взял markerclusterer.js отсюда - https://code.google.com/p/google-map...terer.js?r=360 положил в папку с моим скриптом то что вы правили добавил <script src="markerclusterer.js"></script> то не работает кластеризация вообще! может я не так делаю, если вы сделали и у вас работает, можете скинуть архив? |
также подключал и эту библиотеку https://github.com/googlemaps/js-mar...erclusterer.js
но толку нет! |
sergofedor06,
Цитата:
В папку scripts я положил его на своем сайте, поэтому и добавил загрузку <script src="scripts/markerclusterer.js"></script> Цитата:
Картинки для markerclusterer разместили на своем сайте в корневой папке в папке image? Цитата:
Посмотрите сообщения в консоли браузера. |
В том, что работает, можете убедиться
http://dilettante.usite.pro/index/maps/0-5 |
Спасибо большое!
С примером все гуд, есть только не ясность именно с директорией с картинками кластеров! путь к директории должен быть абсолютным в виде ссылки как у вас там ссылка прописана до папки с фото 5 кластеров? я прописал относительный путь, вида MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 'images'; и сложил 5 картинок в папку (images) но в таком варианте картинки кластеров не подгружает че-то! в чем проблема не в курсе, или только нужно указывать прямую ссылку на парку с кластерами |
Опачки, у меня по ссылке не подгружает картинки кластеров
скачал с гитхаба картинки 5 шт, с именами m1.png m2.png m3.png m4.png m5.png положил в директорию (images) путь прописал MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 'http://moidomen.ru/images'; что не так? возможно картинки должны иметь другое название? скиньте пожалуйста содержимое http://dilettante.usite.pro/images/m |
sergofedor06,
я же вам писал: 190 MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 191 'https://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/' + 192 'images/m'; - удалить строку 191 В результате получается: MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 'images/m'; т.е. папка images, в ней лежат перечисленные вами файлы картинок m используется библиотекой как начало имени файла картинки |
вы наверное не поняли, на этот раз я взял ваш скрипт и библиотеку
http://dilettante.usite.pro/scripts/markerclusterer.js у вас вроде все удалено и работает я взял код из вашего примера http://dilettante.usite.pro/index/maps/0-5 все работает, только если я подменяю ваше MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 'http://dilettante.usite.pro/images/m'; на мое MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 'http://moidomen.ru/images'; то не работает, 5 картинок я скачал и положил в папку http://moidomen.ru/images вот суть вопроса в чем, те грабли что были раньше я уже прошел, в чем причина и почему не подгружает картинки кластеров вот в этом у меня вопрос? |
все с таким путем к картинкам работает
images/m спасибо! |
sergofedor06,
Повторяю еще раз: Вместо MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 'http://moidomen.ru/images'; нужно MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PAT H_ = 'http://moidomen.ru/images/m'; m используется библиотекой как начало имени файла картинки - к нему программно добавляется номер файла и расширение |
да, я прочитал и понял что вы имели ввиду, сразу не мог понять почему не работает, скажите такой вариант способен вывести к примеру 1000 меток на карте?
|
|
sergofedor06,
Вы разобрались с кластеризацией? А то у меня тоже ничего не получается:( |
<script type='text/javascript'><!--
var map;
function initialize() {
var center = new google.maps.LatLng($coordinates);
var myOptions = {
zoom: $ZoomHeaderMap,
center: center,
mapTypeId: google.maps.MapTypeId.ROADMAP,
maxZoom: 50,
scrollwheel: false
};
var map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
";
//Вывод информации из БД
$query= mysql_query("SELECT * FROM $TableNameGoogleMaps ORDER BY id");
while ($row=mysql_fetch_array($query))
{
$idMarker = $row['id'];
$transliterate_title_map = $row['transliterate_title'];
$address = $row['address'];
$img = $row['img'];
$title = $row['title'];
$info = $row['info'];
$result = mysql_query("SELECT * FROM images WHERE id='$img' ORDER BY id");
while ($myrow=mysql_fetch_array($result))
{
$ImgName = $myrow['name'];
}
$coordinates = $row['coordinates'];
$info = "<div id='infoContent'><img src='images/$ImgName' title='$address' alt='$title' width='179' height='119'><br><a href='$link_appartment$transliterate_title_map.html'>$title</a><br>$address</div>";
$result = explode(",", $coordinates);
echo "
var contentString$idMarker = \"$info\";
var infowindow$idMarker = new google.maps.InfoWindow({
content: contentString$idMarker
});
var marker$idMarker = new google.maps.Marker({
position: {lat: $result[0], lng: $result[1]},
map: map,
title: '$title',
animation: google.maps.Animation.DROP,
visible: true,
icon: \"images/beachflag.png\"
});
google.maps.event.addListener(marker$idMarker, \"click\", function() {
infowindow$idMarker.open(map,marker$idMarker);
});
";
}
echo "
}
</script>
"; Подскажите, куда что добавить чтобы работала кластеризация? |
andrey3681,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Привет!
как в ява скрипте сменить иконку самого маркера на свою собственную, сейчас по всем координатам отображает красный гугловский маркер, как мне его сменить на мою картинку маркера? помогите пожалуйста! |
sergofedor06,
пример https://developers.google.com/maps/d...-symbol-custom читать доку https://developers.google.com/maps/d...script/markers |
спасибо, сам разобрался!
|
| Часовой пояс GMT +3, время: 02:48. |