Trực quan hóa bộ dữ liệu lớn với Tờ rơi


35

Khi sử dụng Leaflet để trực quan hóa một tập dữ liệu lớn (GeoJSON với các tính năng 10.000 điểm), không ngạc nhiên khi trình duyệt gặp sự cố hoặc treo. Một mẫu con gồm 1000 tính năng từ cùng một bộ dữ liệu hoạt động hoàn hảo. Thật không may, tôi không thể chia sẻ dữ liệu cho người khác dùng thử.

Có ai có giải pháp tốt hơn để hình dung các bộ dữ liệu lớn như vậy? (mục đích cuối cùng là mở rộng quy mô này lên 2 triệu tính năng) Tôi thậm chí sẵn sàng xem xét các khung hình ảnh ngoại tuyến trong trường hợp các lựa chọn thay thế dựa trên trình duyệt như Polymaps hoặc d3.js, v.v.

Chỉnh sửa: Quên đề cập, người dùng cần có thể lọc bộ dữ liệu theo thuộc tính. Vì vậy, trong số các tính năng N , chỉ các tính năng n <= N phù hợp có thể cần được hiển thị động.


3
Các cuộc thảo luận tương tự: gis.stackexchange.com/questions / 4096 / gis.stackexchange.com/questions/14882 gis.stackexchange.com/questions/6954
julien

Câu trả lời:


23

Tôi là tác giả tờ rơi. Có một plugin phân cụm tuyệt vời cho cái này, Leaflet.markercluster . Nó rất nhanh và hiệu quả (hãy xem ví dụ đánh dấu 50k), ngoại hình và hoạt động rất mượt mà với hình ảnh động đẹp và có nhiều tùy chọn phù hợp với nhu cầu của bạn.


3
Cũng có PruneClustervẻ đầy hứa hẹn.
TLama

1
Tôi muốn mở rộng câu hỏi ban đầu. Tôi cần phải làm một cái gì đó như thế này: matall.in/posts/deep-insights-visualizing-1m-flight-routes Làm cách nào tôi có thể phân cụm các đường dẫn trong phần đánh dấu?
guilhermecss

16

Bạn có thể sử dụng TileMill và kết xuất các điểm dưới dạng hình ảnh raster, với khả năng tương tác nhanh từ UTFGrid . Nó chia tỷ lệ lên hàng triệu điểm và đa giác, như bản đồ điều tra dân số này , vì nó chỉ gửi thông minh dữ liệu cần thiết cho các khu vực cụ thể, chính xác khi cần thiết.

Theo tôi biết, không có phương pháp nhanh nào khác để thực hiện việc này ngoài việc có một máy chủ WFS rất nhanh, khá khó để duy trì / mở rộng quy mô cho nhiều người xem.

Tiết lộ: làm việc cho MapBox , đã viết khá nhiều mã. Nhưng TileMill là mã nguồn mở / miễn phí, v.v.


1
Tôi quên đề cập đến việc người dùng sẽ có thể lọc tập dữ liệu theo các thuộc tính và chỉ hiển thị các bản ghi khớp. Vì vậy, giả sử trong số 10.000 hồ sơ, chỉ 500 thực sự có thể cần được hiển thị cho một trường hợp cụ thể. Tôi có thể (hoặc làm thế nào) tôi có thể làm điều này với TileMill không?
Imad

3
Không. Bạn có thể muốn dùng thử CartoDB , nhưng bạn nên biết rằng làm cho mọi thứ trở nên năng động và khiến mọi thứ trở nên hiệu quả là những mục tiêu trái ngược nhau.
tmcw

1
liên kết bản đồ điều tra dân số đã chết!
drho

Tất cả các liên kết được daed.
LeeGee

9

Bạn đã nhìn vào cụm sao tờ rơi? Một bài đăng trên blog của tác giả mô tả nó ở đây

Một lựa chọn khác đáng xem có thể là sử dụng tờ rơi kết hợp với Đám mây GIS . Hãy xem bản demo này để thấy nó xử lý rất nhiều hình học rất nhanh. Rất ấn tượng. Tôi không có cách nào liên kết với GISCloud.


7

