6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

sfパッケージを用いてRでshapefileを読み込む時につまづいたところ

Last updated at Posted at 2017-11-20

はじめに

Rで空間解析に挑戦中の羊です。
shapefileの読み込みという初歩の初歩でつまづいたので忘備録も兼ねて回避方法に関する考察をば。

ソフトとか

  • R (ver. 3.3.3)
  • sfパッケージ
  • QGIS (ver. 2.18.9)
  • OpenLayersPlugin

サンプルの準備【QGIS】

大阪駅(135.495951E, 34.70249N)にしました。このポイントを"samplePoint.shp"として保存しておきます。
なお背景地図はOpenStreetMapです。
スクリーンショット 2017-11-20 22.57.26.png

前準備【R】

今回shapefileの読み込みに用いるパッケージはsfパッケージです。これまで使ってきたのはspパッケージなのですが、今後は「RでGISをやるときにはsfパッケージ、という世の中になるらしい。」です。
他に参考にしたのは以下の公式ドキュメント及び記事です。

sf.pdf
Rでシェープファイルを読み込む

shapefileの読み込みからプロットまで【R】

sfパッケージを読み込み、サンプルデータの存在するフォルダを指定してshapefileを読み込みます。

sample.R
library(sf)
samplePoint = sf::st_read(dsn = "input/data/")

ここまではうまくいきました、そう__ここまでは__
次にサンプルポイントをプロットします。sfパッケージでは特別な指定なしにプロットできて便利らしいです。

> plot(samplePoint)
 if (xsize * ysize * n > prod(total_size)) { でエラー: 
   TRUE/FALSE が必要なところが欠損値です 

はい、エラーですね。
(何でや… plot()で簡単にプロットできるんじゃなかったんですか…!)

エラーの原因を考察する

はじめは妖怪全角の仕業かと思いデータを洗い直しましたが、見つからず。
うまくプロットすることを優先して簡単なポイントを生成してプロットを試してみるテスト

checkTest.R
x <- c(135.495951, 34.702485)
testPoint <- st_point(x)
plot(testPoint)

Rplot.png

あれ?できますやん(色気のないプロット結果で申し訳ないです)
ここでようやくデータのクラスに注目する発想にいたりclass関数によるチェック

> class(testPoint)
[1] "XY"    "POINT" "sfg"  

> class(samplePoint)
[1] "sf"         "data.frame"

両者を比較するにどちらもうまくプロットしそうな印象。
しかし"samplePoint"がプロットできない。"sf"は明らかにsfパッケージに関するものなので"data.frame"の部分がエラーの原因かと考えられます。
"samplePoint"のデータの構造をのぞいてみると

id X Y geometry
1 135.495951 34.702485 c(135.495951, 34.702485)

"id"及び"X","Y"は'samplePoint.shp'の属性テーブルに記載されていたもので、"geometry"に関しては新たに追加されたものでした。
つまりこのgeometryをプロットすれば…!

> plot(samplePoint$geometry)

Rplot.png
できました!

checkTest.R
> class(samplePoint)
[1] "sf"         "data.frame"
> class(samplePoint$id)
[1] "numeric"
> class(samplePoint$X)
[1] "numeric"
> class(samplePoint$Y)
[1] "numeric"
> class(samplePoint$geometry)
[1] "sfc_POINT" "sfc"      

やはり"samplePoint$geometry"がsfパッケージに関するもののようです。

終わりに

今後属性テーブルに値が入ったshapefileを用いて空間解析やってみたいと思ってるので今回のエラーはいつかぶつかりそうなので今でよかったです(前向き)
これからは脱ArcGISを目標に色々とRで分析してみたいと思います。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?