Буфер внутрь полигонов
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Буфер внутрь полигонов
Есть очень сложный мультиполигон с большим количеством дырок (граница леса) надо его разбить на 5-10 зон по расстоянию от опушки (построить буфер внутрь полигона). Арка выдает ошибку, Грасс тоже, к тому же не считает дырки дырками, КуГис вываливатся. В общем не знаю что делать.
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Буфер внутрь полигонов
аппроксимироватьkryl писал(а):Есть очень сложный мультиполигон с большим количеством дырок (граница леса) надо его разбить на 5-10 зон по расстоянию от опушки (построить буфер внутрь полигона). Арка выдает ошибку, Грасс тоже, к тому же не считает дырки дырками, КуГис вываливатся. В общем не знаю что делать.

1) растеризуем полигон на мелкую сетку. На всякий случай глядим глазками, чего вышло - раз Арка выдает ошибку, полигон может быть "кривой"
2) растеризуем границу полигона на ту же сетку (в другой файл, ессна).
3) строим дистанционное преобразование от границы. Но лучше использовать не D8 алгоритм, в Арке вроде нормальный, в GRASS - не совсем честный. Есть бесплатный код dt, работает как часы и строит точное расстояние.
4) делаем бинаризацию (3) по заданному радиусу буфера, и умножаем на (1).
5) если уж очень оно надо, результат векторизуем.
делается подручными средствами без всяких ГИС, и ничего не падает

-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Буфер внутрь полигонов
А если я пройду растр фильтром: матрицей из 1 нужного размера (допустим 199 на 199 если мне нужно буфер 100 м и разрешение растра 1м) результат будет сильно хуже dt?gamm писал(а): 4) делаем бинаризацию (3) по заданному радиусу буфера, и умножаем на (1).
делается подручными средствами без всяких ГИС, и ничего не падает
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Буфер внутрь полигонов
dt вычисляет только дистанционное преобразование (сетку с расстояниями до источников, в нашем случае - до границы). Алгоритм в GRASS - модификация D8 (они "ход конем" добавили), на больших расстояниях ошибка все равно немного набегает, но поскольку она набегает монотонно, то топология сохраняется, и беды большой (особенно на небольших расстояниях) не будет.kryl писал(а):А если я пройду растр фильтром: матрицей из 1 нужного размера (допустим 199 на 199 если мне нужно буфер 100 м и разрешение растра 1м) результат будет сильно хуже dt?gamm писал(а): 4) делаем бинаризацию (3) по заданному радиусу буфера, и умножаем на (1).
делается подручными средствами без всяких ГИС, и ничего не падает
Чем здесь может помочь фильтр, непонятно, если только не сделать специальный "фильтр" - матрицу с точными расстояниями достаточного размера, которая используется для "растеризации" - идем вдоль границы по ячейкам (пересекаемым границей), совмещаем центр матрицы с центром ячейки (если уж совсем точности хотим - то корректируем матрицу на сдвиг линии до центра), и берем "в пределах досягаемости" минимум из того, что в сетке расстояний и в матрице (предварительно в сетку расстояний записываем бесконечность). Но это нужно программировать, готовых средств скорее всего нет - нужен итератор (алгоритм обхода линии, например, Бразенхейм) и матричные операции. Можно сделать хоть в R (если использовать векторизованные операции, а не циклы), будет в несколько раз медленнее, чем на С++, но дождаться можно, особенно если один раз нужно было. Я это уже делал несколько лет назад

-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Буфер внутрь полигонов
если это еще нужно, то я не понял такую вещь как поляны - они должны учитываться или нет? Расстояние только от опушки, а как задается разница между опушкой и поляной?kryl писал(а):Есть очень сложный мультиполигон с большим количеством дырок (граница леса) надо его разбить на 5-10 зон по расстоянию от опушки (построить буфер внутрь полигона). Арка выдает ошибку, Грасс тоже, к тому же не считает дырки дырками, КуГис вываливатся. В общем не знаю что делать.
У меня MapInfo спокойно строит отрицательные буферы с отрицательным приращением (внутрь), только от дырок - тоже строит.
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Буфер внутрь полигонов
В результате посчитал растр расстояния от опушки в ArcGis. Прописал расстояния слою пробных площадей, получил нужную корреляцию, сижу обдумываю.
-
- Завсегдатай
- Сообщения: 324
- Зарегистрирован: 14 фев 2010, 20:42
- Репутация: 0
Re: Буфер внутрь полигонов
Вернулся недавно к той же задаче. В результате спокойно сделал расчет в QGIS с помощью gdal tools>карта близости
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей