2017-02-07 10 views
1

픽셀 위치에 미국 대륙 (NAD83 프로젝션)에서 대류 날씨가 표시되는 티파니 파일이 Iowa State University입니다. 내 목표는 lat/lon 데이터로 픽셀 위치를 변환하는 것입니다. 나는 readGDAL 더 프로젝션 데이터가 TIFF 파일에 존재하지 않는 경우 세계가 파일 찾는 것 선가 ...rDGAL, Tiff Files 및 WorldFile

imageData = readGDAL(fileNameDir, silent = TRUE) 

와 SpatialGridDataFrame으로 TIFF 파일의 데이터를 읽어, 그래서 나는 (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 

나는 픽셀 - 투 - 위도/경도 프로젝션에 대한 조언과 지침을 추구합니다. fileNameDir의 readGDAL 예제에 대한 데이터 파일과 World File 형식에 대한 문서는 위의 하이퍼 텍스트 링크에서 제공됩니다. 파일 확장명을 * .png에서 * .tiff로 변경해야했습니다. 당신이 당신의 데이터가 예상되는 것을 알고 있지만,이 투사 당신의 TIF 파일의 일부가 아니라고 경우

답변

1

일반적으로, 당신은 단순히 수입 한 후 R 객체에 추가 할 수 있습니다 :

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

내가 좋아하는 당신의 TIF 예를 들어에서 GoogleEarth 프로젝션에 있다면 그것을 위해 EPSG를 사용하여, 나는 할 것이다 :

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

그냥 당신이 NAD83 정확한 프로젝션 (이 사이트가 http://spatialreference.org/을 도울 수) 손쉽게 찾을 수 있습니다.

그럼 당신은 투사의 선택에 그것을 재 투영 할 수 있습니다 보조 노트로

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

을, 나는 항상 래스터 형식을 처리하기위한 raster 패키지를 사용하여 선호합니다. 그러나 R로 큰 래스터 파일의 투사를 변경하는 것은 까다로울 수 있으므로 이제 GDAL을 직접 사용합니다 (gdalwarp 통해). gdalUtils 패키지를 사용하여 모든 gdal 옵션을 R에서 아주 쉽게 호출 할 수 있지만 결과를 R로 다시 가져와야합니다. 영업 이익에서 코멘트 다음

편집 :

래스터 패키지 사용 :

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])) 

채우기이 새로운 래스터 :

투사됩니다 비어있는 새 래스터 준비는 좋은 해상도와 범위를 가지고 엔트) :

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

나는 겸손한 태도로 인사합니다. 고맙습니다. –