Google maps api v2 - как обрабатывать 200-300 сотен маркеров - PullRequest
0 голосов
/ 23 августа 2011

Привет, у меня довольно большой скрипт, поэтому я не буду публиковать все это здесь, но мне действительно нужна помощь, не знаю, что делать дальше ...

У меня ~ 300 маркеров на картах, и все онизагружаются в то же время, и Google не может обработать, или мой сценарий не может обработать, но я получаю «Адрес не может быть найден» в половине из них, возможно, даже больше (другие загружаются правильно).Но если я удаляю все, кроме этого, все работает как следует!

Что делать?Есть ли способ загрузить их немного за раз шаг за шагом, или есть много обработчиков маркеров или т. Д.?(не markersManager, их нужно видеть на всех уровнях масштабирования)

Попытка с таймаутом не помогла!

Часть кода:

function initHeadAddress(searchString) {
 if(searchString == 'undefined') {
   map.clearOverlays(); 
   var t = setTimeout("showAddress('Himmelev Bygade 78 B, 4000 Roskilde, Denmark',1,'3T Bygningsentreprise A/S','4000','Roskilde','46328328','null','www.3t.dk',null,null)",1000);
   var t = setTimeout("showAddress('Nørre Allé 51, 7760 Hurup, Denmark',4,'Idealcombi','7760','Hurup','96882500','null','http://www.idealcombi.dk/',null,null)",1000);
    ..... A LOT OF THESE HERE MORE !!!!

   // default one
   showAddress('Denmark', 0, null, null,null,null,null,null,null,searchString);
    } else {
   // if used search function
    showAddress(searchString, 0, null, null,null,null,null,null,null,searchString);
    }
}

ShowAddressфункция:

