2012-03-11 39 views
8

Tôi có một lỗi thực sự lạ khiến cho trình duyệt của tôi bị đóng băng khi tôi cố định lại kích thước bản đồ cho phù hợp với các điểm đánh dấu mà tôi đã đặt trên đó.map.fitBounds (bounds) khiến trình duyệt đóng băng

đang thay đổi kích thước của tôi để tham khảo:

function sizeMap() { 
      // create a new bounds object to define the new boundry 
      var bounds = new google.maps.LatLngBounds(); 
      // loop through each the string latlang values held in the latlng 
      // aray 
      for (var i = 0; i <latlngArray.length ; i++) { 
       // create a new LatLng object based on the string value 
       var tempLatLng = new google.maps.LatLng(latlngArray[i]); 
       // extend the latlng bounds based on the new location 
       bounds.extend(tempLatLng); 
      } 
      // map.fitBounds(bounds); <== everything seems to work fine until this line is uncommented 
     } 

Vấn đề là tôi không thể gỡ lỗi nó đúng cách sử dụng firebug vì đó đóng băng đến! Bất kỳ ai có bất kỳ ý tưởng nào về vấn đề có thể là gì?

Xin cảm ơn trước.

Cập nhật:

Trong câu trả lời cho câu hỏi puckheads mã sau đây cho thấy nơi các mảng latlng là dân cư để bắt đầu với:

function geocodeAddress (address) { 

      var geocoder = new google.maps.Geocoder(); 
      geocoder.geocode({'address': address}, function(results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
        loadMarker(results[0].geometry.location,"Info here",address); 
        latlngArray.push(results[0].geometry.location); <== latlngs are first added here they are as a result of a call to the google geocode service with a standard string address. 
       } else { 
        alert("Geocode was not successful for the following reason: " +" "+ status); 
       } 
      }); 
     } 
+1

Bạn đã giải được câu hỏi chưa? - nếu vậy bạn nên chấp nhận hoặc viết câu trả lời đúng của riêng bạn! – levi

+0

Bạn đã thử với Chrome và bảng điều khiển javascript chưa? – MrUpsidown

Trả lời

-1

Bạn không tạo ra một LatLng mới từ một chuỗi. Nó được tạo ra từ 2 số, mặc dù nó xuất hiện 2 chuỗi cũng sẽ hoạt động, một cho vĩ độ và một cho kinh độ. Một chuỗi sẽ không hoạt động.

Vì vậy, bạn có thể nói new google.maps.LatLng(-25.363882, 131.044922) hoặc thậm chí new google.maps.LatLng('-25.363882', '131.044922') nhưng không phải new google.maps.LatLng('-25.363882, 131.044922') Vì vậy, bạn cần phải chuyển 2 giá trị riêng biệt sang google.maps.LatLng mới nhưng có vẻ như bạn chỉ đang chuyển một.

http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng

+0

Tôi đã thử đề xuất Marks và kết quả là như nhau, Ive cũng đã thử chuyển đổi hai chuỗi kết quả thành float bằng cách sử dụng parseFloat() và vẫn không có niềm vui. – user1079178

+1

Bạn có thể cung cấp ví dụ về những gì có trong latLngArray không? – puckhead

0

Theo như tôi biết, bạn không thể tạo một đối tượng LatLng từ một tham số chuỗi duy nhất. Nếu bạn có một chuỗi trong dạng "lat, lng", sau đó tách chúng ra xa nhau trước khi tạo đối tượng LatLng. Bên trong vòng lặp của bạn sẽ trông giống như sau:

 var tempLatLng = latlngArray[i].split(','); 
     bounds.extend(new google.maps.LatLng(tempLatLng[0], tempLatLng[1])); 
+0

Mảng của anh ta đã chứa các đối tượng LatLng. Không phải chuỗi. – MrUpsidown

-1

Dựa trên mã được cập nhật của bạn, bạn không cần phải tạo tempLatLng. mảng của bạn đã chứa các đối tượng LatLng vì vậy bạn nên có thể nói bounds.extend(latlngArray[i]) trong vòng lặp for ...

+0

Tryied đề xuất của bạn và tập trung is'nt được thiết lập nhưng nó đã ngừng đóng băng nhờ puckhead, ít nhất tôi có thể gỡ lỗi nó ngay bây giờ. – user1079178

