Eu tenho um conjunto de dados de valores em uma grade de km nos EUA continentais. As colunas são "latitude", "longitude" e "observação", por exemplo:
"lat" "lon" "yield"
25.567 -120.347 3.6
25.832 -120.400 2.6
26.097 -120.454 3.4
26.363 -120.508 3.1
26.630 -120.562 4.4
ou, como um quadro de dados R:
mydata <- structure(list(lat = c(25.567, 25.832, 26.097, 26.363, 26.63),
lon = c(-120.347, -120.4, -120.454, -120.508, -120.562),
yield = c(3.6, 2.6, 3.4, 3.1, 4.4)), .Names = c("lat",
"lon", "yield"), class = "data.frame", row.names = c(NA, -5L))
(o conjunto completo de dados pode ser baixado como csv aqui )
Os dados são gerados a partir de um modelo de cultivo (destinado a ser ligado) em uma grade de 30 km x 30 km (de Miguez et al 2012 ).
Como posso convertê-los em um arquivo raster com metadados relacionados ao GIS, como projeção de mapa?
Idealmente, o arquivo seria um arquivo de texto (ASCII?) Porque eu gostaria que fosse independente da plataforma e do software.
proj +proj=lcc +lat_1=50.0 +lat_2=50.0 +units=km +lon_0=-145.5 +lat_0=1.0
. Não tenho certeza do que você está pedindo em relação a outro arquivo csv - como ele diferiria daquele vinculado na pergunta ou que seria produzido pela resposta aceita?Respostas:
Várias etapas necessárias:
Você diz que é uma grade regular de 1 km, mas isso significa que os longos não são regulares. Primeiro, você precisa transformá-lo em um sistema de coordenadas de grade regular, para que os valores X e Y sejam espaçados regularmente.
uma. Leia-o em R como um quadro de dados, com colunas x, y, rendimento.
b. Converta o quadro de dados em um SpatialPointsDataFrame usando o pacote sp e algo como:
c. Converta para o seu sistema de km regular, primeiro informando o que é CRS e depois spTransform para o destino.
d. Diga a R que isso está na grade:
Nesse ponto, você receberá um erro se suas coordenadas não estiverem em uma boa grade regular.
Agora use o pacote raster para converter em raster e defina seu CRS:
Agora dê uma olhada:
Agora escreva-o como um arquivo geoTIFF usando o pacote raster:
Esse geoTIFF deve ser legível em todos os principais pacotes GIS. A peça que falta obviamente aqui é a string proj4 para a qual converter: provavelmente será algum tipo de sistema de referência UTM. Difícil dizer sem mais alguns dados ...
fonte
r = Import[ "https://ebi-forecast.igb.illinois.edu/bety/miscanthusyield.csv", "Data"];
. Você pode obter uma plotagem rápida dos pontos posteriormente viadata = Rest[r]; ListPlot[data[[;; , {3, 2}]]]
(ouListPointPlot3D[data[[;; , {3, 2, 4}]]]
). Para reprojeções, comece com a ajudaGeoGridPosition
e faça algumas suposições inteligentes e referências cruzadas para descobrir o que está acontecendo :-). Aliás, a explicação de @ Spacedman é realmente relevante: a distorção métrica de 25 a 49 graus é igual a cos (25) / cos (49) = 1,38; isso é substancial.Desde que a pergunta foi respondida pela última vez, existe uma solução muito mais fácil usando a
rasterFromXYZ
função do pacote raster que encapsula todas as etapas necessárias (incluindo a especificação da cadeia CRS).fonte
/tmp/
~ 19 GB quando fiquei sem espaço em disco.merge()
os resultados juntos.