Vì vậy, tiêu đề là một chút khó xử. Tôi sẽ đưa ra một số nền tảng, và sau đó đặt câu hỏi của tôi.
Bối cảnh : Tôi làm việc như một web GIS phát triển ứng dụng, nhưng trong thời gian rảnh rỗi của tôi, tôi đã chơi với vẽ bản đồ và cải thiện các định dạng trao đổi dữ liệu. Tôi chỉ làm việc trong không gian 2D.
Một vấn đề thú vị mà tôi gặp phải là khi bạn kết xuất một đa giác ở quy mô nhỏ (thu nhỏ lối ra), nhiều đỉnh là dư thừa. Một trường hợp cực đoan là bạn có một đa giác với 500.000 đỉnh chỉ chiếm một pixel. Nếu bạn đang gửi dữ liệu này tới trình duyệt, sẽ rất có ý nghĩa nếu bỏ qua ~ 499.999 trong số các đỉnh đó. Một cách chúng tôi đạt được đó là bằng cách hiển thị hình ảnh trên máy chủ và gửi nó dưới dạng PNG: voila, đó là một điểm. Tuy nhiên, đôi khi, chúng tôi muốn dữ liệu được gửi tới trình duyệt nơi nó có thể được hiển thị bằng SVG (hoặc canvas hoặc webgl) để có thể tương tác.
Vấn đề : Hóa ra, bằng cách sử dụng các bộ dữ liệu địa lý hiện đại, rất dễ làm quá tải khả năng kết xuất của SVG. Trong nỗ lực đối phó với những hạn chế đó, tôi đang cố gắng tìm ra cách giảm thiểu một cách trực quan một tập dữ liệu cho một tỷ lệ và phạm vi bản đồ nhất định (và, nếu cần, cho chiều rộng và chiều cao pixel bản đồ đã biết).
Tôi đã giảm đáng kể kích thước dữ liệu chỉ bằng thuật toán Douglas-Peucker và tôi tin rằng tôi có thể lấy nó để giữ cho đa giác đúng trong một pixel. Thật không may, Douglas-Peucker không bảo tồn cấu trúc liên kết, vì vậy nó đã thay đổi cách biên giới giữa các đa giác được hiển thị. Tôi không thể dễ dàng tìm thấy các thuật toán khác để thử và thích nghi với mục đích, nhưng tôi không có nhiều nền tảng thuật toán / CS và có thể không nhận ra chúng nếu tôi nhìn thấy chúng.