根据纬度/经度从.txt中提取时间序列

时间:2016-05-11 18:02:25

标签: r coordinates

之前已经回答了类似的问题,但我无法找到解决我特定问题的方法:

我有一个带有辐照度值的.txt,我想在csv文件中提取特定纬度和离子的辐照度值的时间序列。 .txt文件的(头部)如下所示:

NCOLS 839
NROWS 679
XLLCORNER 112.025
YLLCORNER -43.975
CELLSIZE 0.05
NODATA_VALUE -999
-999 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999 -999  -999 -999 -999 -999...

该文件没有lon和lat列(这将是提取数据的简单方法)。然而它有一个标题:NCOLS,NROWS,XLLCORNER,......但我不知道如何使用看起来那样的文件提取纬度/长时间系列。

此外,一旦提取了特定纬度/经度的时间序列,我想用可能的nodata(-999)替换该系列的前一个和下一个值的平均值。

我使用的是R版本3.2.4。

其中一个.txt文件的可下载链接。请注意此文件是指某年/月/日/小时。一年中的小时数和文件数一样多。 http://www.mediafire.com/download/t7xl9adxz3764f3/solar_dni_20130102_00UT.txt

1 个答案:

答案 0 :(得分:2)

该文件是ESRI ASCII Raster format文件。将其名称更改为solar.asc.asc似乎 - 很遗憾 - 很重要),然后安装SDMTools包。完成后,您可以:

library(SDMTools)

dat <- read.asc("solar.asc")

df <- asc2dataframe("solar.asc")

它绝对是栅格数据(不是时间序列)。

更新

因为您需要完整的演练。

library(SDMTools)

# make sure you're in the same directory as your file
getwd()

## [1] "/Path/to/the/directory/with/the/data"

# make sure your original file is in the directory
file.exists("solar_dni_20130102_00UT.txt")

## [1] TRUE

# since the SDMTools functions seem to need ".asc" at the end
file.rename("solar_dni_20130102_00UT.txt",
            "solar_dni_20130102_00UT.asc")

# this reads it as a raster
dat <- read.asc("solar_dni_20130102_00UT.asc")

# check it out
str(dat)

##  asc [1:839, 1:679] NA NA NA NA NA NA NA NA NA NA ...
##  - attr(*, "xll")= num 112
##  - attr(*, "yll")= num -44
##  - attr(*, "cellsize")= num 0.05
##  - attr(*, "type")= chr "numeric"


# this reads it as a data.frame
df <- asc2dataframe("solar_dni_20130102_00UT.asc")

## working with solar_dni_20130102_00UT.asc ...

# check it out
str(dat)

##  asc [1:839, 1:679] NA NA NA NA NA NA NA NA NA NA ...
##  - attr(*, "xll")= num 112
##  - attr(*, "yll")= num -44
##  - attr(*, "cellsize")= num 0.05
##  - attr(*, "type")= chr "numeric"

# put things back the way they were
file.rename("solar_dni_20130102_00UT.asc",
            "solar_dni_20130102_00UT.txt")

而且,我们甚至可以证明这是一个ESRI ASCII光栅:

quick.map(dat, 0.5)

enter image description here

W00t!澳大利亚(文件中的lat / long已经把它送走了)。

更新#2

您可以通过执行以下操作来简化提取:

library(raster)

r <- raster.from.asc(dat)

as.numeric(extract(r, cbind(150.757, -26.918)))
## [1] 973