Làm thế nào để khái quát đường bờ biển?


12

Tôi có một tập hợp lớn các điểm dữ liệu đại diện cho đường bờ biển trên thế giới. Tôi không biết độ phân giải chính xác nhưng tôi nói nó ở trong khoảng 5-10m.

Hãy tưởng tượng một tập hợp các điểm đại diện cho đường bờ biển lởm chởm. Ở độ phân giải 1m, chúng ta thấy tất cả các chi tiết và cần 50 điểm dữ liệu để thể hiện chính xác bờ biển, tuy nhiên, ở độ phân giải 10km, bờ biển trông giống như một đường thẳng và chúng ta chỉ cần 2 điểm.

Tôi đang viết một ứng dụng bản đồ sẽ yêu cầu dữ liệu mở rộng từ độ phân giải "toàn hành tinh" sang độ phân giải "đường phố". Tôi cần một số trợ giúp để giảm độ phân giải của các điểm dữ liệu của tôi và sau đó là lượng dữ liệu cho độ phân giải rộng hơn.

Tôi đã đọc về Vector-Tiling và nghĩ rằng đây sẽ là giải pháp tốt nhất (tôi đã làm một cái gì đó như thế này rồi), tuy nhiên, ở độ phân giải thấp, tập dữ liệu của tôi vẫn có ý nghĩa rất lớn rằng việc kéo dài nó [tương đối] thời gian, khi độ phân giải cao nhanh vì bộ dữ liệu 'hiệu quả' nhỏ (tập hợp con của toàn bộ).

Tôi đang cố gắng xác định cách lấy tập dữ liệu lớn của mình và giảm quy mô của nó để dữ liệu ô của chế độ xem 'toàn hành tinh' của tôi có kích thước có thể quản lý được. Làm cách nào để tạo bộ dữ liệu con gạch từ bộ dữ liệu hoàn chỉnh lớn hơn?

Tôi rất vui khi sử dụng một công cụ nhưng tôi muốn tự mình làm nó trong nỗ lực tìm hiểu cách thức thực hiện.


1
Bạn đã kiểm tra câu trả lời cho gis.stackexchange.com/questions/6585/ cấp chưa? Hãy giải thích nếu bạn nghĩ rằng câu hỏi của bạn là khác nhau.
underdark

1
Có vẻ như câu hỏi nên là về đường bờ biển thay vì "điểm". Khi độ phân giải thấp hơn, các đảo nhỏ có nên biến mất? Có ổn không khi đường bờ biển quanh đảo serpentine mỏng manh đi qua?
Kirk Kuykendall

Nếu bạn chỉ muốn làm một công việc có thể vượt qua và tiếp tục, câu trả lời của @R Thiede có lẽ là nơi tốt nhất để bắt đầu. Nếu bạn muốn thực hiện thử thách thực sự, đơn giản hóa công việc vẽ đường mà không làm mất ý nghĩa của các hình dạng, hãy xem các câu hỏi liên quan gis.stackexchange.com/questions/38/ và và gis.stackexchange.com/questions/440/ .
matt wilkie

Câu trả lời:


7

Làm thế nào bạn sẽ giải quyết vấn đề này thực sự phụ thuộc vào trường hợp và tầm quan trọng của cấu trúc thực tế đối với bạn (so với chỉ thời gian hiển thị / kết xuất). Vì mục tiêu cuối cùng của bạn là khái quát hóa đường bờ biển, bạn có thể thấy một số ý tưởng về khái quát hóa hữu ích.

Một cách tiếp cận sử dụng bộ đệm, như đã thấy ở đây . Tôi cũng đã có một vấn đề tương tự trước đây và chi tiết giải pháp của tôi ở đây .

Nói tóm lại, bạn có thể sử dụng các bộ dữ liệu vectơ riêng biệt (hoặc ít nhất là hình học riêng biệt), được khái quát cho các cấp độ khác nhau. Điều này giải quyết vấn đề cơ bản của bạn mặc dù nó không sử dụng gạch, nhưng tất nhiên bạn vẫn có thể sử dụng gạch nếu muốn. Tất nhiên, nếu bạn định chia dữ liệu của mình thành các ô dựa trên lưới, hãy chắc chắn khái quát hóa trước, hoặc bạn sẽ kết thúc với các khoảng trống giữa các ô.


+1 cho một câu trả lời chu đáo. Chào mừng đến với trang web của chúng tôi, Rüdiger!
whuber

5

Bạn nên chuẩn bị các phiên bản tổng quát khác nhau của bộ dữ liệu của mình cho các mức thu phóng "toàn hành tinh" xuống mức thu phóng cận cảnh.

Một thuật toán khái quát hóa cổ điển là thuật toán Douglas-Peucker . Bạn sẽ phải kết nối các điểm với đường bờ biển trước nếu bạn chưa thực hiện điều đó.


2
Thư viện GEOS có các thuật toán Douglas-Peucker tích hợp sẵn mà bạn có thể sử dụng, nếu bạn muốn tự viết mã này. Bạn có thể muốn xem xét cấu trúc liên kết mặc dù, trong trường hợp đó, công cụ GRASS v.generalize cũng có thể giúp ích.
lagerratcoat

Xin chào @lagerratcoat. Tôi đã thực hiện câu trả lời này cho cộng đồng wiki, vì vậy bạn sẽ có thể chỉnh sửa trực tiếp và thêm cả giải pháp GEOS và GRASS cho nó.
underdark


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.