Страница 1 из 1
Как посчитать кол-во объектов каждого ранга
Добавлено: 08 дек 2013, 13:22
bolotoved
Есть точечный векторный слой, в атрибутивной таблице - колонка с годами. Нужно посчитать количество точек приходящихся на каждый год. Пробовал следующие модули и команды GRASS:
Код: Выделить всё
v.category input=mod14_hmao option=report type=point
v.db.univar table=mod14_hmao column=year
v.to.db -p map=mod14_hmao type=point option=count
Нужного результата не получилю
Получается считать с пом. v.univar и запроса по конкретномку году, но тогда нужно вручную выковыривать значения за каждый год:
Код: Выделить всё
v.univar -e map=mod14_hmao column=year where="year=2007"
Какую команду нужно использовать, чтобы получить отчет вида:
Код: Выделить всё
year point_count
2000 2346
2001 3456
2002 7539
.... ....
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 08 дек 2013, 14:33
rhot
Команда
db.select:
Код: Выделить всё
db.select sql="SELECT DISTINCT year, count(*) AS point_count FROM mod14_hmao" driver=pg
Условие: таблицы должны храниться в PostgreSQL
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 08 дек 2013, 14:45
KolesovDmitry
Запрашиваемой команды не знаю, но если команда
bolotoved писал(а):
Код: Выделить всё
v.univar -e map=mod14_hmao column=year where="year=2007"
делает то, что нужно, то можно просто ее зациклить по годам:
Код: Выделить всё
for YEAR in $(v.db.select -c mod14_hmao col='year' where="not year is null" | sort -u)
do
v.univar -e map=mod14_hmao column=year where="year=$YEAR"
done
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 08 дек 2013, 14:59
bolotoved
rhot писал(а):Условие: таблицы должны храниться в PostgreSQL
Это крутоватое условие, особенно для пользователей windows.
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 08 дек 2013, 15:01
bolotoved
KolesovDmitry писал(а):Запрашиваемой команды не знаю, но если команда
bolotoved писал(а):
Код: Выделить всё
v.univar -e map=mod14_hmao column=year where="year=2007"
делает то, что нужно, то можно просто ее зациклить по годам:
Код: Выделить всё
for YEAR in $(v.db.select -c mod14_hmao col='year' where="not year is null" | sort -u)
do
v.univar -e map=mod14_hmao column=year where="year=$YEAR"
done
Эта команда работает, но на выходе получается неудобоваримое, требующее парсинга:
Код: Выделить всё
GRASS_INFO_WARNING(3323,1): Incompatible vector type(s) specified, only number of features, minimum, maximum and range can be calculated
GRASS_INFO_END(3323,1)
number of features with non NULL attribute: 2699
number of missing attributes: 114146
number of NULL attributes: 0
minimum: 2000
maximum: 2000
range: 0
sum: 0
GRASS_INFO_WARNING(3332,1): Incompatible vector type(s) specified, only number of features, minimum, maximum and range can be calculated
GRASS_INFO_END(3332,1)
number of features with non NULL attribute: 1208
number of missing attributes: 115637
number of NULL attributes: 0
minimum: 2001
maximum: 2001
range: 0
sum: 0
GRASS_INFO_WARNING(3343,1): Incompatible vector type(s) specified, only number of features, minimum, maximum and range can be calculated
GRASS_INFO_END(3343,1)
number of features with non NULL attribute: 2544
number of missing attributes: 114301
number of NULL attributes: 0
minimum: 2002
maximum: 2002
range: 0
sum: 0
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 08 дек 2013, 16:17
KolesovDmitry
bolotoved писал(а):KolesovDmitry писал(а):Запрашиваемой команды не знаю, но если команда
bolotoved писал(а):
Код: Выделить всё
v.univar -e map=mod14_hmao column=year where="year=2007"
делает то, что нужно, то можно просто ее зациклить по годам:
Эта команда работает, но на выходе получается неудобоваримое, требующее парсинга:
Нужно просто настроить вывод, например, сказать, что тебе интересны только точки (type=point) и, опционально, вывод в машинно читаемом виде (-g)
Код: Выделить всё
for YEAR in $(v.db.select -c mod14_hmao col='year' where="not year is null" | sort -u)
do
v.univar -g map=mod14_hmao column=year type=point where="year=$YEAR"
done
Полученный вывод будет легко офильтровать:
Код: Выделить всё
for YEAR in $(v.db.select -c mod14_hmao col='year' where="not year is null" | sort -u)
do
v.univar -g map=mod14_hmao column=year type=point where="year=$YEAR"
done | grep "n="
Выглядит не очень удобно для использования, но на этой основе легко сделать свой собственный модуль v.stat.group -- один раз написать код и потом вызывать его по мере надобности.
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 09 дек 2013, 18:53
bolotoved
Работает, но при grep "n=" много еще лишнего отфильтровывается:
Код: Выделить всё
n=2699
min=2000
mean=2000
population_coeff_variation=0
n=1208
min=2001
mean=2001
population_coeff_variation=0
n=2544
min=2002
mean=2002
population_coeff_variation=0
n=8253
min=2003
mean=2003
population_coeff_variation=0
Видимо, нужно действительно экспортировать в какую-нибудь БД для запросов...
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 09 дек 2013, 19:38
Александр Мурый
bolotoved писал(а):Работает, но при grep "n=" много еще лишнего отфильтровывается:
Видимо, нужно действительно экспортировать в какую-нибудь БД для запросов...
DBF --> SQLite?
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 09 дек 2013, 20:02
KolesovDmitry
bolotoved писал(а):Работает, но при grep "n=" много еще лишнего отфильтровывается
Можно указать, что "n=" должен быть в начале строки:
Или вообще использовать тяжелую артиллерию -- выполнить вывод команды v.univar -g map=mod14_hmao column=year type=point where="year=$YEAR" как программу, тогда вместо вывода на печать
Код: Выделить всё
n=2699
min=2000
mean=2000
population_coeff_variation=0
...
будет производиться присваивание, т.е. переменным n, min, mean, population_coeff_variation будут назначены соответствующие значения, и с полученными переменными можно делать уже все, что душа пожелает:
Код: Выделить всё
for YEAR in $(v.db.select -c mod14_hmao col='year' where="not year is null" | sort -u)
do
eval $(v.univar -g map=mod14_hmao column=year type=point where="year=$YEAR")
echo $YEAR ---> $n
done
Re: Как посчитать кол-во объектов каждого ранга
Добавлено: 09 дек 2013, 20:04
KolesovDmitry
Александр Мурый писал(а):bolotoved писал(а):Работает, но при grep "n=" много еще лишнего отфильтровывается:
Видимо, нужно действительно экспортировать в какую-нибудь БД для запросов...
DBF --> SQLite?
Кстати, вполне себе вариант. В нормальной базе работать гораздо удобнее.