API Google Maps Javascript: несколько маркеров в одном месте из-за «вспомогательных магазинов» - PullRequest
2 голосов
/ 25 сентября 2011

Я создаю сайт, который использует этот API для поиска определенных магазинов. Одним из них является цель. Проблема состоит в том, что мои поиски обычно возвращают от 2 до 3 маркеров в местах, где отображаются «Цель», «Целевая оптика» и «Целевая аптека». Кто-нибудь знает, как сделать так, чтобы он показывал только основной маркер "Target"?

Просто для справки вот мой код:

<script type="text/javascript">
var geocoder;
var map;
var service;
var infowindow;
var markers = new Array();
function initialize() {
    var latlng = new google.maps.LatLng(<?=$lat ?>, <?=$long ?>);
    infowindow = new google.maps.InfoWindow();
    var myOptions = {
        zoom: 8,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var request = {
        location: latlng,
        radius: '22000',
        types: ['store'],
        name: 'Target'
    };
    service = new google.maps.places.PlacesService(map);
    service.search(request, callback);

}

function callback(results, status) {
    if (status == google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
            var place=results[i];
            var marker = new google.maps.Marker({
                map: map,
                position: results[i].geometry.location
            });
            markers[i] = marker;
            markers[i].reference = place.reference; 
        }
        //alert(markers.length);
    }
    for(j=0;j<markers.length;j++){
        google.maps.event.addListener(markers[j],'click',function(){
                var me = this;
                var request={reference:this.reference};
                service.getDetails(request,function(newplace,status){
                    var myContent = "<h3>" + newplace.name + "</h3>" + newplace.formatted_address;
                    infowindow.setContent(myContent);
                    infowindow.open(map,me);
                });
        });

    }
}

1 Ответ

0 голосов
/ 25 сентября 2011

Полагаю, вам стоит взглянуть на кластеризацию карт, чтобы выполнить работу.Вот несколько ссылок, которые помогут вам достичь этого:

http://www.appelsiini.net/2008/11/introduction-to-marker-clustering-with-google-maps или

http://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google-maps/

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...