function showAddress(address, markerType, companyname,postnr, by, phone, fax, web, email, searchString) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              //alert("Adresse " +address+ " blev ikke fundet");
              console.log("Adresse " +address+ " blev ikke fundet");
            } else {            
                var myIcon = new GIcon(G_DEFAULT_ICON);
                myIcon.shadow = null;
                myIcon.infoWindowAnchor = new GPoint(9, 2)

                if (markerType == '0') {
                    myIcon.image = '/files/billeder/../Templates/Designs/Ideal2011/images/Map/googleempty.png';
                    myIcon.iconSize = new GSize(18, 18);    
                }
                if (markerType == '1') {
                    myIcon.image = '/files/billeder/../Templates/Designs/Ideal2011/images/Map/googlered.png';
                    myIcon.iconSize = new GSize(18, 18);


                    $('#dotRedCheckbox').click(
                        function(){
                            if(!$(this).hasClass('activeMarker')){
                                marker.hide();
                            } else {
                                marker.show();
                            }
                        }
                    );
                }
                else if (markerType == '2') {
                    myIcon.image = '/files/billeder/../Templates/Designs/Ideal2011/images/Map/googlelblue.png';
                    myIcon.iconSize = new GSize(18, 18);

                    $('#dotlBlueCheckbox').click(
                        function(){
                            if(!$(this).hasClass('activeMarker')){
                                marker.hide();
                            } else {
                                marker.show();
                            }
                        }
                    );
                }
                else if (markerType == '3') {
                    myIcon.image = '/files/billeder/../Templates/Designs/Ideal2011/images/Map/googledblue.png';
                    myIcon.iconSize = new GSize(18 , 18);

                    $('#dotdBlueCheckbox').click(
                        function(){
                            if(!$(this).hasClass('activeMarker')){
                                marker.hide();
                            } else {
                                marker.show();
                            }
                        }
                    );
                }
                else if (markerType == '4') {
                    myIcon.image = '/files/billeder/../Templates/Designs/Ideal2011/images/Map/googlegreen.png';
                    myIcon.iconSize = new GSize(18, 18);

                    $('#dotGreenCheckbox').click(
                        function(){
                            if(!$(this).hasClass('activeMarker')){
                                marker.hide();
                            } else {
                                marker.show();
                            }
                        }
                    );
                }
                var markerOptions = { icon: myIcon };
                var marker = new GMarker(point, markerOptions);

                marker.getPoint();

                if(markerType != 0){        
                    points.push(point);
                    markers.push(marker);       
                }

                if (markerType == 0) {
                    if(searchString == 'undefined'){
                        map.setCenter(point, 6);
                    } else {
                        map.setCenter(point, 13);

                        LatD = point.lat().toFixed(5);
                        LngD = point.lng().toFixed(5);

                        find_closest_marker(LatD, LngD);
                        find_closest_marker2(LatD, LngD);
                        find_closest_marker3(LatD, LngD);
                    }
                } 

                Lat = point.lat().toFixed(5);
                Lng = point.lng().toFixed(5);


                var image = '<img src="http://cbk0.google.com/cbk?output=thumbnail&w=85&h=70&ll='+Lat+','+Lng+'" />'; // alt="'+address+'"

                map.addOverlay(marker);

                if(markerType != 0) {

                    if(fax != "" && fax != null && fax != 'null'){
                        var newfax = "Mob.: "+fax+"<br/>";
                    } else {
                        var newfax = "";    
                    };
                    if(web != "" && web != null && web != 'null'){
                        var newweb = "<a href='"+web+"'>"+web+"</a><br/>";
                    } else {
                        var newweb = "";    
                    };
                    if(postnr != "" && postnr != null && postnr != 'null'){
                        var newpostnr = postnr;
                    } else {
                        var newpostnr = ""; 
                    };
                    if(phone != "" && phone != null && phone != 'null'){
                        var newphone = phone;
                    } else {
                        var newphone = "";  
                    };

                    //address = address.replace("Denmark, ","");
                    //address = address.replace(", Denmark","");
                    //address = address.replace(", 2650 Hvidovre","");
                    //address = address.replace(", Hurup","");
                    //address = address.replace("UK, ","");
                    address2 = address.split(',');
                    address = address2[0];

                    var infoboxInfo = '<div class="infoboxall"><div class="infoboxinfo"><div class="infoboxAddress">'+companyname +"</div>"+ address + '<br/>' + newpostnr + " " + by+ "<br/>" + "Tlf.: " + newphone + "<br/>" + newfax + newweb+"<a href='mailto:"+email+"'>"+email+"</a>"+'</div>' + image+'</div>';
                    //marker.openInfoWindowHtml(address);
                    //GEvent.addListener(marker, 'click',marker.openInfoWindowHtml(address));
                    GEvent.addListener(marker, "click", function()
                    {marker.openInfoWindowHtml(infoboxInfo);});

                    marker.markerType = markerType;
                    marker.title = companyname;
                    marker.address = address;
                    marker.postby = newpostnr+ " " + by;
                    marker.phone = newphone;
                    marker.fax = newfax;
                    marker.web = newweb;
                    marker.email = email;

                }

            }
          }
        );
      }
    }

Кто-нибудь есть идеи?Как я сказал, скрипт работает как должен, если есть 5 маркеров или около того ... но показывает только некоторые из них, когда все вставлены?Идеи?

Ответы [ 2 ]

0 голосов
/ 23 августа 2011

Согласно Google , версия 2 API устарела, и вы должны начать использовать версию 3. Один большой плюс заключается в том, что вам больше не нужен специфичный для домена «ключ API», фактически вы для версии 3 вообще не нужен ключ API.

Я думаю, что это проще и чище, чем версия 2. Если вы знакомы с плагинами jQuery и jQuery, то вам действительно понравится использование Map API версии 3.

0 голосов
/ 23 августа 2011

Да, вы можете сделать это, как я это делал в предыдущем проекте , где маркеры загружаются из базы данных (я использую API v3 в этом проекте, но концепция та же).Поскольку API принимает одновременно 5 запросов с одного и того же IP-адреса, я создал «очередь маркеров».Когда маркер не может быть помещен, потому что API возвращает ошибку, я помещаю его в очередь, и каждую секунду или около того я пытаюсь добавить следующий маркер из очереди, пока очередь не станет пустой.

Просто проверьтеисточник "gmaps3.js" в предыдущей ссылке, чтобы увидеть, как я это сделал.Если у вас есть еще вопросы, дайте мне знать.

...