Google maps V3 Маркеры показаны только в FF - PullRequest
1 голос
/ 26 февраля 2012

Здравствуйте, у меня есть этот код Gmap v3, который показывает несколько маркеров (20 маркеров) только в Firefox и через некоторое время не сразу.

    var geocoder;
var map;
//var map2;
var places = [];
var popup_price = [];
var popup_rooms = [];
var popup_area = [];
var popup_pic = [];
var popup_description = [];


var address = [];
var address_position = 0;

var timeout = 600;


var myStyles =[
    {
        featureType: "transit",
        elementType: "label",
        stylers: [
              { visibility: "on" }
        ]
    }
];
function initialize() {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(42.36741824284927, -71.071085890625);
    var myOptions = {
      zoom: 10,
      center: latlng,
      mapTypeId: 'roadmap',
      streetViewControl: false,
      styles: myStyles 
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    addMarker(address_position);
}



function addMarker(position)
{
    geocoder.geocode({'address': address[position]}, function(results, status)
    {
        if (status == google.maps.GeocoderStatus.OK) {
         if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
            places[position] = results[0].geometry.location;
            //map.addOverlay(new MarkerLight(latlng, {image: "red_dot.png"})); if slow actual implemetation then follow http://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google-maps/
            var marker = new google.maps.Marker({
                position: places[position],
                //content:html,
                map: map


            });


            // Creating an InfoWindow object
        var infowindow = new google.maps.InfoWindow({        
           content: '<div style="font-family:arial;font-size:11px;color:#333333;"><div style=float:left;width:83px;><img src=/listings/'+popup_pic[position]+'.jpg.rbm?w=80&h=80&f=cover > </div><div style=float:left;width:205px;text-align:justify;padding:5px;><strong>$'+popup_price[position] +'<br>'+popup_rooms[position]+'</strong><br>'+popup_area[position]+'<br>'+popup_description[position]+'...</div><div style="float:left;width:96px;"><img src="/upload/custom_screens/rb/viewBtnMap.gif" class="imgPopup"><img src="/upload/custom_screens/rb/saveBtnMap.gif" class="imgPopup"><img src="/upload/custom_screens/rb/reqBtnMap.gif" class="imgPopup"></div></div>',
          maxWidth: 400
        });
            google.maps.event.addListener(marker, 'click', function() 
            {
                infowindow.open(map, marker);
            });
            //infowindow.open(map,marker);

google.maps.event.addListener(map, 'zoom_changed', function() {
    zoomLevel = map.getZoom();

    if (zoomLevel >= 16) 
    {

        marker.setVisible(false);

        var circleOptions = 
        {
          strokeColor: "#c4c4c4",
          strokeOpacity: 0.35,
          strokeWeight: 0,
          fillColor: "#ca0d33",
          fillOpacity: 0.1,
          map: map,
          center: results[0].geometry.location,
          radius: 50
        };

        //add draw circle
         var circle = new google.maps.Circle(circleOptions);


        circle.bindTo('center', marker, 'position');



    }
    else
    {
    //circle.setMap(null);
    marker.setVisible(true);

    }
});

        }
        }
        else
        {
            if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
            {
                setTimeout(function() { addMarker(position); }, (timeout * 3));
            }
        }
        address_position++;
        if (address_position < address.length)
        {
            setTimeout(function() { addMarker(address_position); }, (timeout));
        }
    });

}

Как я могу улучшить скорость и заставить их работать в IE и Chrome? Я не получаю никакой ошибки в консоли.

спасибо

1 Ответ

1 голос
/ 26 февраля 2012

Прямо сейчас на вашей карте нет никаких маркеров для меня, потому что адрес пуст. Я тестировал его с некоторыми значениями:

var address = ['Brookline','Wayland','Bedford'];

... и все 3 маркера появляются в IE, Chrome, FF & Opera.

Однако основная проблема заключается в том, что вы используете адреса, а не LatLng, потому что адреса сначала должны запрашиваться геокодированием, чтобы получить LatLng, кроме того, адреса не уникальны, вы можете получать изменяющиеся результаты (например, может случиться, что результат возвращает местоположение в другом месте за пределами области просмотра, где вы его не узнали).

Так что, если адреса известны в вашем приложении, вам лучше хранить LatLng-ы этих адресов и показывать маркеры, основанные на этих позициях (также должно быть быстрее, потому что вам не нужно геокодирование)

...