Страница 1 из 2
					
				Генерализация полигонов
				Добавлено: 27 окт 2010, 06:53
				 Denis Rykov
				Существует ли в GRASS инструмент упрощения полигонов без нарушения топологии?
Пробовал воспользоваться соответствующим инструментом из ftools в QGIS, но он упрощает так, что потом между полигонами остаются щели, а хотелось бы чтобы их не было.
			 
			
					
				Re: Генерализация полигонов
				Добавлено: 27 окт 2010, 08:32
				 KolesovDmitry
				_DR_ писал(а):Существует ли в GRASS инструмент упрощения полигонов без нарушения топологии?
Да, конечно. Дело в том, что GRASS - топологическая GIS, поэтому вопрос о нарушении топологии не актуален 

 операции по редактированию будут сохранять топологию. Правда при этом данные должны быть записаны в собственном формате GRASS (т.е. перед началом работы их нужно импортировать). 
А для генерализации есть специальный 
модуль: v.generalize.
 
			
					
				Re: Генерализация полигонов
				Добавлено: 28 окт 2010, 09:02
				 Denis Rykov
				Попробовал упростить полигон, находящийся в географической СК (через модуль GRASS в QGIS), пробавл различные алгоритмы, в том числе Douglas-Peucker with reduction, выбирал Feature type - area, но по завершении всегда получаю собщение вида:
Код: Выделить всё
Number of vertices was reduced from 2779 to 2779 [100%]
 
			
					
				Re: Генерализация полигонов
				Добавлено: 28 окт 2010, 16:23
				 Александр Мурый
				А если попробовать тип "boundary"? Area -- это граница+центроид, т.е. их топологический сочетание.
Вот более подробный туториал по модулю 
v.generalize
http://users.ox.ac.uk/~orie1848/tutorial.html 
			
					
				Re: Генерализация полигонов
				Добавлено: 28 окт 2010, 18:30
				 Александр Мурый
				Нашел в одной из презентаций по GRASS:
			
		
				
			 
- генерализации в НЕтопологической ГИС
- 01_OGC_generalize.png (101.42 КБ) 13426 просмотров
 
а теперь так:
			
		
				
			 
- пример генерализации в топологической ГИС
- 02_GRASS_generalize.png (97.51 КБ) 13426 просмотров
 
Т.о., можно еще попробовать модуль 
v.clean с опцией 
tool=prune и указать порог, с учетом которого будут удалены вершины границ. 
Там же можно "подчистить" векторную карту после импорта через 
v.in.ogr -c ... (см. мануал)
 
			
					
				Re: Генерализация полигонов
				Добавлено: 28 окт 2010, 19:31
				 Denis Rykov
				Попробовал через 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 %
 
			
					
				Re: Генерализация полигонов
				Добавлено: 28 окт 2010, 19:40
				 Александр Мурый
				Какие данные? Те самые, что в теме 
viewtopic.php?f=35&p=33957#p33951 ?
Количество неправильных границ: 18
Количество центроидов вне полигонов: 1
Количество центроидов-дупликатов: 8
Количество полигонов без центроидов: 3
Топология не подчищена, наверно, поэтому не работает генерализация
[Из мануала] Стандартная обработка после импорта шейп-файла: 
Код: Выделить всё
v.clean input=areas output=areas_clean tool=bpol,rmdupl type=boundary
 
			
					
				Re: Генерализация полигонов
				Добавлено: 28 окт 2010, 20:20
				 Denis Rykov
				Да, данные те, но даже после чистки ничего не упрощается.
Пока остановился на 
этом инструменте.
 
			
					
				Re: Генерализация полигонов
				Добавлено: 29 окт 2010, 18:56
				 KolesovDmitry
				_DR_ писал(а):Попробовал через v.clean, ничего не упростилось
Интересно тут вот что. Я взял заведомо топологчески корректную карту (классический набор данных для GRASSspearfish60, система координат UTM зона 15), запустил упрощение (на почвенной карте):
Код: Выделить всё
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 не упрощает геометрию в систем широта-долгота (но тогда я нигде не нашел об этом упоминания).
 
			
					
				Re: Генерализация полигонов
				Добавлено: 29 окт 2010, 19:15
				 Александр Мурый
				Интересно.. Заметьте, господа, даже в примере из презентации (выше) генерализация в GRASS делается в проекции UTM, что намекает. Надо поискать доказательства данной теории.
			 
			
					
				Re: Генерализация полигонов
				Добавлено: 02 ноя 2010, 12:13
				 Denis Rykov
				А можно попросить написать небольшое руководство по шагам на тему как упростить в GRASS shape файлы: импорт, очистка, перепроецирование, упрощение, обратное перепроецирование? Заранее спасибо!
			 
			
					
				Re: Генерализация полигонов
				Добавлено: 02 ноя 2010, 14:13
				 Александр Мурый
				_DR_ , можно 

 Но лично от себя ничего не обещаю.
Может, найду в сети на буржуйском (хотя про упрощение подробного описания так и не нашел). Но: по любому нужен конкретный учебный шейп-файл (желательно, НЕ этот 
viewtopic.php?f=35&p=33957#p33951). Какой-нибудь попроще. И задачи, если можно, поконкретнее: изначальная проекция такая-то, упростить надо так-то, конечная проекция такая-то.
 
			 
			
					
				Re: Генерализация полигонов
				Добавлено: 02 ноя 2010, 14:46
				 Denis Rykov
				1. Простенький шейп во вложении;
2. Начальная и конечная проекция - EPSG:4326;
3. Упрощение провести с помощью v.clean tool=prune
			 
			
					
				Re: Генерализация полигонов
				Добавлено: 02 ноя 2010, 16:48
				 KolesovDmitry
				Предположим, что у нас есть каталог с данными grassdata и в нем содержится два набора карт:
* tmp система координат широта/долгота
* tmp1 система координат epsg:900913
(оба этих набора прикладываю во вложении)
Далее последовательность действий:
- 1) Заходим в GRASS в набор tmp1
 2) Импортируем туда шейпы: 
в результате в наборе tmp появляется карта adm
 3) Выходим из GRASS
 4) Заходим в набор tmp1
 5) Импортируем в этот набор нужные карты:
В результате в наборе tmp1 появится карта adm (уже перепроецированная под нужную систему координат)
 6) Производим упрощение:Код: Выделить всё v.clean in=adm out=adm_bona type=boundary tool=prune thresh=1000
 
 В итоге получаем генерализованную карту adm_bona
 7) Если хотим получить карту в начальной системе epsg:4326, то проделываем уже знакомые шаги
 а) выходим из GRASS
 b) заходим в набор tmp
 c) импортируем туда генерализованную карту:
d) при необходимости экспортируем в шейп при помощи
(И все-таки, мне кажется, что упрощение можно произвести и в системе координат широта-долгота....)
 
			
					
				Re: Генерализация полигонов
				Добавлено: 03 ноя 2010, 08:06
				 gamm
				KolesovDmitry писал(а):И все-таки, мне кажется, что упрощение можно произвести и в системе координат широта-долгота....
если GRASS будет в этом случае считать расстояние хотя-бы по большой дуге (чего вроде не делается), то можно. В противном случае метрика становится анизотропной (по вертикали то же расстояние в градусах не равно расстоянию по горизонтали), и результат будет неверный, поскольку толерансы должны быть изотропны (упрощение зависит от формы, но не от ориентации).