R에서 shapefile을여시겠습니까? [닫은]


64

추가 지리 통계 분석에 사용하려면 R의 ArcMap에서 모양 파일을 열어야합니다. ASCII 텍스트 파일로 변환했지만 R에서는 data.frame으로 인식됩니다. x와 y가 숫자가 아닌 것으로 인식되는 즉시 좌표 기능이 작동하지 않습니다.

당신은 그것을 처리하는 데 도움이 될 수 있습니까?


1
어떤 종류의 shapefile? X 및 Y 열이 있기 때문에 포인트를 가정하고 있습니까?
Simbamangu

답변:


54

shapefile을 직접 사용하십시오. rgdal또는 sf패키지를 사용 하여이 작업을 쉽게 수행 하고 개체의 모양을 읽을 수 있습니다 . 두 패키지 모두 dsn에 대해-shapefile의 경우 디렉토리 인 데이터 소스 와 layer-shapefile 이름에서 확장자를 뺀 데이터 소스 를 제공해야합니다 .

# Read SHAPEFILE.shp from the current working directory (".")

require(rgdal)
shape <- readOGR(dsn = ".", layer = "SHAPEFILE")

require(sf)
shape <- read_sf(dsn = ".", layer = "SHAPEFILE")

(rgdal를 들어, OSX 또는 Linux에서 데이터 소스 (같은 홈 디렉토리의 '~'속기를 사용할 수 없습니다 dsn. 그렇지 않으면 당신은 메시지 "공개 데이터 소스 수 없다"는 인정을 얻을 것이다 -) 디렉토리를 sf패키지하지 않습니다 다른 장점들 중에서도 이러한 제한이 있습니다.)

이렇게하면 Spatial * DataFrame (점, 선 또는 다각형) 인 객체가 제공됩니다. 속성 테이블의 필드는 일반 데이터 프레임과 같은 방식으로 (예 : shape$IDID 열) 액세스 할 수 있습니다 .

가져온 ASCII 파일을 사용하려면 텍스트 (문자) x 및 y 필드를 숫자로 변환해야합니다. 예 :

shape$x <- as.numeric(as.character(shape$x))
shape$y <- as.numeric(as.character(shape$y))
coordinates(shape) <- ~x + y

편집 2015-01-18 : rgdal은 주로 투영 정보를 자동으로 읽고 쓰는 점에서 maptools보다 조금 낫습니다.

노트:

  • 중첩 as.numeric(as.character())함수-ASCII 텍스트를 인자로 읽은 경우 인자 레벨 대신 숫자 값을 얻습니다.
  • rgdalsf다른 파일 및 데이터베이스 유형에 액세스 혼란 방법이 (A GPX 파일을 예를 DSN을 파일 이름이며, 같은 중간 점, 트랙 포인트 등 같은 층 개별 구성 요소), 온라인 예를주의 깊게 읽기가 필요하다.

R은 숫자 필드를 구문 분석해야하므로 x와 y에 특수 문자 유형이 있다고 생각합니다. 또한 가져 오기시 다르게 지정하지 않는 한 문자 필드는 요인으로 강제됩니다. 따라서 간단한 "숫자"감속은 작동하지 않습니다. 또한 maptools 대신 "rgdal"에서 "readORG"를 사용합니다.
Jeffrey Evans

@Jeffrey, readOGR은 확실히 더 좋은 방법입니다-gis.SE에서 나중에 R 질문에 대한 토론을보십시오. 요인 강제에 대한 좋은 지적; as.character문제를 해결하기 위해 중첩 으로 업데이트됩니다 .
Simbamangu

