Cách tốt nhất để làm động dữ liệu radar trong các lớp mở


9

Tôi có một dự án sử dụng OpenLayers hiển thị dữ liệu radar trên bản đồ. Bản thân dữ liệu radar chỉ là một loạt các đa giác, mỗi trong số đó chứa đầy một trong 6 màu có thể. Mục tiêu là để làm sống động radar trên bản đồ. Mỗi tệp chứa dữ liệu radar trong một thời gian nhất định và các tệp được phân tách khoảng 5 phút, vì vậy cách tiếp cận hiện tại của tôi là lặp qua tất cả các tệp và tải từng tệp một vào các lớp riêng biệt mới. Khi mỗi lớp được tạo, nó sẽ hiển thị thành sai và được thêm vào bản đồ. Sau đó, tôi làm động các lớp bằng cách sử dụng bộ đếm thời gian bật khả năng hiển thị của một lớp và tắt khả năng hiển thị của lớp trước. Hiện tại các lớp là tất cả các lớp vectơ và dữ liệu được tải từ các tệp KML mặc dù các tệp dữ liệu có thể có khá nhiều định dạng sẽ hoạt động tốt nhất cho dự án này.

Vấn đề với cách tiếp cận này là một khi tôi đạt được khoảng thời gian khá lớn (khoảng 3 giờ hoặc lâu hơn) dữ liệu (tương đương khoảng 36 lớp), mức tiêu thụ bộ nhớ sẽ khá cao (khoảng 250mb). Sản phẩm cuối cùng được cho là có thể xử lý tới 18 giờ dữ liệu trong một vòng lặp, dựa trên số lượng trên sẽ cần hơn 1GB bộ nhớ chỉ cho hoạt hình và có khả năng sẽ làm sập trình duyệt hoặc ít nhất là làm cho nó rất chậm chạp.

Tôi đã thử điều tương tự bằng cách sử dụng các lớp WMS cho mỗi lớp nhưng việc vẽ lại quá chậm (hoạt ảnh thay đổi các lớp sau mỗi 100ms) và mức tiêu thụ bộ nhớ không tốt hơn nhiều so với phiên bản vector.

Tôi đã lùng sục trên mạng cố gắng tìm một số ví dụ về cách làm điều này nhưng cho đến nay đang trở nên trắng tay. Có ai ngoài đó có bất kỳ đề nghị về cách làm điều này? Tôi sẽ có bất kỳ ý tưởng nào bạn có tại thời điểm này vì tôi đã bị mắc kẹt trong nhiều tuần nay mà không có câu trả lời nào trong tầm nhìn.

Câu trả lời:


9

Hãy thử một cửa sổ trượt của các loại. Bạn có thể đệm 10 lớp cùng một lúc. Bắt đầu phá hủy các lớp và xóa chúng khỏi DOM và bộ nhớ khi bạn đạt đến 10 lớp. Vì vậy, một khi bạn nhấn lớp 10, lớp 0-9 bị phá hủy và lớp 20-30 được tải với khả năng hiển thị thành sai. Điều này sẽ cung cấp cho bạn một bộ đệm khoảng 10 lớp nhưng bạn có thể sửa đổi dung sai của mình khi bạn thấy phù hợp với hiệu suất. Nếu bạn cảm thấy 20 lớp hoạt động tốt hơn, hãy đi với 20.

          {Destroy Layers} |10|11...19|20| {Start Loading Layers}
|---------------------------------------------------------------------------|
                           
        Timespan           Current Possition

Ngài là một thiên tài! Tôi chưa thực sự áp dụng điều này vào thực tế nhưng tôi không thấy bất kỳ lý do nào khiến nó không hoạt động và bộ đệm có thể điều chỉnh có nghĩa là chúng ta có thể tùy chỉnh thêm điều này cho các môi trường khác nhau. Tôi không thể cảm ơn bạn đủ cho đề nghị này!
TheOx

Cảm ơn, tôi hy vọng nó hoạt động trong thực tế. Cho chúng tôi biết mọi thứ diễn ra thế nào.
CaptDragon

Chỉ cần hoàn thành thử nghiệm ban đầu và nó đang hoạt động tốt! Vẫn còn một số chỗ để tối ưu hóa mã nhưng phương pháp này giúp giảm dung lượng bộ nhớ và có thể định cấu hình dựa trên bộ nhớ và băng thông của máy khách. Cảm ơn một lần nữa cho gợi ý tuyệt vời!
TheOx

Tuyệt vời, thật tốt khi nghe điều đó.
CaptDragon

@CaptDragon: (hoặc TheOx) Có thể đăng lên một ví dụ hoạt động không? Tôi hiểu giải pháp cho một điểm nhưng nhìn thấy một ví dụ đơn giản và mã sẽ giúp ích rất nhiều vì tôi có khá nhiều vấn đề tương tự. Cảm ơn!
teknocreator

1

Bạn đã xem xét đơn giản hóa các lớp vectơ để giảm kích thước tệp của chúng. Nếu đa giác chứa nhiều đỉnh hơn mức cần thiết cho mục đích hiển thị của bạn thì việc đơn giản hóa (làm mịn) chúng sẽ làm giảm kích thước tệp với chi phí giảm chi tiết. Tôi không chắc bạn có phần mềm nào theo ý của bạn nhưng một số ứng dụng máy tính để bàn có chứa chức năng xử lý địa lý để đơn giản hóa các tính năng.


Đó là một ý tưởng tốt nhưng thật không may, dự án yêu cầu hiển thị dữ liệu ở độ phân giải đầy đủ. Tuy nhiên tôi sẽ ghi nhớ điều đó cho một số lớp dữ liệu khác trên đường mà chúng ta có thể sử dụng thủ thuật đó.
TheOx

1

Khác với việc đơn giản hóa dữ liệu (thậm chí một chút có thể tiết kiệm rất nhiều dung lượng) bạn đã thử MapServer hoặc một số cách khác để biến dữ liệu của bạn thành các ô có độ trong suốt và tạo một lớp bản đồ để nằm trên cùng của lớp nền. Tôi đã thấy cách tiếp cận này với các bản đồ choropleth có hàng trăm đến hàng trăm ngàn đa giác (hoặc điểm đánh dấu), nhưng chưa thể tự mình thử nó (do yêu cầu phía máy chủ).

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.