Генерализация полигонов
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Генерализация полигонов
Существует ли в GRASS инструмент упрощения полигонов без нарушения топологии?
Пробовал воспользоваться соответствующим инструментом из ftools в QGIS, но он упрощает так, что потом между полигонами остаются щели, а хотелось бы чтобы их не было.
Пробовал воспользоваться соответствующим инструментом из ftools в QGIS, но он упрощает так, что потом между полигонами остаются щели, а хотелось бы чтобы их не было.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Генерализация полигонов
Да, конечно. Дело в том, что GRASS - топологическая GIS, поэтому вопрос о нарушении топологии не актуален операции по редактированию будут сохранять топологию. Правда при этом данные должны быть записаны в собственном формате GRASS (т.е. перед началом работы их нужно импортировать)._DR_ писал(а):Существует ли в GRASS инструмент упрощения полигонов без нарушения топологии?
А для генерализации есть специальный модуль: v.generalize.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Генерализация полигонов
Попробовал упростить полигон, находящийся в географической СК (через модуль GRASS в QGIS), пробавл различные алгоритмы, в том числе Douglas-Peucker with reduction, выбирал Feature type - area, но по завершении всегда получаю собщение вида:
Код: Выделить всё
Number of vertices was reduced from 2779 to 2779 [100%]
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Генерализация полигонов
А если попробовать тип "boundary"? Area -- это граница+центроид, т.е. их топологический сочетание.
Вот более подробный туториал по модулю v.generalize
http://users.ox.ac.uk/~orie1848/tutorial.html
Вот более подробный туториал по модулю v.generalize
http://users.ox.ac.uk/~orie1848/tutorial.html
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Генерализация полигонов
Нашел в одной из презентаций по GRASS:
а теперь так: Т.о., можно еще попробовать модуль v.clean с опцией tool=prune и указать порог, с учетом которого будут удалены вершины границ.
Там же можно "подчистить" векторную карту после импорта через v.in.ogr -c ... (см. мануал)
а теперь так: Т.о., можно еще попробовать модуль v.clean с опцией tool=prune и указать порог, с учетом которого будут удалены вершины границ.
Там же можно "подчистить" векторную карту после импорта через v.in.ogr -c ... (см. мануал)
Редактор материалов, модератор форума
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Генерализация полигонов
Попробовал через v.clean, ничего не упростилось, получаю следующее:
Код: Выделить всё
--------------------------------------------------
Инструмент: Порог
Обрезка: 1.000000e+000
--------------------------------------------------
Копирование линий вектора...
Построение частей топологии заново...
Построение топологии для векторного слоя <prune7>...
Регистрируются примитивы...
1000 2000
2823 примитивов зарегистрировано
264422 узлов зарегистрировано
Построение полигонов...
1% 3% 5% 7% 9% 11% 13% 15% 17% 19% 21% 23% 25% 27% 29% 31% 33% 35% 37% 39% 41% 43% 45% 47% 49% 51% 53% 55% 57% 59% 61% 63% 65% 67% 69% 71% 73% 75% 77% 79% 81% 83% 85% 87% 89% 91% 93% 95% 97% 99% 100%
1400 полигонов построено
1399 островов создано
Назначаются острова...
1% 3% 5% 7% 9% 11% 13% 15% 17% 19% 21% 23% 25% 27% 29% 31% 33% 35% 37% 39% 41% 43% 45% 47% 49% 51% 53% 55% 57% 59% 61% 63% 65% 67% 69% 71% 73% 75% 77% 79% 81% 83% 85% 87% 89% 91% 93% 95% 97% 99% 100%
Назначаются центроиды...
1% 3% 5% 7% 9% 11% 13% 15% 17% 19% 21% 23% 25% 27% 29% 31% 33% 35% 37% 39% 41% 43% 45% 47% 49% 51% 53% 55% 57% 59% 61% 63% 65% 67% 69% 71% 73% 75% 77% 79% 81% 83% 85% 87% 89% 91% 93% 95% 97% 99% 100%
Количество узлов: 2814
Количество примитивов: 2823
Количество точек: 0
Количество линий: 0
Количество границ: 1417
Количество центроидов: 1406
Количество полигонов: 1400
Количество островов: 1399
Количество неправильных границ: 18
Количество центроидов вне полигонов: 1
Количество центроидов-дупликатов: 8
Количество полигонов без центроидов: 3
--------------------------------------------------
Инструмент: Обрезка линий/границ
Удалено 0 узлов из входных данных 0 (узлы заданного типа), т.е. nan %
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Генерализация полигонов
Какие данные? Те самые, что в теме viewtopic.php?f=35&p=33957#p33951 ?
[Из мануала] Стандартная обработка после импорта шейп-файла:
Топология не подчищена, наверно, поэтому не работает генерализацияКоличество неправильных границ: 18
Количество центроидов вне полигонов: 1
Количество центроидов-дупликатов: 8
Количество полигонов без центроидов: 3
[Из мануала] Стандартная обработка после импорта шейп-файла:
Код: Выделить всё
v.clean input=areas output=areas_clean tool=bpol,rmdupl type=boundary
Редактор материалов, модератор форума
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Генерализация полигонов
Да, данные те, но даже после чистки ничего не упрощается.
Пока остановился на этом инструменте.
Пока остановился на этом инструменте.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Генерализация полигонов
Интересно тут вот что. Я взял заведомо топологчески корректную карту (классический набор данных для GRASSspearfish60, система координат UTM зона 15), запустил упрощение (на почвенной карте):_DR_ писал(а):Попробовал через v.clean, ничего не упростилось
Код: Выделить всё
v.clean in=soils out=tmp type=boundary thresh=50 tool=prune
Создаю на основе почвенной карты новую область, система координат широта-долгота, WGS-84. Запускаю упрощение в новой области (меняю порог в соответствии с новой системой координат):
Код: Выделить всё
v.clean in=soils out=tmp type=boundary thresh=0.01 tool=prune
Не могу понять, то ли это глюк, то ли действительно GRASS не упрощает геометрию в систем широта-долгота (но тогда я нигде не нашел об этом упоминания).
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Генерализация полигонов
Интересно.. Заметьте, господа, даже в примере из презентации (выше) генерализация в GRASS делается в проекции UTM, что намекает. Надо поискать доказательства данной теории.
Редактор материалов, модератор форума
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Генерализация полигонов
А можно попросить написать небольшое руководство по шагам на тему как упростить в GRASS shape файлы: импорт, очистка, перепроецирование, упрощение, обратное перепроецирование? Заранее спасибо!
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Генерализация полигонов
_DR_ , можно Но лично от себя ничего не обещаю.
Может, найду в сети на буржуйском (хотя про упрощение подробного описания так и не нашел). Но: по любому нужен конкретный учебный шейп-файл (желательно, НЕ этот viewtopic.php?f=35&p=33957#p33951). Какой-нибудь попроще. И задачи, если можно, поконкретнее: изначальная проекция такая-то, упростить надо так-то, конечная проекция такая-то.
Может, найду в сети на буржуйском (хотя про упрощение подробного описания так и не нашел). Но: по любому нужен конкретный учебный шейп-файл (желательно, НЕ этот viewtopic.php?f=35&p=33957#p33951). Какой-нибудь попроще. И задачи, если можно, поконкретнее: изначальная проекция такая-то, упростить надо так-то, конечная проекция такая-то.
Редактор материалов, модератор форума
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Генерализация полигонов
1. Простенький шейп во вложении;
2. Начальная и конечная проекция - EPSG:4326;
3. Упрощение провести с помощью v.clean tool=prune
2. Начальная и конечная проекция - EPSG:4326;
3. Упрощение провести с помощью v.clean tool=prune
- Вложения
-
- testcase.zip
- (13.66 КБ) 442 скачивания
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Генерализация полигонов
Предположим, что у нас есть каталог с данными grassdata и в нем содержится два набора карт:
* tmp система координат широта/долгота
* tmp1 система координат epsg:900913
(оба этих набора прикладываю во вложении)
Далее последовательность действий:
* tmp система координат широта/долгота
* tmp1 система координат epsg:900913
(оба этих набора прикладываю во вложении)
Далее последовательность действий:
- 1) Заходим в GRASS в набор tmp1
2) Импортируем туда шейпы:в результате в наборе tmp появляется карта admКод: Выделить всё
v.in.ogr dsn=путь/к/шейпу/название out=adm
3) Выходим из GRASS
4) Заходим в набор tmp1
5) Импортируем в этот набор нужные карты:В результате в наборе tmp1 появится карта adm (уже перепроецированная под нужную систему координат)Код: Выделить всё
v.proj in=adm out=adm loc=tmp
6) Производим упрощение:(В системе координат epsg:900913 измерения производятся в метрах, поэтому порог большой)Код: Выделить всё
v.clean in=adm out=adm_bona type=boundary tool=prune thresh=1000
В итоге получаем генерализованную карту adm_bona
7) Если хотим получить карту в начальной системе epsg:4326, то проделываем уже знакомые шаги
а) выходим из GRASS
b) заходим в набор tmp
c) импортируем туда генерализованную карту:d) при необходимости экспортируем в шейп при помощиКод: Выделить всё
v.proj in=adm_bona out=adm_bona loc=tmp1
Код: Выделить всё
v.out.ogr
- Вложения
-
- grassdata.zip
- Описываемые наборы
- (97.68 КБ) 426 скачиваний
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Генерализация полигонов
если GRASS будет в этом случае считать расстояние хотя-бы по большой дуге (чего вроде не делается), то можно. В противном случае метрика становится анизотропной (по вертикали то же расстояние в градусах не равно расстоянию по горизонтали), и результат будет неверный, поскольку толерансы должны быть изотропны (упрощение зависит от формы, но не от ориентации).KolesovDmitry писал(а):И все-таки, мне кажется, что упрощение можно произвести и в системе координат широта-долгота....
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей