Tôi có một cơ sở dữ liệu toàn cục về các đối tượng (điểm trên bản đồ) mà tôi muốn hiển thị trên bản đồ Leaflet. Thay vì tải tất cả các cơ sở dữ liệu (đơn giản là quá lớn) cùng một lúc và tạo các đối tượng trên một Leaflet LayerGroup, có cách nào hiệu quả hơn để truy vấn dữ liệu, có lẽ vì mỗi lần tải bản đồ, hoặc tôi đang tạo ra một giải pháp tùy chỉnh cho điều này?Cách hiệu quả để truy cập các tập dữ liệu lớn để hiển thị trên Leaflet
Trả lời
Bạn có thể xem sự kiện 'moveend' trên bản đồ với map.on('moveend',loadstuff)
, thực hiện cuộc gọi ajax bên loadstuff()
để lấy dấu bên trong hiện tại map.getBounds()
, và sau đó thêm/gỡ bỏ các cột mốc (Tôi sẽ giả sử bạn có một số loại định danh toàn cầu đối với từng của họ) cho dù họ ở trong hay ngoài tầm nhìn hiện tại.
Điều này cần được đánh dấu là câu trả lời, đó là cách thích hợp để thực hiện. – Rudi
Cảm ơn bạn đã chỉ ra điều này. Tôi không phải là một người dùng SO rất tinh vi, chưa – CuNimb
@snkashis - bạn có thể cung cấp thêm một chút chi tiết về cách thực hiện việc này không? Đó là chính xác những gì tôi đang cố gắng làm, nhưng kỹ năng của tôi không quá tuyệt vời! –
Có một cách tiêu chuẩn và hiệu quả xung quanh làm những gì snkashis nói. Tạo dịch vụ geoJSON được lát gạch và sử dụng plugin leaflet-tilelayer-geojson.
Sau đó, tất cả các mã bạn sẽ cần trình duyệt bên là (từ trang Github):
var geojsonURL = 'http://polymaps.appspot.com/state/{z}/{x}/{y}.json';
var geojsonTileLayer = new L.TileLayer.GeoJSON(geojsonURL, {
clipTiles: true,
unique: function (feature) {
return feature.id;
}
}, {
style: style,
onEachFeature: function (feature, layer) {
if (feature.properties) {
var popupString = '<div class="popup">';
for (var k in feature.properties) {
var v = feature.properties[k];
popupString += k + ': ' + v + '<br />';
}
popupString += '</div>';
layer.bindPopup(popupString);
}
if (!(layer instanceof L.Point)) {
layer.on('mouseover', function() {
layer.setStyle(hoverStyle);
});
layer.on('mouseout', function() {
layer.setStyle(style);
});
}
}
}
);
map.addLayer(geojsonTileLayer);
- 1. Di chuyển một cách hiệu quả các tập dữ liệu lớn giữa các bảng SQL Server?
- 2. Cách hiệu quả để kiểm tra sự tồn tại trong một tập hợp lớn các chuỗi
- 3. C# Tập dữ liệu để truy cập DB
- 4. Cách hiển thị dữ liệu trong datagridview từ cơ sở dữ liệu truy cập
- 5. Cách hiệu quả nhất để xuất dữ liệu lớn (3.9 mill obs) thành tệp văn bản?
- 6. CASE và nhiều truy vấn UPDATE cho các tập dữ liệu lớn - Hiệu suất
- 7. Cách hiệu quả để tính phần trăm tương tự giữa các tập dữ liệu
- 8. Lớp mảng C++ tốt để xử lý các mảng dữ liệu lớn một cách hiệu quả và nhanh chóng?
- 9. Hiển thị dữ liệu thời gian thực hiệu suất cao
- 10. Có cách nào hiệu quả để truy vấn cơ sở dữ liệu Android nhanh hơn không?
- 11. Hiển thị hình ảnh trong Leaflet Popup
- 12. Cách truy cập trực tiếp và hiệu quả vào tệp văn bản rất lớn?
- 13. Cấu trúc dữ liệu hiệu quả để chèn
- 14. Cơ sở dữ liệu đồ thị có thể phân phối dữ liệu hiệu quả trên các nút không?
- 15. Validation ErrorTemplate không hiển thị trên các lỗi dữ liệu
- 16. Chiến lược hiệu quả Java để truy cập DB
- 17. SSRS kết quả hiển thị dữ liệu theo chiều ngang
- 18. Làm cách nào để truy cập dữ liệu trong nhiều tệp CSV lớn một cách nhanh chóng từ Perl?
- 19. Điều gì có thể được thực hiện để cải thiện hiệu năng IE8 cho các tập dữ liệu lớn?
- 20. D3 hiển thị bố cục lực chết chậm khi sử dụng tập dữ liệu lớn?
- 21. Xử lý các tập dữ liệu lớn trong Java/Clojure: dữ liệu littleBig
- 22. Làm thế nào để bạn đếm số lượng thẻ dữ liệu rất lớn một cách hiệu quả bằng Python?
- 23. Highcharts tập hợp dữ liệu lớn nhóm
- 24. Cách hiệu quả để hợp nhất 2 tệp CSS lớn
- 25. Cách hiệu quả nhất để hiển thị khung hình đã giải mã trong Qt là gì?
- 26. Làm cách nào để truy cập cơ sở dữ liệu mysql trực tuyến trên Android?
- 27. MongoDB: cách hiệu quả nhất để truy vấn một tài liệu ngẫu nhiên là gì?
- 28. Hiển thị các loại cột kết quả truy vấn (PostgreSQL)
- 29. Hiệu quả 2D FFT trên dữ liệu đầu vào thực?
- 30. Làm thế nào để tìm kiếm hiệu quả CGRects cho các từ hiển thị trong UITextView?
Làm thế nào để bạn phục vụ bản đồ? Tôi hy vọng máy chủ có một phương thức có thể được truy vấn bằng cách sử dụng một hộp giới hạn. Hoặc tùy thuộc vào số lượng các đối tượng, bạn có lẽ có thể sử dụng markerclusters. Ví dụ của họ có [một bản đồ hiển thị 50000 mục] (http://leaflet.github.com/Leaflet.markercluster/example/marker-clustering-realworld.50000.html). – flup
Tôi không muốn sử dụng các điểm đánh dấu, vì tôi muốn hiển thị mọi điểm đánh dấu hiển thị thay vì tổng hợp. Những gì tôi đang cố gắng để quyết định là chính xác như thế nào tôi nên phục vụ bản đồ của tôi. Vì điều này được di chuyển hoặc phóng to, có thể sẽ không có ý nghĩa nhiều khi truy vấn máy chủ mỗi lần theo hộp giới hạn mới (có thể chồng lên nhau một phần cũ). Tôi có thể hình dung một vài cách để làm điều này, nhưng trước khi tôi phát minh lại bánh xe, tôi muốn đảm bảo rằng không có giải pháp tốt cho điều này đã được – CuNimb
Vâng, tại một số thời điểm, khi bạn thu nhỏ toàn bộ thế giới, ' d có nghĩa là hiển thị từng điểm đánh dấu. Vì vậy, sau đó phân cụm có ý nghĩa. Hoặc bạn sẽ không hiển thị điểm đánh dấu nào dưới một số mức thu phóng tối thiểu? Bạn có bao nhiêu điểm đánh dấu? – flup