[GRASS/Советы] Генерация случайных точек и получение данных
Добавлено: 12 сен 2008, 09:08
				
				Генерация случайных точек и получение данных.
Для анализа зачастую требуется получить набор точек, случайно (с равномерным распределением) расположенных на некоторой территории, и, после после, заполнить таблицу атрибутов некоторыми значениями, считанными с карты.
1) Генерируем 1000 точек (создастся слой pnts)
2) Создаем и присоединяем к сгенерированным точкам таблицу базы данных, состоящей из целочисленых полей - "flamo,x,y". В последствии эту таблицу нужно будет заполнить данными.
  
Далее зависит от того, с каких слоев считывать данные - с векторных или растровых.
Допустим, у нас есть слой fires с полигонами и с каждым полигоном связана запись из атрибутивной таблицы. Среди ее полей есть поле с названием YEAR. Пусть для всех точек, которые попадают в полигоны поле flamo должно содержать соотв. значение YEAR. Если точка не попала в полигон, то пусть flamo будет равно -1.
Далее. Пусть у нас есть два растра slope.1 и slope.2. В поле x атрибутов точек положим значение ячейки растра slope.1, в которую попадает точка. В поле y - значения из растра slope.2.
3) Считываем данные с растров:
  (Проверяем результат:
  
[/i]
4) Считываем данные с вектора:
  (Проверяем результат:
  
Заносим значения -1 в те точки, в которых поле flamo осталось пустым:
  (Проверяем результат:
  
[/i]
См.
v.random
v.db.addtable
v.what.rast
v.what.vect
v.db.select
db.execute
			Для анализа зачастую требуется получить набор точек, случайно (с равномерным распределением) расположенных на некоторой территории, и, после после, заполнить таблицу атрибутов некоторыми значениями, считанными с карты.
1) Генерируем 1000 точек (создастся слой pnts)
Код: Выделить всё
GRASS> v.random out=pnts n=1000Код: Выделить всё
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
 ... ... ...
Заносим значения -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