Как мне написать несколько шейп-файлов в ASCII в R - PullRequest
0 голосов
/ 01 июля 2018

У меня есть прикрепленный код, который работает для преобразования отдельного многоугольника в формат ASCII, однако у меня есть 27000 многоугольников, поэтому мне нужно иметь возможность проходить через них все. В настоящее время этот цикл принимает один и тот же многоугольник и записывает его 27084 раза, каждый раз перезаписывая вывод.

Какие изменения мне нужно внести, чтобы он взял каждый многоугольник в каталоге и записал в отдельный файл * .ascii для каждого?

P.S. Созданные файлы ascii включают «0.0000000» в качестве первого значения, есть идеи, как этого избежать?

код

library("rgdal")
library("sp")
library("raster")
library("stringr")

wd<- "path//to//directory"
setwd(wd)

PatchShapes <- list.files(wd, pattern = "\\.shp$")  


asciiID<- paste0("", str_pad(1:27084, width = 2, side = "left", pad = 0), 
".ascii") #List to save each ASCII as 

## Raster to be used as extent templates
template<-raster("path//to//raster//file.txt") 

for (i in 1:27084){

p <- readOGR(dsn= wd , layer = "1") #Need to turn this "1" into i

pr<-raster()       

extent(pr)<-extent(template)  
template raster

res(pr)<-1000                

patch<-rasterize(x=p, y=pr ,field= p$Patch)  


writeRaster(patch, filename = "place//to//save//ASCII//file",   
format="ascii",overwrite=T, NAflag=0) }

1 Ответ

0 голосов
/ 02 июля 2018

Кажется, вы хотели бы что-то вроде этого:

library("raster")
library("rgdal")

PatchShapes <- list.files(pattern = "\\.shp$")  

template <- raster("path//to//raster//file.asc") 
res(template)<-1000                

for (i in 1:length(PatchShapes)) {
    s <- shapefile(PatchShapes[i])
    f <- paste0(i, ".asc")
    patch <- rasterize(s, template ,field= s$Patch, filename=f, overwrite=TRUE, NAflag=0) 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...