Страница 1 из 1
Буфер внутрь полигонов
Добавлено: 28 дек 2010, 17:33
kryl
Есть очень сложный мультиполигон с большим количеством дырок (граница леса) надо его разбить на 5-10 зон по расстоянию от опушки (построить буфер внутрь полигона). Арка выдает ошибку, Грасс тоже, к тому же не считает дырки дырками, КуГис вываливатся. В общем не знаю что делать.
Re: Буфер внутрь полигонов
Добавлено: 28 дек 2010, 18:07
gamm
kryl писал(а):Есть очень сложный мультиполигон с большим количеством дырок (граница леса) надо его разбить на 5-10 зон по расстоянию от опушки (построить буфер внутрь полигона). Арка выдает ошибку, Грасс тоже, к тому же не считает дырки дырками, КуГис вываливатся. В общем не знаю что делать.
аппроксимировать
1) растеризуем полигон на мелкую сетку. На всякий случай глядим глазками, чего вышло - раз Арка выдает ошибку, полигон может быть "кривой"
2) растеризуем границу полигона на ту же сетку (в другой файл, ессна).
3) строим дистанционное преобразование от границы. Но лучше использовать не D8 алгоритм, в Арке вроде нормальный, в GRASS - не совсем честный. Есть бесплатный код dt, работает как часы и строит точное расстояние.
4) делаем бинаризацию (3) по заданному радиусу буфера, и умножаем на (1).
5) если уж очень оно надо, результат векторизуем.
делается подручными средствами без всяких ГИС, и ничего не падает

Re: Буфер внутрь полигонов
Добавлено: 28 дек 2010, 22:02
kryl
gamm писал(а):
4) делаем бинаризацию (3) по заданному радиусу буфера, и умножаем на (1).
делается подручными средствами без всяких ГИС, и ничего не падает

А если я пройду растр фильтром: матрицей из 1 нужного размера (допустим 199 на 199 если мне нужно буфер 100 м и разрешение растра 1м) результат будет сильно хуже dt?
Re: Буфер внутрь полигонов
Добавлено: 29 дек 2010, 08:03
gamm
kryl писал(а):gamm писал(а):
4) делаем бинаризацию (3) по заданному радиусу буфера, и умножаем на (1).
делается подручными средствами без всяких ГИС, и ничего не падает

А если я пройду растр фильтром: матрицей из 1 нужного размера (допустим 199 на 199 если мне нужно буфер 100 м и разрешение растра 1м) результат будет сильно хуже dt?
dt вычисляет только дистанционное преобразование (сетку с расстояниями до источников, в нашем случае - до границы). Алгоритм в GRASS - модификация D8 (они "ход конем" добавили), на больших расстояниях ошибка все равно немного набегает, но поскольку она набегает монотонно, то топология сохраняется, и беды большой (особенно на небольших расстояниях) не будет.
Чем здесь может помочь фильтр, непонятно, если только не сделать специальный "фильтр" - матрицу с точными расстояниями достаточного размера, которая используется для "растеризации" - идем вдоль границы по ячейкам (пересекаемым границей), совмещаем центр матрицы с центром ячейки (если уж совсем точности хотим - то корректируем матрицу на сдвиг линии до центра), и берем "в пределах досягаемости" минимум из того, что в сетке расстояний и в матрице (предварительно в сетку расстояний записываем бесконечность). Но это нужно программировать, готовых средств скорее всего нет - нужен итератор (алгоритм обхода линии, например, Бразенхейм) и матричные операции. Можно сделать хоть в R (если использовать векторизованные операции, а не циклы), будет в несколько раз медленнее, чем на С++, но дождаться можно, особенно если один раз нужно было. Я это уже делал несколько лет назад

Re: Буфер внутрь полигонов
Добавлено: 29 дек 2010, 22:17
Boris
kryl писал(а):Есть очень сложный мультиполигон с большим количеством дырок (граница леса) надо его разбить на 5-10 зон по расстоянию от опушки (построить буфер внутрь полигона). Арка выдает ошибку, Грасс тоже, к тому же не считает дырки дырками, КуГис вываливатся. В общем не знаю что делать.
если это еще нужно, то я не понял такую вещь как поляны - они должны учитываться или нет? Расстояние только от опушки, а как задается разница между опушкой и поляной?
У меня MapInfo спокойно строит отрицательные буферы с отрицательным приращением (внутрь), только от дырок - тоже строит.
Re: Буфер внутрь полигонов
Добавлено: 11 янв 2011, 22:08
kryl
В результате посчитал растр расстояния от опушки в ArcGis. Прописал расстояния слою пробных площадей, получил нужную корреляцию, сижу обдумываю.
Re: Буфер внутрь полигонов
Добавлено: 18 июл 2011, 16:24
kryl
Вернулся недавно к той же задаче. В результате спокойно сделал расчет в QGIS с помощью gdal tools>карта близости