Спец.модуля для подобных изысканий в составе GRASS для нет.
Но: есть старый скрипт <r.localmax>, написанный когда-то Jachym Cepicky на Perl, который находит локальный максимум для растра (т.е., по идее, вершины).
Вот сам модуль:
Работает так:
, где после "-i" идёт имя ЦМР, после "-o" — имя выходного растра; после "-m" — размер матрицы в ячейках (только нечётные числа).
На выходе команда для <r.mapcalc>, которую ему надо подсунуть (чем больше размер матрицы, тем больше размер команды и тем реже в итоге будут точки).
------------------------------------------------------------------------
Пример получения вершин для набора данных Spearfish:
1)
Код: Выделить всё
r.localmax -i elevation.10m -o localmax -m 9
localmax = if(elevation.10m == max(elevation.10m[-4,-4],elevation.10m[-4,-3],elevation.10m[-4,-2],elevation.10m[-4,-1],elevation.10m[-4,0],elevation.10m[-4,1],elevation.10m[-4,2],elevation.10m[-4,3],elevation.10m[-4,4],elevation.10m[-3,-4],elevation.10m[-3,-3],elevation.10m[-3,-2],elevation.10m[-3,-1],elevation.10m[-3,0],elevation.10m[-3,1],elevation.10m[-3,2],elevation.10m[-3,3],elevation.10m[-3,4],elevation.10m[-2,-4],elevation.10m[-2,-3],elevation.10m[-2,-2],elevation.10m[-2,-1],elevation.10m[-2,0],elevation.10m[-2,1],elevation.10m[-2,2],elevation.10m[-2,3],elevation.10m[-2,4],elevation.10m[-1,-4],elevation.10m[-1,-3],elevation.10m[-1,-2],elevation.10m[-1,-1],elevation.10m[-1,0],elevation.10m[-1,1],elevation.10m[-1,2],elevation.10m[-1,3],elevation.10m[-1,4],elevation.10m[0,-4],elevation.10m[0,-3],elevation.10m[0,-2],elevation.10m[0,-1],elevation.10m[0,0],elevation.10m[0,1],elevation.10m[0,2],elevation.10m[0,3],elevation.10m[0,4],elevation.10m[1,-4],elevation.10m[1,-3],elevation.10m[1,-2],elevation.10m[1,-1],elevation.10m[1,0],elevation.10m[1,1],elevation.10m[1,2],elevation.10m[1,3],elevation.10m[1,4],elevation.10m[2,-4],elevation.10m[2,-3],elevation.10m[2,-2],elevation.10m[2,-1],elevation.10m[2,0],elevation.10m[2,1],elevation.10m[2,2],elevation.10m[2,3],elevation.10m[2,4],elevation.10m[3,-4],elevation.10m[3,-3],elevation.10m[3,-2],elevation.10m[3,-1],elevation.10m[3,0],elevation.10m[3,1],elevation.10m[3,2],elevation.10m[3,3],elevation.10m[3,4],elevation.10m[4,-4],elevation.10m[4,-3],elevation.10m[4,-2],elevation.10m[4,-1],elevation.10m[4,0],elevation.10m[4,1],elevation.10m[4,2],elevation.10m[4,3],elevation.10m[4,4]),1,null())
2) Подсовываем команду <r.mapcalc>:
Код: Выделить всё
r.mapcalc 'localmax = if(elevation.10m == max(elevation.10m[-4,-4],elevation.10m[-4,-3],elevation.10m[-4,-2],elevation.10m[-4,-1],elevation.10m[-4,0],elevation.10m[-4,1],elevation.10m[-4,2],elevation.10m[-4,3],elevation.10m[-4,4],elevation.10m[-3,-4],elevation.10m[-3,-3],elevation.10m[-3,-2],elevation.10m[-3,-1],elevation.10m[-3,0],elevation.10m[-3,1],elevation.10m[-3,2],elevation.10m[-3,3],elevation.10m[-3,4],elevation.10m[-2,-4],elevation.10m[-2,-3],elevation.10m[-2,-2],elevation.10m[-2,-1],elevation.10m[-2,0],elevation.10m[-2,1],elevation.10m[-2,2],elevation.10m[-2,3],elevation.10m[-2,4],elevation.10m[-1,-4],elevation.10m[-1,-3],elevation.10m[-1,-2],elevation.10m[-1,-1],elevation.10m[-1,0],elevation.10m[-1,1],elevation.10m[-1,2],elevation.10m[-1,3],elevation.10m[-1,4],elevation.10m[0,-4],elevation.10m[0,-3],elevation.10m[0,-2],elevation.10m[0,-1],elevation.10m[0,0],elevation.10m[0,1],elevation.10m[0,2],elevation.10m[0,3],elevation.10m[0,4],elevation.10m[1,-4],elevation.10m[1,-3],elevation.10m[1,-2],elevation.10m[1,-1],elevation.10m[1,0],elevation.10m[1,1],elevation.10m[1,2],elevation.10m[1,3],elevation.10m[1,4],elevation.10m[2,-4],elevation.10m[2,-3],elevation.10m[2,-2],elevation.10m[2,-1],elevation.10m[2,0],elevation.10m[2,1],elevation.10m[2,2],elevation.10m[2,3],elevation.10m[2,4],elevation.10m[3,-4],elevation.10m[3,-3],elevation.10m[3,-2],elevation.10m[3,-1],elevation.10m[3,0],elevation.10m[3,1],elevation.10m[3,2],elevation.10m[3,3],elevation.10m[3,4],elevation.10m[4,-4],elevation.10m[4,-3],elevation.10m[4,-2],elevation.10m[4,-1],elevation.10m[4,0],elevation.10m[4,1],elevation.10m[4,2],elevation.10m[4,3],elevation.10m[4,4]),1,null())'
3) Векторизуем точечный растр:
Код: Выделить всё
GRASS 6.4.3svn (spearfish60):~/bin > r.to.vect in=localmax out=localmax feat=point
4) Если надо, получаем высоты для точек.
Сначала добавляем новое поле "z" в таблицу атрибутов:
Добавляем в атрибуты высоты с ЦМР:
Код: Выделить всё
v.what.rast vector=localmax raster=elevation.10m column=z
Итог:

- spearfish_localmax.png (279.43 КБ) 6003 просмотра