1

私は現在、ポリゴンのリストからポリゴンシェープファイルを作成しようとしています(生物多様性研究の研究分野)。

現在、これらのポリゴンは次の形式でリストに格納されています。

$SEW22
     [,1]    [,2]
[1,] 427260.4 5879458
[2,] 427161.4 5879472
[3,] 427175.0 5879571
[4,] 427273.9 5879557
[5,] 427260.4 5879458

$SEW23
     [,1]    [,2]
 [1,] 418011.0 5867216
 [2,] 417912.0 5867230
 [3,] 417925.5 5867329
 [4,] 418024.5 5867315
 [5,] 418011.0 5867216

writeOGR を使用して単純にshpfileとして書き込もうとしましたが、次のエラーが発生します。

> #write polygons to shp
> filenameshp <- paste('Forestplots')
> layername <- paste('Forestplots')
> writeOGR(obj=forest, dsn = filenameshp, 
+          layer=layername, driver="ESRI Shapefile", overwrite_layer =     TRUE)
Error in writeOGR(obj = forest, dsn = filenameshp, layer = layername,  : 
 inherits(obj, "Spatial") is not TRUE

Barry Rowlingson によるこのチュートリアルを読んで空間ポリゴンを作成し、おそらく最初にデータフレームを作成する必要があると考え、これを実行しました。

forestm<-do.call(rbind,forest)

しかし、これはご想像のとおり有用なものを何も返しませんでした。さらに、プロットの名前が失われました。

私はまだRIに慣れていないので、他の多くのアプローチを試してみましたが、その意味を完全に判断することはできませんでしたが、期待どおりの結果が得られなかったので、これらのランダムなアプローチを惜しみません.....

皆様のご提案をお待ちしております。

どうもありがとう

PS Spatialpolygons{sp}パッケージに記載されているように、次のことも試しました。

> Polygons(forest, ID)
Error in Polygons(forest, ID) : srl not a list of Polygon objects
4

1 に答える 1

1

この回答で説明されているアプローチに従うことができます: https://gis.stackexchange.com/questions/18311/instantiating-spatial-polygon-without-using-a-shapefile-in-r

このアプローチをケースに適用する方法は次のとおりです。まず、サンプル データのように行列のリストを作成します。

forest <- list(
  "SEW22" = matrix(c(427260.4, 5879458, 427161.4, 5879472, 427175.0, 5879571, 427273.9, 5879557, 427260.4, 5879458),
                   nc = 2, byrow = TRUE),
  "SEW23" = matrix(c(418011.0, 5867216, 417912.0, 5867230, 417925.5, 5867329, 418024.5, 5867315, 418011.0, 5867216),
                   nc = 2, byrow = TRUE)
  )

library(sp)
p <- lapply(forest, Polygon)
ps <- lapply(seq_along(p), function(i) Polygons(list(p[[i]]), ID = names(p)[i]))
sps <- SpatialPolygons(ps)
sps_df <- SpatialPolygonsDataFrame(sps, data.frame(x = rep(NA, length(p)), row.names = names(p)))

最初のステップでは、行列のリストを繰り返し処理し、Polygon各行列に関数を適用してPolygonオブジェクトのリストを作成します。2 番目のステップでは、このリストを繰り返し処理してPolygonsオブジェクトを作成し、このオブジェクトの各要素の ID を元のリストの対応する名前 ("SEW22"、"SEW23" など) に設定します。3 番目のステップでは、SpatialPolygonsオブジェクトを作成します。最後に、SpatialPolygonsDataFrameオブジェクトを作成します。ここでは、s が入力されたダミーのデータフレームがありNAます (行名はポリゴン ID に対応している必要があることに注意してください)。

最後にデータを書き込みます

rgdal::writeOGR(obj = sps_df,
                dsn = "Forestplots",
                layer = "Forestplots",
                driver = "ESRI Shapefile",
                overwrite_layer = TRUE)

これにより、作業ディレクトリに新しいフォルダーが作成されます。

list.files()
# [1] "Forestplots"
list.files("Forestplots")
# [1] "Forestplots.dbf" "Forestplots.shp" "Forestplots.shx"

詳細については、リンクされた回答を参照してください。

于 2018-07-05T11:34:03.773 に答える