Posts Tagged ‘Grass’

Пространственная кластеризация точечных данных

Май 12, 2008

Пост является переводом Spatial Clustering of Point Data с небольшими дополнениями.

Задача: Есть n точек, распределенных каким-то образом в пределах заданной территории. Каждая точка кроме пространственного положения обладает значением (например, содержанием химического элемента)
Требуется объединить точки в m групп.

Инструменты: GRASS, R.

Задача теоретическая. Точки генерируем случайным образом, и по ходу решения задачи, попытаемся определиться с числом групп в которые эти точки надо объединить.
Для наглядности сгенерируем растровую карту и возьмем с неё значения для точек:

r.surf.fractal out=surf.fract d=2.05
v.random out=pnts n=100
v.drape pnts type=point rast=surf.fract out=points

d.rast surf.fract
d.vect points icon=basic/box fcol=black col=black size=6

v.out.ascii in=points out=points.xy

На соседнем терминале запускаем R

x <- read.table(‘points.xy’,’sep=’|’)
names(x) <- c(‘easting’, ‘northing’, ‘surf’ ,’cat’)
# отсекаем столбец cat
y <- data.frame(x[,1:3])
row.names(y) <- x$cat

# загружаем библиотеки для кластерного анализа
library(cluster)
library(flexclust)

# попытаемся найти оптимальное число групп
s <- stepFlexclust(y, K=2:10, nrep=20)
plot(s)

# похоже, оптимальное число 5
y.pam <- pam(y, 5, stand=TRUE)

# подготовим данные для экспорта
y$cluster <- y.pam$clustering
y$orig_cat <- as.numeric(row.names(y))

# экспортируем данные в текстовый файл
write.table(y, file=’points.clust’, row.names=FALSE)

возвращаемся в GRASS и импортируем текстовый файл

v.in.ascii in=points.clust out=pclust fs=» » columns=’x double, y double, srf double, orig_cat integer, cluster integer’ skip=1

for x in $(seq 1 5)
do v.extract —o in=pclust where=»cluster=$x» out=pclust_$x
v.hull —o in=pclust_$x out=pclust_hull_$x
d.vect pclust_hull_$x type=boundary fcol=none width=2 col=white
done
d.vect pclust icon=basic/box fcol=black col=black size=6

Вывод карт из GRASS на печать

Декабрь 19, 2007

В GRASS в наличие есть скрипт ps.map, позволяющий создать подготовленную к печати карту в .ps формате на основе заранее заданных инструкций. Скрипт этот весьма функционален, и отрисовывает помимо самой карты еще и легенду, масштабную линейку, заголовки и пр., и во многих случаях его использование более оправдано, нежели прибегание к помощи GMT. Читать далее…

Экспорт растровой карты из GRASS в .xyz

Декабрь 18, 2007

Популярным форматом обмена пространственных матриц в ГИС является простой ascii-файл в формате xyz, строки в котором содержат три колонки — значения x,y и z. По умолчанию, GRASS не может экспортировать свои растровые карты в этот формат, вместо этого он экспортирует в GRASS ASCII или ARCINFO ASCII GRID. Если же нам необходимо получить файл xyz (для дальнейшего использования в GMT например), то на помощь приходит богатый инструментарий командной строки UNIX. Внутренняя команда GRASS r.stats может выводить на экран значение каждой ячейки если указан флаг -l, и дополнительно может печатать координаты каждой ячейки, если указан флаг -g Если указан флаг -x, команда будет печатать порядковые номера ячейки (x,y).

Таким образом, команда r.stats -lg elevation.30sec nv=»-9999″ выводит на экран информацию о карте как раз в формате xyz (nv=[string] — опция, задающая значение [string] в каждой ячейке с отсутствием данных). Осталось направить вывод команды в файл, и экспорт готов:

r.stats -lg elevation.30sec nv=»-9999″ > elevation.xyz

Рецепт взят из книги Open Source Gis: A GRASS GIS APPROACH