Возможна ли зональная статистика в PostGIS2?

12

Теперь с postgis2, который поддерживает растры по умолчанию, можно ли проводить анализ зональной статистики?

Я в Google, но я не нашел ничего твердого? Есть ли урок, чтобы начать меня?

Может кто-нибудь дать мне пример SQL, как это сделать?

РЕДАКТИРОВАТЬ :

Обновленный (упрощенный) запрос в соответствии с упоминанием в блоге Арагона:

CREATE TABLE sum_pop3 AS 
 SELECT gid, SUM((ST_SummaryStats(ST_Clip(rast,1,geom))).sum)
 FROM perez_grid, ls_den
 WHERE ST_Intersects(geom,rast) 
GROUP BY gid;
nickves
источник
Привет @ nickves, тебе когда-нибудь удавалось заставить работать зональную статистику? Я не могу заставить работать обновленный запрос.
Клифф
@CliffPatterson Помните, я работал - с тех пор прошло три года, многое изменилось. Я собираюсь попробовать запрос позже и подтвердить или обновить.
Никв
должно быть, что-то изменилось с того момента, когда я использовал это в последний раз; в данный момент недостаточно времени, чтобы увидеть, где пинает запрос. если вам удастся это исправить, пожалуйста, обновите бесплатно
nickves
Проверьте мой недавний вопрос на эту тему.
Клифф

Ответы:

6

вы должны проверить магазин, обработку и анализ растровых данных в пространственных базах данных PostgreSQL / PostGIS документа Пьера Расин и Стив Камминг , который был представлен на FOSS, здесь . Существует множество функций, определенных как растровая статистика для решения вашей проблемы. я думаю, что ST_SummaryStats поможет вам по поводу зональной статики, конечно, недостаточно.

ST_SummaryStats(raster) превратит вас в набор записей (мин, макс, сумма, среднее, стандартное отклонение, количество (пикселей данных)).

Postgis 2.0 поддерживает анализ зональной статистики с некоторыми SQL-запросами, над которыми вы работаете. я наткнулся на хорошую документацию в сети о зональной статистике с esri vs postgis 2.0. Вы должны проверить некоторую информацию в Moving Spatial здесь . им обоим был дан один и тот же статистический результат с некоторыми сложными запросами.

пример запроса, который был взят с сайта Энтони Лопеса, о котором я упоминал ранее ...

 CREATE TABLE sum_pop2 AS
WITH 
   feat AS (SELECT gid, geom FROM perez_grid AS b ),
   b_stats AS
(SELECT  gid, (stats).*
FROM (
SELECT gid, ST_SummaryStats(ST_Clip(rast,1,geom)) AS stats
FROM ls_den
INNER JOIN feat
ON ST_Intersects(feat.geom,rast) ) AS foo )
SELECT gid, SUM(count) AS cell_count
  ,SUM(sum) AS population
FROM b_stats
 WHERE count > 0
GROUP BY gid
ORDER BY gid;

Esri Zonal Статистика результат: Население: 207 578 Количество клеток: 14 400

Результат метода Postgis: население: 207 578, количество клеток: 14 400.

Разница в процентах населения: 0%

Я еще не пробовал, но Энтони упомянул, что есть некоторые проблемы с производительностью при растровом анализе с Postgis.

я надеюсь, что это поможет вам ...

Арагон
источник
Это хорошая отправная точка!
Никв