2011-04-27 4 views
5

Existe-t-il une alternative open source pour l'outil de statistiques de zone (ArcGIS Spatial Analyst)? Quel est le meilleur outil (que je peux utiliser dans le script) pour compter les statistiques des fichiers raster?Statistiques zonales QGIS

Répondre

2

vous pouvez utiliser le package de trame dans R

library(raster) 
v <- raster('raster filename') 
z <- raster('zones raster filename') 
zv <- zonal(v, z, fun=mean) 
+1

voir l'aide (zonale) dans R pour un exemple exécutable avec des données d'échantillon – Spacedman

1

-moi si je me trompe, RobertH, mais je crois zonale() exige que les zones sont déjà « pixellisés » dans un certain sens, alors que beaucoup fois on voudra les statistiques des cellules raster qui tombent dans les polygones. Les différentes méthodes de recouvrement dans R dans le paquet sp (voir: "méthodes de superposition") sont nécessaires pour cela, mais si je me trompe je serais heureux de l'entendre. Je préfère nettement le paquetage raster à l'utilisation de SpatialGridsDataFrames, mais je pense qu'il faut compter sur les classes sp pour mélanger les polygones et les données maillées. Ce qui est correct, sauf qu'il devient problématique car il manque la gestion de la mémoire du paquetage raster, ce qui rend les opérations de style point-dans-polygones très difficiles à faire dans R sur les rasters de grande taille. Je suis également amené à croire, mais je n'ai pas essayé, que cela peut être fait dans GRASS, et/ou via QGIS, avec la prochaine version de QGIS (1.7) pour avoir une sorte de fonctionnalité zonale intégrée .

3

Vous pouvez le faire avec GRASS en utilisant diverses méthodes. Lequel convient le mieux dépendra de vos données et de la sortie requise. Notez que vous pouvez également utiliser GRASS depuis QGIS à l'aide de la boîte à outils GRASS ou de la boîte à outils Sextante.

Supposons que vous avez:

  • une carte vectorielle, par exemple, vector_zones avec les zones définies dans la colonne myzones dans la table d'attributs.
  • une couche raster « valeurs » pour lesquelles vous voulez calculer vos statistiques zonales

r.statistics

Pour utiliser r.statistics, vous devez d'abord convertir la carte vectorielle à une couche de trame, que vous pouvez faire avec v.to.rast. Ensuite, utilisez r.statistics pour calculer les statistiques zonales.

v.to.rast input=vector_zones output=zones column=myzones 
r.statistics base=zones cover=values out=outputmap method=average 

Cela vous donnera une nouvelle couche avec la statistique zonale choisie, ce qui pourrait être moyenne, le mode, la médiane, la variance, etc. (voir ci-dessus le lien de la page de manuel).

r.univar

La fonction r.univar fonctionne également sur des couches de trame.

v.to.rast input=vector_zones output=zones column=myzones  
r.univar map=values zones=zones output=output.file fs=; 

La sortie est une table avec les statistiques zonales.

v.rast.stats

Cela ne vous oblige pas à convertir la couche de vecteur à une couche de trame (ce qui est fait à l'interne). La fonction calcule des statistiques univariées de base par catégorie de vecteurs (cat) à partir de la carte raster.

v.rast.stats vector=vector_zones layer=1 raster=values column_prefix=val 

Les résultats sont téléchargés dans la table d'attributs de la carte vectorielle.

1

Le paquet Rasterstats est un bel outil open source qui a bien fonctionné pour moi: http://blog.perrygeo.net/2013/09/24/python-raster-stats/

j'ai commencé à l'utiliser comme un travail autour parce que la méthode ZonalStatistics de arcpy produisait une trame problématique qui conduisent à une erreur bizarre quand essayer de convertir le raster en tableau (https://gis.stackexchange.com/questions/110274/save-fails-on-raster-object-created-from-numpyarraytoraster). Rasterstats a bien fonctionné et fourni une solution efficace à mon problème.