Đây là một bản đồ đường viền cho tất cả các đa giác các cấp có sẵn.
Hãy hỏi làm thế nào để làm mịn các đa giác giữ tất cả các đỉnh được bảo tồn ở vị trí chính xác của chúng?
Thật vậy, đường viền được tạo trên đầu dữ liệu lưới, bạn có thể đề xuất sau đó để làm mịn dữ liệu lưới và do đó đường viền kết quả sẽ mượt mà hơn. Lưu ý rằng điều này không hoạt động như mong muốn của tôi vì chức năng làm mịn như bộ lọc Gaussian sẽ loại bỏ các gói dữ liệu nhỏ và sẽ thay đổi phạm vi của biến thứ ba, ví dụ: chiều cao không được phép trong ứng dụng của tôi.
Trên thực tế, tôi đang tìm kiếm một đoạn mã (tốt nhất là bằng Python ) có thể làm mịn các đa giác 2D (bất kỳ loại nào: lồi, lõm, tự giao nhau, v.v.) không gây đau đớn (quên các trang mã) và chính xác.
FYI, có một chức năng trong ArcGIS thực hiện điều này một cách hoàn hảo, nhưng sử dụng các ứng dụng thương mại của bên thứ ba không phải là lựa chọn của tôi cho câu hỏi này.
1)
Scipy.interpolate:
Như bạn thấy các splines kết quả (màu đỏ) là không thỏa đáng!
2)
Đây là kết quả bằng cách sử dụng mã được đưa ra ở đây . Nó không hoạt động tốt!
3)
Đối với tôi, giải pháp tốt nhất nên là một cái gì đó giống như hình dưới đây trong đó một hình vuông đang được làm mịn dần bằng cách chỉ thay đổi một giá trị. Tôi hy vọng cho khái niệm tương tự để làm mịn bất kỳ hình thức đa giác.
Đáp ứng điều kiện spline vượt qua các điểm:
4)
Đây là cách tôi thực hiện từng dòng "ý tưởng của người làm" trong Python trên dữ liệu của anh ấy. Có thể có một số lỗi vì kết quả không tốt.
K = 2 là một thảm họa và vì vậy với k> = 4.
5)
Tôi đã xóa một điểm ở vị trí có vấn đề và spline kết quả bây giờ giống hệt với whuber. Nhưng vẫn còn một câu hỏi là tại sao phương pháp này không hoạt động cho tất cả các trường hợp?
6)
Một sự làm mịn tốt cho dữ liệu của người dùng có thể như sau (được vẽ bởi phần mềm đồ họa vector) trong đó một điểm bổ sung đã được thêm vào một cách trơn tru (so sánh với cập nhật
4):
7)
Xem kết quả từ phiên bản Python của mã trình duyệt cho một số hình dạng biểu tượng:
Lưu ý rằng phương pháp này dường như không hoạt động đối với polylines. Đối với đa giác góc (đường viền) màu xanh lá cây là những gì tôi muốn nhưng có màu đỏ. Điều này cần được giải quyết vì bản đồ đường viền luôn là polylines mặc dù polylines kín có thể được coi là đa giác như trong ví dụ của tôi. Cũng không phải là vấn đề nổi lên trong bản cập nhật 4 vẫn chưa được giải quyết.
8) [lần cuối của tôi]
Đây là giải pháp cuối cùng (không hoàn hảo!):
Hãy nhớ rằng bạn sẽ phải làm một cái gì đó về khu vực được chỉ bởi các ngôi sao. Có lẽ có một lỗi trong mã của tôi hoặc phương pháp được đề xuất cần phát triển thêm để xem xét tất cả các tình huống và để cung cấp đầu ra mong muốn.