[GRASS/Советы] Генерация случайных точек и получение данных

Ответить
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

[GRASS/Советы] Генерация случайных точек и получение данных

Сообщение KolesovDmitry » 12 сен 2008, 09:08

Генерация случайных точек и получение данных.
Для анализа зачастую требуется получить набор точек, случайно (с равномерным распределением) расположенных на некоторой территории, и, после после, заполнить таблицу атрибутов некоторыми значениями, считанными с карты.

1) Генерируем 1000 точек (создастся слой pnts)

Код: Выделить всё

GRASS> v.random out=pnts n=1000
2) Создаем и присоединяем к сгенерированным точкам таблицу базы данных, состоящей из целочисленых полей - "flamo,x,y". В последствии эту таблицу нужно будет заполнить данными.

Код: Выделить всё

GRASS> v.db.addtable map=pnts columns="flamo INT,x INT,y INT"
Далее зависит от того, с каких слоев считывать данные - с векторных или растровых.
Допустим, у нас есть слой fires с полигонами и с каждым полигоном связана запись из атрибутивной таблицы. Среди ее полей есть поле с названием YEAR. Пусть для всех точек, которые попадают в полигоны поле flamo должно содержать соотв. значение YEAR. Если точка не попала в полигон, то пусть flamo будет равно -1.
Далее. Пусть у нас есть два растра slope.1 и slope.2. В поле x атрибутов точек положим значение ячейки растра slope.1, в которую попадает точка. В поле y - значения из растра slope.2.

3) Считываем данные с растров:

Код: Выделить всё

GRASS> v.what.rast vect=pnts rast=slope.1 col=x
  GRASS> v.what.rast vect=pnts rast=slope.2 col=y
(Проверяем результат:

Код: Выделить всё

GRASS> v.db.select pnts
  • cat|flamo|x|y
    1||-11|-42
    2||17|-14
    ... ... ...
    23||2|-43
    ... ... ...
)
[/i]
4) Считываем данные с вектора:

Код: Выделить всё

GRASS> v.what.vect vector=pnts column=flamo qvector=fires qcolumn=YEAR
(Проверяем результат:

Код: Выделить всё

GRASS> v.db.select pnts
  • cat|flamo|x|y
    1||-11|-42
    2||17|-14
    ... ... ...
    23|2007|2|-43
    ... ... ...
)[/i]
Заносим значения -1 в те точки, в которых поле flamo осталось пустым:

Код: Выделить всё

GRASS> echo "UPDATE pnts SET flamo=-1 WHERE flamo is null" | db.execute
(Проверяем результат:

Код: Выделить всё

GRASS> v.db.select pnts
  • cat|flamo|x|y
    1|-1|-11|-42
    2|-1|17|-14
    ... ... ...
    23|2007|2|-43
    ... ... ...
)
[/i]
См.
v.random
v.db.addtable
v.what.rast
v.what.vect
v.db.select
db.execute

Ответить

Вернуться в «GRASS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей