[英]Converting HDF to georeferenced file (geotiff, shapefile)
我正在處理有關海洋主要生產力的28個HDF4文件(可以在此處找到年度.tar文件: http : //orca.science.oregonstate.edu/1080.by.2160.monthly.hdf.cbpm2.v.php )目標是進行一些計算(我需要計算每個區域的濃度並獲得幾年的平均值,即在空間上合並所有文件),然后將它們轉換為可以在ArcGIS中使用的地理參考文件(最好是shapefile或geotiff)。
我嘗試了幾種轉換為ASCII或光柵文件,然后使用gdalUtils
工具(例如gdal_translate
和get_subdatasets
添加投影的方法。 但是,由於HDF4文件未按標准命名(與MODIS文件不同),因此后者不起作用,並且我無法訪問這些子集。
這是我用來轉換為柵格的代碼:
library(raster)
library(gdalUtils)
setwd("...path_to_files...")
gdalinfo("cbpm.2015060.hdf")
hdf_file <- "cbpm.2015060.hdf"
outfile="testout"
gdal_translate(hdf_file,outfile,sds=TRUE,verbose=TRUE)
file.rename(outfile,paste("CBPM_test",".tif",sep=""))
rast <- raster("CBPM_test.tif")
wgs1984 <- CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
projection(rast) <- wgs1984
#crs(rast) <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
plot(rast)
writeRaster(rast, file="CBPM_geo.tif", format='GTiff', overwrite=TRUE)
產生的投影完全關閉。 我非常感謝您提供幫助(最好是批量處理)如何做到這一點(通過任何有效的格式進行轉換)。
您尚未設置柵格的范圍,因此假設柵格的比例為1:ncols,1:nrows,這對緯度較長的數據集來說是不合適的...
gdalinfo
表示其意圖是成為一個完整的領域,因此,如果我這樣做:
extent(rast)=c(xmn=-180, xmx=180, ymn=-90, ymx=90)
plot(rast)
writeRaster(rast, "output.tif")
我看到的柵格具有完整的全球緯度-緯度范圍,當我將柵格加載到QGIS中時,它會與OpenStreetMap很好地覆蓋。
文件中似乎沒有足夠的元數據來進行精確的投影(地球半徑和偏心率是多少?),所以不要嘗試對這些數據進行小規模的處理...
外觀如下:
另外,您已經跳過了一些不必要的內容以閱讀本文。 您可以直接閱讀HDF並設置其范圍和投影:
> r = raster("./cbpm.2017001.hdf")
我們得到什么:
> r
class : RasterLayer
dimensions : 1080, 2160, 2332800 (nrow, ncol, ncell)
resolution : 1, 1 (x, y)
extent : 0, 2160, 0, 1080 (xmin, xmax, ymin, ymax)
coord. ref. : NA
data source : /home/rowlings/Downloads/HDF/cbpm.2017001.hdf
names : cbpm.2017001
設定范圍:
> extent(r)=c(xmn=-180, xmx=180, ymn=-90, ymx=90)
和投影:
> projection(r)="+init=epsg:4326"
土地價值為NA:
> r[r==-9999]=NA
編寫,繪制:
> writeRaster(r,"r.tif")
> plot(r)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.