[ad_1]
Đôi khi, bạn phải hiển thị lượng lớn dữ liệu trên bản đồ tương tác trong khi vẫn giữ cho nó có thể sử dụng được và phản hồi nhanh. Bản đồ trực tuyến tương tác được triển khai bằng HTML và việc thêm nhiều yếu tố trực quan vào hiển thị bản đồ thường làm giảm hiệu suất và khả năng sử dụng. Một giải pháp thay thế khả thi là vẽ tất cả các phần tử ngoại tuyến và hiển thị chúng trên bản đồ dưới dạng lớp trong suốt bằng cách sử dụng các ô xếp. Mỗi ô vuông chồng lên nhau một cách gọn gàng các ô của bản đồ và điều khiển bản đồ tương tác xử lý ít yếu tố trực quan hơn nhiều.
Tôi đã giải quyết vấn đề này vài năm trước bằng cách viết một trình tạo ô bản đồ tùy chỉnh bằng cách sử dụng Python và dữ liệu từ Bộ dữ liệu năng lượng xe. Dự án này minh họa cách hiển thị lượng thông tin khổng lồ trên bản đồ tương tác trực tuyến bằng cách sử dụng các lớp ô tùy chỉnh trên bản đồ. Quá trình này bao gồm việc sử dụng một ứng dụng internet để tạo, lưu trữ và phục vụ các ô.
Như bạn đã biết, Python không nhanh, do đó hiệu suất bị ảnh hưởng đáng kể trong khi ứng dụng internet tạo từng ô. Khi một ô được lưu vào bộ nhớ đệm, quá trình cung cấp sẽ diễn ra nhanh chóng và không gây chú ý khi tương tác với bản đồ.
Tuy nhiên, tôi không hài lòng với hiệu suất nên tôi muốn giải quyết vấn đề một lần nữa bằng cách cải thiện đáng kể tốc độ thực thi mã. Lúc đầu, tôi nghĩ đến việc chuyển đổi cơ sở mã thành Cythonnhưng sau đó sự chú ý của tôi chuyển hướng sang một ứng cử viên khác.
Ngôn ngữ lập trình Rust đã được tôi chú ý từ khá lâu. Với nền tảng về C, C++ và C#, tôi bị thu hút bởi lời hứa của ngôn ngữ này về độ an toàn bộ nhớ và hiệu suất giống như C. Cuối cùng tôi quyết định thử và vấn đề này có vẻ như là điểm khởi đầu hoàn hảo để học và rèn luyện ngôn ngữ.
Sau khi xem xét nhiều video trên YouTube và nhiều tài liệu viết đa dạng, tôi bắt đầu sử dụng Rust để giải quyết vấn đề này. Tôi có ba câu hỏi chính: Tạo một ứng dụng internet khó đến mức nào, truy cập SQLite information và lập trình tạo một hình ảnh PNG trong suốt? Could mắn thay, câu trả lời cho những câu hỏi này dễ trả lời hơn dự kiến.
Tên lửa
Để trả lời câu hỏi về ứng dụng internet, tôi đã chuyển sang Tên lửa. Các Bắt đầu trang từ tài liệu trực tuyến của Rocket cho thấy việc thiết lập một ứng dụng internet cơ bản dễ dàng như thế nào. Chúng tôi chắc chắn sẽ cần độ phức tạp cao hơn để xây dựng máy chủ ô xếp của mình, nhưng bản soạn sẵn có vẻ tối giản và đơn giản. Và hóa ra, Rocket rất dễ sử dụng và thích nghi. Đó là một thủ môn đối với tôi.
sqlx
Sau vài phút trực tuyến, tôi nhanh chóng nhận ra rằng câu trả lời phổ biến nhất để truy cập cơ sở dữ liệu SQLite là thông qua sqlx bưu kiện. Nó trình bày một mô hình khác với mô hình tôi đã sử dụng trong Python nhưng gần hơn nhiều với mô hình tôi đã sử dụng ở kiếp trước khi phát triển bằng C#. Thay vì cấu trúc dữ liệu chung chung hoặc gấu trúc Khung dữ liệu, bạn phải sử dụng cấu trúc dữ liệu được định kiểu mạnh ở đây. Mặc dù làm việc với chúng tốn nhiều công sức hơn một chút nhưng chúng sẽ mang lại thêm sự tỉnh táo cho cuộc sống của bạn.
Hình 1 bên dưới hiển thị mẫu mã hoàn chỉnh đầu tiên mà tôi đã sử dụng để truy xuất dữ liệu từ bảng phạm vi cấp độ.
PNG
Tạo, vẽ và lưu tệp PNG bằng cách sử dụng hình ảnh cái thùng thật dễ dàng. Mã để tạo một ô trong suốt khá đơn giản:
Tôi cũng đã sử dụng màu sắc gói để xử lý độ dốc màu cho các ô.
Trước khi thảo luận chi tiết về mã, chúng ta hãy xem lại nguyên tắc đằng sau việc vẽ các ô mật độ lưu lượng.
Các ô bản đồ thường bao gồm các bitmap vuông 256×256. Chúng ta có thể giải quyết từng ô bằng cách kết hợp x Và y tọa độ, mức “thu phóng” hoặc phím tứ giác mã số. Mỗi mức thu phóng tương ứng với một ô hình vuông có kích thước khác nhau. Toàn bộ Trái đất được mô tả trên một ô duy nhất ở cấp cao nhất. Bằng cách phóng to, ô ban đầu được chia thành bốn ô. Sau đây Hình 2 Và 3 minh họa quá trình phóng to.
Nếu chúng ta tiếp tục phóng to và sau tám lần lặp, mỗi ô kết quả sẽ tương ứng với một pixel trên ô đầu tiên. Quan sát này là thông tin chuyên sâu cho phép chúng tôi tính toán và hiển thị thông tin về mật độ lưu lượng truy cập trên các ô.
Như được mô tả trong bài báo trước, thông tin ô được chuẩn bị và lưu trữ trong cơ sở dữ liệu. Vui lòng tham khảo bài viết đó để biết hướng dẫn tạo cơ sở dữ liệu mật độ từ Bộ dữ liệu năng lượng xe.
Bây giờ chúng ta có thể thảo luận về mã máy chủ Rust để tạo, lưu vào bộ đệm và phân phát các ô. Giải pháp hiện tại bám sát thiết kế máy chủ khối trước đó. Hình 5 bên dưới hiển thị điểm nhập chính quyết định nên cung cấp ô được sơn hay ô trong suốt mặc định sau khi phân tích cú pháp và chấp nhận các tham số truy vấn.
Như bạn có thể thấy, máy chủ chỉ phản hồi các mức thu phóng từ một đến mười tám. Hạn chế này đã được đưa vào quá trình tạo dữ liệu cho cơ sở dữ liệu mật độ.
Ứng dụng internet vẽ từng ô bằng cách sử dụng chức năng được liệt kê trong Hình 6 dưới.
Như bạn có thể thấy từ danh sách trên, quy trình sơn gạch có ba bước. Đầu tiên, trên dòng 12, chúng tôi thu thập thông tin mật độ trên mỗi pixel của ô. Tiếp theo, chúng tôi truy xuất phạm vi cấp độ của ô, tức là mức mật độ tối thiểu và tối đa cho mức “thu phóng” của ô. Cuối cùng, ở dòng 14, chúng ta vẽ bitmap của ô. Chức năng này hoàn tất bằng cách lưu bitmap ô vào bộ đệm tệp.
Sau khi định cấu hình chính xác đường dẫn tệp cơ sở dữ liệu, bạn khởi động máy chủ ô xếp bằng cách mở cửa sổ đầu cuối, thay đổi thư mục dự án Rust và chạy lệnh sau:
cargo run --release
Tiếp theo, bạn có thể mở ứng dụng khách bản đồ và định cấu hình URI lớp ô mật độ. Hình 8 bên dưới hiển thị ô mã Jupyter Pocket book để tải bản đồ tương tác:
Và thế là xong! Hình 9 bên dưới hiển thị kết quả.
Bước đột phá đầu tiên của tôi vào Rust gần như không khó như tôi mong đợi. Tôi bắt đầu bằng cách đắm mình vào các tài liệu có sẵn và video trên YouTube trước khi bắt tay vào thực hiện. Tiếp theo, tôi đảm bảo rằng tôi đang nhờ sự trợ giúp của IDE tuyệt vời từ JetBrains: RustRover. Mặc dù vẫn ở chế độ xem trước nhưng tôi thấy IDE này hữu ích và mang tính hướng dẫn khi sử dụng Rust. Tuy nhiên, bạn cũng sẽ hoàn toàn ổn nếu bạn thích Mã Visual Studio. Chỉ cần đảm bảo rằng bạn nhận được các plugin được phê duyệt.
tôi đã sử dụng ngữ pháp để xem lại bài viết và chấp nhận một số đề xuất viết lại của nó.
AI của JetBrains trợ lý đã viết một số mã và tôi cũng sử dụng nó để tìm hiểu Rust. Nó đã trở thành một phần không thể thiếu trong công việc hàng ngày của tôi với cả Rust và Python.
Bộ dữ liệu năng lượng phương tiện mở rộng được cấp phép theo Apache 2.0, giống như người khởi tạo nó, Bộ dữ liệu năng lượng xe.
Bộ dữ liệu năng lượng xe (GitHub)
[ad_2]
Source link