16

Tôi đang xây dựng một ứng dụng web với API Google Maps, tôi cần phải phóng to một khu vực một cách trơn tru, vì vậy tôi sử dụng setTimeout để tăng mức thu phóng mỗi giây, nhưng ở một số nơi có mạng kém, hình ảnh bản đồ được tải quá chậm rằng trang này một cách nhanh chóng chuyển sang một trang trắng ....Làm cách nào để tải trước một số phần của bản đồ google?

vì vậy câu hỏi của tôi là là nó có thể tải trước một số phần của Google Maps (zoom 3-16 của một điểm)

+0

Tôi gặp sự cố tương tự. Bạn muốn thực hiện thay đổi mức thu phóng mượt mà hơn ... – Flaudre

+1

@Flaudre bạn đã thử giải pháp của RASG chưa? – wong2

+1

Có thể phóng to chậm không phải là trải nghiệm người dùng tốt nhất cho người dùng trên kết nối chậm? Ngay cả khi bạn tải trước tất cả dữ liệu, họ sẽ phải đợi rất nhiều hình ảnh để tải tại một số điểm – dpix

Trả lời

12

có lẽ bạn có thể trước tải nó trong div hoặc iframe ẩn.

nhưng bạn nên chắc chắn rằng nó không phải là chống lại Google Maps/Google Earth APIs Terms of Service

10.1.3 Hạn chế đối với dữ liệu xuất khẩu hoặc sao chép.

(b) Không tìm nạp trước, lưu vào bộ nhớ cache hoặc lưu trữ nội dung. Bạn không được tìm nạp trước, bộ nhớ cache hoặc lưu trữ bất kỳ Nội dung nào, ngoại trừ việc bạn có thể lưu trữ: (i) giới hạn lượng nội dung nhằm cải thiện hiệu suất của Triển khai API Maps của bạn nếu bạn tạm thời, an toàn, và theo cách không cho phép sử dụng Nội dung bên ngoài Dịch vụ ; và (ii) bất kỳ mã nhận diện hoặc khóa nội dung nào mà API Maps Tài liệu đặc biệt cho phép bạn lưu trữ. Ví dụ, bạn phải không sử dụng các nội dung để tạo ra một cơ sở dữ liệu độc lập với “nơi”.

+1

tuyệt vời. một downvote mà không có bất kỳ lời giải thích. – RASG

+0

Đọc rằng có vẻ như đã sẵn sàng tải trước để cải thiện hiệu suất. – dalore

+0

Có vẻ như ToS không chống lại giải pháp được cung cấp của @RASG. Vì vậy, đi với nó & đừng lo lắng! Dude, chúng tôi trở lại bạn trong bất kỳ tòa án! – NDFA

4

Hãy một số mã

Tôi vừa mới tạo ra một kịch bản dựa trên 5 tuổi ý tưởng của RASG. Hãy tạo một bản đồ ẩn và khi nó được nạp đầy đủ, hãy phóng to nó. Chúng tôi lặp lại nó cho đến khi nó lưu trữ tất cả các zoom. Làm việc fiddle is here. Tôi đã đặt thông tin div ở góc trên cùng bên phải để xem cách tiến trình thu phóng.

// init the hidden map 
var mapOptions = { 
    center: new google.maps.LatLng(center.lat, center.lng), 
    zoom: minZoom + 1 
}; 
var preMap = new google.maps.Map(document.getElementById('map-canvas-hidden'), mapOptions); 

// when the current hidden map is fully loaded, zoom it in 
preMap.addListener('tilesloaded', function() { 
    $('#out').html('Zoom ' + preMap.getZoom() + ' preloaded'); 

    // if there is zoom to zoom-in, do it after some rest 
    if(preMap.getZoom() < maxZoom) { 
    setTimeout(function(){ 
     preMap.setZoom(preMap.getZoom() + 1); 
    }, 50); 
    } 
}); 

Thực sự có lưu vào bản đồ không?

Vâng, hãy xóa bộ nhớ cache của trình duyệt và mở fiddle.

enter image description here

Trong hoạt động mạng trình duyệt, chúng ta có thể thấy nhiều hình ảnh tải xuống. Sau đó, phóng to bản đồ và xem lại hoạt động. Có vẻ như tất cả các hình ảnh được tải từ bộ nhớ cache.

enter image description here

Hy vọng điều đó sẽ hữu ích.

+0

Bạn có thể tính toán tốc độ thu phóng chậm của mình theo thời gian hai bộ đệm đầu tiên nhận được. –

+0

rất đẹp! 1 để có được bàn tay của bạn bẩn :) – RASG

+0

Hey ivan, cảm ơn rất nhiều cho các nỗ lực. Tôi đã kiểm tra trang quá muộn để thưởng một số tiền thưởng. Tôi hy vọng bạn không sao với một upvote chỉ. – Flaudre

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