R에서 sp 객체 투영


35

다른 CRS (대부분 WGS84 위도 / 경도)에 여러 가지 모양 파일이있어 일반적인 투영 (예 : Albers Equal Area Conic)으로 변환하고 싶지만 문제가 좋아지면 다른 질문을 선택하는 데 도움을 요청할 수 있습니다 -한정된).

R에서 공간 통계 자료를 작성하는 데 몇 달을 보냈지 만 5 년 전이었습니다. 내 인생 에서 한 투영에서 다른 투영으로 sp객체 (예 :) 를 변환하는 방법을 기억할 수 없습니다 SpatialPolygonsDataFrame.

예제 코드 :

P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry"), verbose=TRUE, proj4string=P4S.latlon) 
# Shapefile available at 
#   http://www.dartmouthatlas.org/downloads/geography/hrr_bdry.zip 
#   but you must rename all the filenames to have the same 
#   capitalization for it to work in R

이제 SpatialPolygonsDataFrame적절한 프로젝션 정보가 있지만 원하는 프로젝션으로 변환하고 싶습니다. 나는 이것에 대해 다소 직관적이지 않은 이름의 기능이 있다고 생각하지만, 그것이 무엇인지 기억할 수 없습니다.

CRS를 변경하는 것이 아니라 좌표를 일치시키기 위해 ( "재 투영", "변환"등) 변경하고 싶습니다.

편집하다

이 shapefile에 대해 멕시코에 성가신 AK / HI 제외 :

library(taRifx.geo)
hrr.shp <- 
  subset(hrr.shp, !(grepl( "AK-" , hrr.shp@data$HRRCITY ) |
                                     grepl( "HI-" , hrr.shp@data$HRRCITY )) )
proj4string(hrr.shp) <- P4S.latlon

proj4 패키지를 사용한 프로젝션에 대한 이전 답변은 here . SpatialPolygonsDataFrame으로 이것을 시도하지 않았습니다.
Simbamangu

실제로 proj4가 Spatial 객체에서 작동하지 않는 것처럼 보이지만 아래 답변을 참조하십시오.
Simbamangu

2
공간 작업 뷰 : cran.r-project.org/web/views/Spatial.html 과 공간 데이터에 대한 나의 메모 [shameless plug] : maths.lancs.ac.uk/~rowlings/Teaching/UseR2012
Spacedman

답변:


44

spTransform()rgdal 에서 메소드를 사용할 수 있습니다. 예제를 사용하여 캔자스 (26978)의 경우 오브젝트를 NAD83으로 변환 할 수 있습니다.

library(rgdal)
library(maptools)

P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry", verbose=TRUE, proj4string=P4S.latlon)
plot(hrr.shp)

투사되지 않은

hrr.shp.2 <- spTransform(hrr.shp, CRS("+init=epsg:26978"))
plot(hrr.shp.2)

예상

새 투영에 저장하려면 :

writePolyShape(hrr.shp.2, "HRR_Bdry_NAD83")

편집 : 또는 @Spacedman의 제안에 따라 (CRS 정보로 .prj 파일을 작성) :

writeOGR(hrr.shp.2, dsn = getwd(), layer = "HRR_Bdry_NAD83", driver="ESRI Shapefile")

어떤 CRS를 투사할지 확실하지 않은 경우 다음 게시물을 참조하십시오.

데이터에 CRS가 없을 때 CRS를 정의 / 할당하려면 다음을 참조하십시오.


10
writePolyShape는 .prj 파일을 쓰지 않습니다. R에서 공간 객체의 CRS를 설정하기 위해 .prj 파일을 작성하고 읽으려면 rgdal에서 writeOGR을 사용하고 모양 파일을 읽으려면 readOGR을 사용해야합니다.
Spacedman

훨씬 더 나은 (그에 따라 편집)-감사합니다; .prj 파일을 생성한다는 것을 깨닫지 못했습니다! 그런데 페이지의 멋진 치트 시트.
Simbamangu

1
멕시코의 투영이 알래스카와 하와이 삽입물의 출현에 어떻게 영향을 미치는지는 이상합니다 :-).
whuber

@ whuber-흠, 그렇습니다 ... 누군가가 내 부적절한 게시물을 보여주는 실제지도가없는 내 게시물을 편집했습니다 ...
Simbamangu

@Simbamangu 죄송합니다.이 .shp 파일은 그래프를 추가하는 데 도움이 되려고했을 때 잘못 삽입 된 것을 포함하고 있지 않습니다.
Ari B. Friedman

7

sf-package가 도입 되었으므로 ( 여기서 소품 sf1 , sf2 , sf3 , sf4 및 마이그레이션 안내서를 참조하십시오 ) st_transform()벡터 데이터를 다시 투영 하는 데 사용할 수 있습니다 .

require(sf)

hrr_sf = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
    crs = 4326) # has +proj=longlat +datum=WGS84
plot(hrr_sf)

hrr_sf2 = st_transform(hrr_sf, "+init=epsg:26978") # 1st option sp::CRS() not working/ needed
hrr_sf2 = st_transform(hrr_sf, 26978) # 2nd option - EPSG code as an integer
plot(hrr_sf2)

# don't think about doing this:
hrr_sf3 = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
    crs = 26978)

# Output layer
st_write(hrr_sf2, dsn = getwd(), layer = "HRR_Bdry_NAD83", driver = "ESRI Shapefile")

sf는 앞으로 sp를 대체 할 것이며 sp와 비교할 때 단순성과 속도로 인해 몇 가지 장점을 가지고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.