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 텍스트를 인자로 읽은 경우 인자 레벨 대신 숫자 값을 얻습니다.
  • rgdal및 sf다른 파일 및 데이터베이스 유형에 액세스 혼란 방법이 (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.