2015-09-18 1 views
0

J'essaie de convertir un fichier de forme polygone avec de petites valeurs. Les valeurs de la colonne propEmp vont de 0.000002 à 0.119419. C'est ma tentative:Rasterize SpatialPolygons dans R ignore les petites valeurs

# Load shapefile 
emp_planejado <- shapefile("./planejado/7_wgs/emp_planejado.shp") 

# Load raster model 
r_bioma<- raster("./_GRID/grid_caatinga_disol_64bit.tif") 

# List values from tipologia field 
tipologia<-unique(emp_planejado$tipologia) 


for (tp in tipologia){ 
# Select features for each value in tipologia 
tipo<- emp_planejado[emp_planejado$tipologia==tp,] 

# Rasterize 
r_pol <- rasterize(tipo,r_bioma,field="propEmp",background=NA,mask=F) 

# Merge 
raster_merge <- merge(r_pol,r_bioma) 

# Save raster 
writeRaster(raster_merge,filename= paste0("./planejado/8_raster/",tp,"_planejado"),format="GTiff",NAflag=-9999,overwrite=TRUE) 
} 

r_bioma est un 64bit avec double trame de précision avec toutes les valeurs de pixel égale à 0.

Il n'y a pas de chevauchement entre les caractéristiques de ce polygone, juste délimitée au toucher, donc je ne n'utilise pas fun comme argument de rasterize.

Après rasterize, quand je vérifie valeurmin et maxValue de r_pol, au lieu d'obtenir 0.000002 et 0.119419, je reçois 0.08687903 et 0.1140689.

Je ne sais pas où est le problème. Pourriez-vous m'aider?

+0

Vous pourriez essayer avec 'gdalUtils :: gdal_rasterize', par ex. 'gdal_rasterize ('planjado/7_wgs/emp_planejado.shp', '_GRID/grid_caatinga_disol_64bit.tif', a = 'propEmp')'. – jbaums

Répondre

1

Votre question n'est pas claire, votre exemple n'est pas reproductible, et nous ne savons pas ce que vous essayez d'atteindre. Il est donc très difficile de fournir une aide significative.

Tout d'abord, r_pol est créé à l'intérieur d'une boucle, dans laquelle tipo est sous-définie, de sorte que l'on s'attendrait à ce que la plage de valeurs ne soit pas la même.

Plus fondamentalement, pourquoi faites-vous cette boucle complexe? Il semblerait que ce que vous voulez soit quelque chose comme le suivant, mais je ne peux pas le savoir car vous n'avez pas dit ce que vous vouliez accomplir.

library(raster) 
emp_planejado <- shapefile("./planejado/7_wgs/emp_planejado.shp") 
r_bioma <- raster("./_GRID/grid_caatinga_disol_64bit.tif") 

r_pol <- rasterize(emp_planejado, r_bioma, field="propEmp", background=0, filename="./planejado/8_raster/planejado.tif",overwrite=TRUE) 

Peut-être que cela ne le fait pas, mais il est difficile d'imaginer que vous réellement besoin de la boucle complexe que vous utilisez. Enfin, il se peut que certains polygones soient très petits et ne couvrent pas une cellule. Dans ce cas, leurs valeurs pourraient être perdues.

+0

Désolé si je ne me suis pas fait comprendre. La chose est: j'ai un shapefile polygone avec de nombreuses fonctionnalités et je veux faire une couche raster de chacun d'eux, c'est pourquoi j'ai fait la boucle. J'ai découvert quel était le problème, et c'était exactement ce que vous soupçonniez: il y avait des polygones avec une très petite surface, donc ils ont été ignorés dans la pixellisation. Pour résoudre ce problème, j'ai converti les polygones en points, puis pixellisé le fichier de formes des points et cela a bien fonctionné. Tous les valeus, même les petits, ont été parfaitement pris au bon pixel. Merci de votre aide! – Tiago

+0

Heureux que ça a aidé! – RobertH