Bạn không bao giờ nên hiển thị hàng triệu điểm trên bản đồ. Không chỉ vì các vấn đề hiệu suất lớn, mà còn từ quan điểm của người dùng bởi vì đối với họ, chắc chắn sẽ rất khó để giải thích dữ liệu này. Sử dụng một số phương tiện tổng hợp dữ liệu (phân cụm, tổng hợp thành các khu vực đa giác, v.v.) kết hợp với các loại hiển thị khác nhau ở các mức thu phóng khác nhau (ví dụ: chỉ hiển thị dữ liệu điểm "thô" ở các mức thu phóng rất cao và sử dụng dữ liệu tổng hợp ở mọi nơi khác). Một ví dụ sẽ là một trang web bất động sản như zvel.com .


8
Bạn không bao giờ nên nói "bạn không bao giờ nên". Người dân địa phương & khách du lịch là một ví dụ tuyệt vời về loại hiểu biết mà hình dung hàng triệu (hoặc hàng tỷ trong trường hợp này) điểm có thể cung cấp.
Joseph Sheedy

1
Đồng ý w / @velotron, ví dụ sáu triệu điểm được hiển thị đẹp mắt và nhanh chóng: mapbox.com/blog/supercluster
Max von Hippel

1
Vâng, nhưng trong trường hợp này, các điểm đó cũng được phân cụm (tùy thuộc vào mức thu phóng), làm cho nó rất dễ dàng để giải thích và hiểu dữ liệu.
chriserik

2
@chriserik đúng, vì vậy câu trả lời đúng sẽ là "bạn nên sử dụng bản đồ phân cụm hoặc bản đồ nhiệt nếu bạn có nhiều điểm đó, và đây là cách để làm điều đó ..."
Max von Hippel

3
Quan điểm của tôi là những mảnh đất chưa được bao gồm hàng triệu điểm có thể cung cấp cái nhìn sâu sắc.
Joseph Sheedy

0

Tôi đề nghị bạn giảm số lượng tính năng hiển thị: Mắt người sẽ không thể nhìn thấy 10.000 điểm, không nói về 2.000.000.

Những gì bạn có thể thử là tự động yêu cầu bộ dữ liệu từ một máy chủ tùy chỉnh (mà bạn phải thiết lập), vd

    map = ...
    map.on('moveend', function(e) {
        getGeoJson(e);
    });
    map.on('zoomend', function(e) {
        getGeoJson(e);
    });
    map.setView([2,3], 2);

    function getGeoJson(event) {
        // todo determine current viewport
        $http.get('someGeoJsonDataProvider.someLanguage?currentView=[lat0,lon0,lat1,lon1]').then(function (resp) {
            // todo clear layers
            // new layer
            map.addLayer(
                L.geoJson(resp.data)
            );
        });
    }

Sau đó, máy chủ của bạn sẽ tính toán điểm nào sẽ trả về, tùy thuộc vào những gì người dùng muốn xem ngay bây giờ. Tùy thuộc vào hệ số thu phóng và cắt, bạn sẽ chỉ cần trả lại một tỷ lệ rất nhỏ điểm mà không làm xấu đi trải nghiệm người dùng.

Nhược điểm: Thiết lập máy chủ (bạn nên tìm thư viện để lọc các điểm địa lý) & kết xuất chậm hơn (sau mỗi lần phóng to hoặc kéo, yêu cầu máy chủ cần được thực hiện)


-5

Tôi đã có các giải pháp để vạch ra 50 đến 100 triệu hồ sơ, bạn cần sử dụng các giải pháp phía máy chủ để thực hiện dựa trên lưới và động. Bạn không thể trả lời API API trên bản đồ web (Google hoặc những người khác) để thực hiện kết xuất máy khách-....

[http://96.231.36.9:8080/rbgis/google_map.html[[1] hãy thử các liên kết trên và xem cách


2
Vui lòng mở rộng câu trả lời của bạn, vì vậy nó sẽ hữu ích ngay cả khi máy chủ của bạn không thể truy cập được.
lynxlynxlynx

Vâng, đó là mỉa mai. Vì liên kết phía máy chủ của bạn không hoạt động.
Max von Hippel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.