Ищете стратегии обобщения для построения контуров в PostGIS?


22

У меня есть набор данных о строительных отпечатках, векторизованных из набора растровых данных. В настоящее время набор данных является просто векторным представлением растровых данных. Я хотел бы, чтобы набор данных многоугольника имел только вершины в углах здания. Я пытался использовать команду Simplify в PostGIS с ограниченным успехом.

Есть ли способ лучше?

Ответы:


17

Есть много алгоритмов, предназначенных для упрощения построения. Вы можете взглянуть на этот сайт для обзора. Смотрите также этот вопрос . Вы можете использовать:

  • Упрощение построения контура: оно заключается в рекурсивном удалении слишком коротких краев контура и удлинении соседних краев. Пример:

альтернативный текст

  • Алгоритм наименьшего окружающего прямоугольника: он состоит в замене геометрии здания на наименьший окружающий прямоугольник. Этот прямоугольник также можно масштабировать до начальной области здания. Пример:

альтернативный текст

  • Алгоритм возведения в квадрат: он заключается в применении легкого поворота к краям, чтобы углы были идеально квадратными. Пример:

альтернативный текст

Этих трансформаций может быть достаточно для ваших нужд. Может быть интересно объединить их.

Я почти на 100% уверен, что ни один из этих алгоритмов не реализован в PostGIS. Некоторые из них реализованы в Java-библиотеке Opencarto, которую я разрабатываю. Дайте мне знать, если вы хотите проверить это!


1
Можете ли вы дать краткое объяснение того, на какие алгоритмы вы ссылаетесь в Opencarto для упомянутого «Упрощения построения контура». Я не мог найти прямую информацию в вики или код в Opencarto.
Бенджист

Это «ShortEdgesDeletion». Вы можете найти его на github там: github.com/jgaffuri/OpenCarto/blob/master/src/main/java/org/…
julien


4
geometry ST_SimplifyPreserveTopology(geometry geomA, float tolerance);

Избегает создания производных геометрий (в частности, многоугольников), которые являются недействительными http://www.postgis.org/documentation/manual-1.5SVN/ST_SimplifyPreserveTopology.html

должен быть лучше, чем Simplify

сначала проверьте свою геометрию, а затем ST_IsSimple(geometry geomA);


3

Нечто подобное может сработать:

«Если мы буферизируем большим количеством, а затем реверсируем буфер на то же количество, мы получим нечто, похожее на оригинальное, но без извилистых битов».

http://blog.opengeo.org/2010/11/22/removing-complexities/


это интересный подход, и он кажется относительно эффективным. Спасибо за указатель, это то, что я смогу использовать. Ваш ответ был бы лучше, если бы он содержал простую фразу, содержащую основную идею, на которую ссылаются, а не просто ссылку.
Мэтт Уилки
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.