Отже, назва трохи незручна. Я дам інформацію, а потім поставте своє запитання.
Передумови : Я працюю як веб- розробник GIS- додатків, але у вільний час я граю з наданням карти та вдосконаленням форматів обміну даними. Я працюю лише в 2D просторі.
Одне цікаве питання, з яким я стикався, полягає в тому, що коли ви рендеруєте багатокутник у невеликому масштабі (масштабний вихід), багато вершин є зайвими. Надзвичайний випадок може полягати в тому, що у вас є багатокутник з 500 000 вершин, який займає лише один піксель. Якщо ви надсилаєте ці дані до браузера, було б доцільно опустити ~ 499,999 цих вершин. Одним із способів ми цього домагаємося - рендерінг зображення на сервері та надсилання його як PNG: voila, це точка. Однак іноді ми хочемо, щоб дані надсилалися до браузера, де їх можна рендерувати за допомогою SVG (або полотна, або webgl), щоб вони могли бути інтерактивними.
Проблема : виявляється, що, використовуючи сучасні набори географічних даних, перевантажити здібності SVG дуже просто. Прагнучи впоратися з цими обмеженнями, я намагаюся розібратися, як візуально зменшити без втрат набір даних для заданого масштабу та масштабу карти (і, якщо потрібно, для відомої ширини та висоти пікселів карти).
Мені вдалося значно зменшити розмір даних просто за допомогою алгоритму Дугласа-Пейкера , і я вважаю, що мені вдалося змусити його зберегти вірність багатокутників у межах одного пікселя. На жаль, Дуглас-Пюкер не зберігає топологію, тому він змінив спосіб надання меж між полігонами. Я не міг легко знайти інші алгоритми, щоб спробувати і адаптуватися до своєї мети, але я не маю великого тла CS / алгоритму і, можливо, не розпізнаю їх, якби бачив їх.