Rでシェープファイルを開きますか?[閉まっている]


64

RのArcMapからシェープファイルを開いて、さらに地球統計分析に使用する必要があります。ASCIIテキストファイルに変換しましたが、Rではdata.frameとして認識されます。xとyが非数値として認識されるとすぐに、座標機能は機能しません。

それに対処するのを手伝ってもらえますか?


1
どのようなシェープファイルですか?X列とY列があるので、ポイントを想定していますか?
シンバマング

回答:


54

シェープファイルを直接使用します。あなたは簡単にこれを行うことができrgdalたりsf、パッケージ、及びオブジェクト形状をお読みください。提供する必要がある両方のパッケージdsn-シェープファイルの場合はディレクトリであるデータソース、およびlayer-拡張子を除いたシェープファイル名:

# 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さまざまな種類のファイルやデータベースにアクセスする混乱する方法があり(GPXファイルの場合、dsnはファイル名であり、ウェイポイント、トラックポイントなどの個々のコンポーネントを階層化します)、オンラインの例を注意深く読む必要があります。

Rは数値フィールドを解析する必要があるため、xとyには特殊な文字タイプがあると思います。さらに、インポート時に、別に指定されない限り、文字フィールドはファクターに強制されます。そのため、単純な「as.numeric」減速は機能しません。また、maptoolsではなく「rgdal」で「readORG」を使用します。
ジェフリーエヴァンス

@ Jeffrey、readOGRは間違いなくより良い方法です-後のRの質問に関する議論をgis.SEでご覧ください。因子強制に関する良い点; as.character問題を回避するためにネストされて更新されます。
シンバマング

〜を使用できますが、ディレクトリで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"。これは、誰かの欲求不満を解消するホープ...
キム・

21

私はシンバマングに同意し、シェープファイルを保持するという点で解決しましたが、特にrgdalライブラリに注意を向けたいと思います。NCEAS用にgissolvedが提案したリンクをたどり、rgdalの指示に従ってください。一部のマシンにインストールするのは難しい場合がありますが、予測に関しては結果を大幅に改善できます。

maptoolsライブラリは優れており、読み込んでいるシェープファイルの投影法を定義できますが、そのためには、その投影法を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)

このルートに進みたい場合は、http://spatialreference.orgにアクセスして、proj4形式での投影がどのように見えるかを調べてください。それが面倒な場合、rgdalはESRIシェイプファイルの.prjファイル(シェープファイルのESRIの投影定義を含むファイル。同じファイルでrgdalを使用するには、次のように記述します。

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

単一のシェープファイルで作業している場合は、これを行わずに滑ることができますが、複数のデータソースを見たり、Googleマップでオーバーレイを開始したりすると、投影を適切に維持することが不可欠になります。

Rの空間データに関する役立つチュートリアル(ポイントパターンのインポートと操作に関するものを含む)については、https://csde.washington.edu/workshop/point-patterns-and-rasterで古いコース資料をオンラインで入手できます。 -surfaces /(他のワークショップはこちらにあります)これらの方法が実際にどのように比較されるかを見るのに役立つかもしれません。


空間参照情報の+1 ...特に投影の整理を強調するために!
シンバマング

@ csfowler、readOGRを使用しようとしましたが、.prjファイルをインポートしていません。理由は何ですか?私もUWの生物学部にいます。
ハーマン歯磨き

@ user4050、コードを見なくてもわかりにくい。同じディレクトリに.prjファイルがあると思いますか?また、エンコーディング= "ESRI Shapefile"の値を使用して、rgdalがシェープファイルであることを確認しましたか?
-csfowler

17

シェープファイルをASCIIに変換するのではなく、空間拡張の1つでシェープファイルを直接使用する必要があると思います。ここでは、シェープファイルhttp://www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFilesを読み取る(および書き込む)3つの方法を見つけることができます。R空間プロジェクトは、おそらくhttp://cran.r-project.org/web/packages/sp/index.htmlにも関心を持っています


17

sfライブラリを使用して、でシェープファイルを直接開くことができますRrgdalライブラリよりも高速です。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年でもまだ良い選択肢です。


これを使用して、オンラインソースからインポートできますか?I
Iデルトロ

@IDelToro直接ではありません。最初にハードドライブにダウンロードしてから、そこから読み込む必要があります。
クリストファー

6

もう1つの選択肢は、fastshpライブラリを使用することです

大規模なESRIシェープファイル(.shp)を処理するためのルーチン。これには、読み取り、ポイントの細線化、およびポイントを含むシェイプへのマッチングが含まれます。このパッケージの主な目的は、大きなシェープファイル(数百万ポイント)をサポートする速度を提供することです。他のシェープファイルパッケージよりも数桁高速です。

ggplot2でSEを使用する方法に関するSEに関する私の質問は次のとおりです。

ggplot2でfastshpを介して読み込まれたシェープファイルをプロットするにはどうすればよいですか?


1
read.shp関数がspオブジェクトにならないのは少し面倒です。空間Rコミュニティが、空間オブジェクトを処理するための事実上の標準としてこれに収束していることを考えると、これはややずさんだと思います。十分なRAMと64ビットOSがあれば、大きなデータの読み取りはそれほど問題ではありません。8GB RAMを使用すると、問題なくrgdalを使用して30Mポイントと250万ポリゴンを読み取りました。ここでggplot2でSPオブジェクトを使用して上のいくつかの方向は次のとおりです。github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles
ジェフリー・エヴァンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.