~를 사용할 수 있지만 디렉토리에서 path.expand를 호출해야합니다 (예 : readOGR (dsn = path.expand ( "~ / Downloads / cb_2016_us_zcta510_500k /"), layer = "cb_2016_us_zcta510_500k")
hd1

3
어떻게 든 나는 여전히이 정답에 대한 설명이 필요했다. dsn="directory where the shapefile, projection file, etc are located" layer="name of the file without .shp extention"
Ufos

나는주의 할 dsn인수가 후행 슬래시를 포함 할 수 없습니다 --- 예를 들면 dsn = "C:/Users/Downloads/"해야한다 dsn = "C:/Users/Downloads". 이것이 누군가의 좌절을 해결하기를 바랍니다 ...
Kim

21

나는 Simbamangu에 동의하고 shapefile을 유지한다는 측면에서 gissolved하지만 특히 rgdal 라이브러리에주의를 기울이고 싶습니다. NCEAS에 gissolved가 제안한 링크를 따르고 rgdal에 대한 지시 사항을 따르십시오. 일부 기계에는 설치하기가 어려울 수 있지만 투영에있어 결과를 크게 향상시킬 수 있습니다.

maptools 라이브러리는 훌륭하며 읽고있는 shapefile의 투영을 정의 할 수 있지만 proj4 형식으로 해당 투영을 지정하는 방법을 알아야합니다. 예를 들면 다음과 같습니다.

project2<-"+proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80    
   +datum=NAD83 +units=m +no_defs" #USA Contiguous Equidistant Conic Projection
data.shape<-readShapePoly("./MyMap.shp",IDvar="FIPS",proj4string=CRS(project2))
plot(data.shape)

이 경로 를 사용하려면 proj4 형식의 투영 모양을 파악할 수있는 장소로 http://spatialreference.org 를 권장 합니다. rgdal은 ESRI shapefile의 .prj 파일 (shapefile에 대한 ESRI의 투영 정의를 포함하는 파일)을 읽어서 쉽게 만들 수 있습니다. 같은 파일에서 rgdal을 사용하려면 다음과 같이 작성하면됩니다.

library(rgdal)
data.shape<-readOGR(dsn="C:/Directory_Containing_Shapefile",layer="MyMap")
plot(data.shape)

단일 shapefile로 작업하는 경우이 작업을 수행하지 않고도 스케이트를 타는 것이 가능하지만 여러 데이터 소스를 보거나 Google Maps로 오버레이를 시작하자마자 투영을 좋은 형태로 유지하는 것이 필수적입니다.

포인트 패턴 가져 오기 및 작업에 관한 많은 자료를 포함하여 R의 공간 데이터에 대한 유용한 연습을 위해 https://csde.washington.edu/workshop/point-patterns-and-raster에 온라인으로 오래된 코스 자료가 있습니다. -surfaces / ( 여기 에서 더 많은 워크샵을 찾을 수 있습니다 )는 이러한 방법이 실제로 어떻게 비교되는지 확인할 수 있습니다.


공간 참조 정보의 경우 +1 ... 특히 프로젝션의 정렬 유지를 강조하는 경우!
Simbamangu

@csfowler, readOGR을 사용하려고했지만 .prj 파일을 가져 오지 않습니다. 왜 그런지 알아? 생물학 부서의 UW에도 있습니다.
Herman Toothrot

@ user4050, 코드를 보지 않고 알기가 어렵습니다. 동일한 디렉토리에 .prj 파일이 있다고 가정합니까? 그리고 rgdal이 shapefile임을 알고 있는지 확인하기 위해 encoding = "ESRI Shapefile"값을 사용 했습니까?
csfowler


17

sf라이브러리를 사용 하여에서 Shapefile을 직접 열 수 있습니다 R. rgdal라이브러리 보다 빠릅니다. 여기 에서 R- 벤치 마크의 간단한 기능을 확인하십시오 . sf패키지 에 대한 자세한 내용은 프로젝트 홈페이지 r-spatial을 확인하십시오 .

# Load library
library('sf')

# Load shapefile
shapename <- read_sf('~/path/to/file.shp')

11

2017의 쉬운 해결책 shapefile()raster라이브러리 의 기능입니다 .

#Load library
library(raster)

#Load shapefile
shp <- shapefile("myshapefile")

업데이트 : 이것은 2019 년에도 여전히 좋은 옵션입니다.


온라인 소스에서 가져올 수 있습니까? 나
나는 델 토로

@IDelToro 직접 아닙니다. 먼저 하드 드라이브에 다운로드 한 다음 여기에서로드해야합니다.
Christopher

6

또 다른 대안은 다음을 제공 하는 fastshp 라이브러리 를 사용 하는 것입니다.

큰 ESRI shapefile (.shp) 처리를위한 루틴. 여기에는 점을 읽고, 얇게하고, 점을 포함하는 모양에 일치시키는 것이 포함됩니다. 이 패키지의 주요 목표는 큰 모양 파일 (수백만 포인트)을 지원하는 속도를 제공하는 것입니다. 다른 shapefile 패키지보다 몇 배나 더 빠른 속도입니다.

다음은 ggplot2와 함께 사용하는 방법에 대한 SE의 질문입니다.

ggplot2에서 fastshp를 통해로드 된 shapefile을 플로팅하려면 어떻게해야합니까?


1
read.shp 함수가 sp 객체를 생성하지 않는다는 것이 약간 성가신 것으로 나타났습니다. 공간 R 커뮤니티가 공간 객체를 다루기위한 사실상의 표준으로 이것을 수렴하고 있다는 것을 감안할 때, 나는 이것이 다소 조잡하다는 것을 알았습니다. 충분한 RAM과 64 비트 OS가 있다면 큰 데이터를 읽는 것은 그리 큰 문제가되지 않습니다. 8GB RAM을 사용하면 문제없이 rgdal을 사용하여 30M 포인트와 2.5M 다각형을 읽었습니다. 여기 ggplot2와 SP 객체를 사용하는 방법에 대한 몇 가지 방향은 다음과 같습니다 github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles
제프리 에반스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.