Спрощення сусідніх многокутників за допомогою PostGIS?


24

У мене виникла проблема спрощення набору багатокутників, які є суміжними. Якщо я спрощую кожен багатокутник окремо за допомогою алгоритму Дугласа – Пейкера (який використовується багатьма інструментами з відкритим вихідним кодом), отримані багатокутники зазвичай більше не суміжні. Ця проблема існує, наприклад, при спрощенні кордонів країн / провінцій.

Хтось має рішення для нього за допомогою PostGIS?

Відповіді:


19

Топологічна векторна модель забезпечить те, що вам потрібно. У нетопологічному сховищі (наприклад, форміфайлу) один край між геометріями зберігається двічі. У топологічному векторі області зберігаються окремо від рядків, тому коригування можна проводити, не впливаючи на топологію. Я не зміг знайти гарну діаграму, тому я створив цей простий приклад, де області A, B і C обчислюються із перетинів ліній (що з'єднують 1-4), які їх розділяють. приклад топологічного вектора

Ця модель використовується ArcInfo як покриття, в GRASS як її векторна модель за замовчуванням , і може бути використана в PostGIS за допомогою експериментального інструменту Topology PostGIS . Можливо, більш простим рішенням є перетворення ваших даних у мережеву роботу, видалення зайвих сегментів, а потім відтворення ваших полігонів після спрощення.


15

Ви хочете перетворити свої багатокутники на рядки, зробити ці лінії простими ребрами покриття, спростити ці краї, потім знову створити їх в полігони і, нарешті, використати точку в полігоні, щоб знову приєднати атрибути старих багатокутників до новенькі.

CREATE TABLE rings AS SELECT (ST_DumpRings(polys)).geom AS rings FROM polytable;
CREATE TABLE simplerings AS SELECT ST_Union(rings) AS simplerings FROM rings;
CREATE TABLE newpolycollection AS SELECT ST_Polygonize(ST_Simplify(simplerings, 10.0)) AS geom FROM simplerings;
CREATE TABLE newpolysnoattributes AS SELECT (ST_Dump(geom)).geom FROM newpolycollection;
CREATE TABLE newpolytable AS SELECT new.geom, old.attr FROM newpolysnoattributes new, polytable old WHERE ST_Contains(new.geom, ST_PointOnSurface(old.polys));

У наведеному вище є помилки, але основна концепція є. Ви можете зробити це за один запит, якщо вам подобається.


2

Щоб уникнути цієї проблеми, слід моделювати свої дані, використовуючи топологічні обмеження. http://mapshaper.org/ робить це.


-1

Вам потрібно тесселяти. У старій теорії створення геометрії ARC / INFO дві суміжні геометрії створюються однією полілінією і поділяють цю полілінію. Тому, коли ви узагальнили, він узагальнив обидві межі, оскільки він посилався на ту саму полілінію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.