+0

Ý bạn là gì khi tiêu điểm không được đặt? Vấn đề được đề cập có được giải quyết không? – puckhead

+0

Rất tiếc, có lẽ tôi không giải thích được bản thân mình, điều tôi muốn nói là trình duyệt không còn đóng băng nữa nhưng cổng xem không thay đổi kích thước của các điểm đánh dấu như nó cần. – user1079178

-1

Sử dụng Timer:

var Timer=""; 
    $(window).resize(function() { 
     clearInterval(Timer); 
     run_timer(); 
    }); 
    function run_timer() { 
     Timer = setInterval(function(){sizeMap();}, 1500); 
    } 
    function sizeMap() { 
     clearInterval(Timer); 
     // create a new bounds object to define the new boundry 
     var bounds = new google.maps.LatLngBounds(); 
     // loop through each the string latlang values held in the latlng 
     // aray 
     for (var i = 0; i <latlngArray.length ; i++) { 
      // create a new LatLng object based on the string value 
      var tempLatLng = new google.maps.LatLng(latlngArray[i]); 
      // extend the latlng bounds based on the new location 
      bounds.extend(tempLatLng); 
     } 
     // map.fitBounds(bounds); <== everything seems to work fine until this line is uncommented 
    } 
4

Vấn đề là như những người khác đã đề cập, bạn nên cố gắng để tạo ra một LatLng đối tượng với đối tượng LatLng khác làm đối số. Nó chỉ chấp nhận 2 hoặc 3 đối số, trong đó hai số đầu tiên là số. https://developers.google.com/maps/documentation/javascript/reference#LatLng

Tuy nhiên bạn hoàn toàn có thể bỏ qua phần nơi bạn tạo đối tượng LatLng mới và sử dụng đối tượng hiện tại từ mảng của bạn bên trong vòng lặp.

này sửa chữa các vấn đề: http://jsfiddle.net/y9ze8a1f/1/

function sizeMap() { 
    // create a new bounds object to define the new boundry 
    var bounds = new google.maps.LatLngBounds(); 
    // loop through each the string latlang values held in the latlng 
    // aray 
    for (var i = 0; i <latlngArray.length ; i++) { 
     // This is causing the issue, you can only create a LatLng with two separate latitude and longitude arguments 
     //var tempLatLng = new google.maps.LatLng(latlngArray[i]); 

     bounds.extend(latlngArray[i]); 
    } 
    map.fitBounds(bounds); 
} 

Nếu bạn muốn tạo một LatLng mới dựa trên cái cũ tuy nhiên, bạn có thể làm điều đó bằng cách sử dụng các phương pháp LatLng lat()lng()

http://jsfiddle.net/q7sh4put/

function sizeMap() { 
    // create a new bounds object to define the new boundry 
    var bounds = new google.maps.LatLngBounds(); 
    // loop through each the string latlang values held in the latlng 
    // aray 
    for (var i = 0; i <latlngArray.length ; i++) { 
     // create a new LatLng object based on the string value 
     var tempLatLng = new google.maps.LatLng(latlngArray[i].lat(), latlngArray[i].lng()); 

     // extend the latlng bounds based on the new location 
     bounds.extend(tempLatLng); 
    } 
    map.fitBounds(bounds); 
} 
+0

Nhưng ở đây vấn đề chính là "nó đang làm trình duyệt đóng băng". Và đó là vì kịch bản đã chạy dài trong chu kỳ ... Tôi đã đánh dấu nó bằng chữ in đậm, để thấy nó tốt hơn. – Legionar

+1

Tôi biết, và lý do cho việc đóng băng đó là số lần gọi tối đa đã đạt đến nhiều lần, đến từ việc khởi tạo ´google.maps.LatLng´ với đối số sai. Vì vậy, mã thực tế đã thực hiện điều này xảy ra là bên trong mã của Google, nhưng được gây ra bởi mã gọi nó. (Mã ban đầu của bạn nơi đạt được callstack: http://jsfiddle.net/y9ze8a1f/2/) – thebreiflabb

+0

ok, cảm ơn ... – Legionar

Các vấn đề liên quan