2017-02-07 53 views
1

我有一套tiff文件,可以在Iowa State University的像素位置顯示整個美國大陸的對流天氣(NAD83投影)。我的目標是將像素位置轉換爲緯度/經度數據。我在TIFF文件中讀取數據的SpatialGridDataFrame與...rDGAL,Tiff文件和WorldFile

imageData = readGDAL(fileNameDir, silent = TRUE) 

我讀的地方,readGDAL將尋求如果TIFF文件不存在的投影數據world文件,所以我創造了這樣一個文件(nad83WorldFile。 wld)與必要的信息,see info at ESRI。我將wld文件放在與我的R腳本相同的目錄中。 wld文件的係數爲:

A = 0.01 
B = 0.0 
C = 0.0 
D = -0.01 
E = -126.0 
F = 50.0 

我尋求有關pixel-to-lat/lon投影的建議和指導。在上面的超文本鏈接中提供了readGDAL fileNameDir示例的數據文件和世界文件格式的文檔。我必須將文件擴展名從* .png更改爲* .tiff。

回答

1

通常情況下,如果你知道你的數據預測,但這一預測是不是你的TIF文件的一部分,你可以簡單地在你的[R對象添加它在導入後:

proj4string(imageData) <- CRS("your projection") 

我喜歡使用EPSG的是,如果你的TIF在GoogleEarth的投影例如,我會做:

proj4string(imageData) <- CRS("+init=EPSG:4326") 

只要找到你NAD83準確預測是什麼(這個網站可以幫助http://spatialreference.org/)。

然後你就可以在你選擇投影的重新投影它:

imageDataProj <- spTransform(imageDataProj, CRS("your new projection")) 

作爲一個方面說明,我總是喜歡使用raster包處理光柵格式。然而,用R改變大光柵文件的投影可能會很挑剔,所以現在我直接使用GDAL(通過gdalwarp)。您可以使用gdalUtils包輕鬆地在R中調用所有gdal選項,但您必須將結果手動導入到R中。

EDITS以下從OP評論:

使用光柵包:

library(raster) 

加載TIF:

rr <- raster("C:\\temp\\n0r_201601011100.tif") 

爲您節省像素座標方程函數。注意到我改變了緯度功能(除去負號,但沒有使用它,你必須驗證)

Lon = function(JJ) 0.01 * JJ + 162 
Lat = function(II) 0.01 * II + 50.0 

獲取像素的原始光柵的程度座標:

ext.rr <- extent(rr) 

準備新的空光柵將被投射,有良好的分辨率和範圍:

rr2 <- raster(nrows=nrow(rr), ncols=ncol(rr), xmn=Lon([email protected]), xmx=Lon([email protected]), ymn=Lat([email protected]), ymx=Lat([email protected])) 

填補了這一新的柵格與修改後的值(你在COMM給了以下公式已廢除):

values(rr2) <- (values(rr) - 7) * 5 

,你會得到:

rr2 
    class  : RasterLayer 
    dimensions : 2600, 6000, 15600000 (nrow, ncol, ncell) 
    resolution : 0.01, 0.01 (x, y) 
    extent  : 162, 222, 50, 76 (xmin, xmax, ymin, ymax) 
    coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
    data source : in memory 
    names  : layer 
    values  : -35, 50 (min, max) 

注意,經緯度長的投影是自動拾取通過光柵功能。希望這是你在找什麼。

+0

這很有幫助。我的數據是在像素座標中:'Lat = -0.01 * I + 50.0','Lon = 0.01 * J + 162.',其中I和J是網格中每個單元格的直線座標。所以,我需要在執行任何投影更改之前先執行此操作。另外,什麼是最好的方法來變換每個單元格中的整數值:'y =(intX - 7)* 5'? –

+0

我已經更新了我的回答下面的評論 – Bastien

+0

我謙卑的尊重鞠躬。謝謝。 –