R-境界ボックスを作成し、Polygonクラスに変換してプロットする


11

とが NE lat lngありSW lat lngます。私の目標は単純です。RStudioを使用しており、上記の2つの緯度と経度から境界ボックスを作成し、ポリゴンを生成して、正方形ポリゴンにランダムポイントを追加します。data.frameにインポートできるcsvファイルにNELat / LngとSW-Lat / Lngがあります。

始めるには少しガイダンスが必要です。R言語は非常に新しいもので、これまで慣れていたものとはまったく異なります。

これまでのところ私はこれを持っています:

coords = cbind(78.46801, 19.53407)
coordsmax = cbind(78.83157, 19.74557 )
sp = SpatialPoints(coordsmax)
sp2 = SpatialPoints(coords)

r1 = rbind(coords, coordsmax[1, ])  # join
P1 = Polygon(r1)
Ps1 = Polygons(list(P1), ID = "a")
plot(Ps1)

他の場所でいくつかの例をみましたが、4つの角のポリゴンをプロットできません。


r1には単一の重複した座標しかありませんが、それは 'r1 = rbind(coords、coordsmax) `であることを意味していますか??
mdsumner

はい、修正しました。それでも動作しません
-user134611

問題を1つずつ慎重に処理することは、解決策を得るための良い方法です。2つまたは1つの座標のみを指定した場合、Polygon()がエラーにならないのはバグだと考えています。spの問題でこれを指摘しました。あなたq、library(raster); SPs1 <-as(extent(r1)、 "SpatialPolygons"); plot(SPs1)
mdsumner

stackexchangeの回答機能を使用する必要があることを残念に思いますが、私の評判はコメントするほど高くありません。@ dof1985(x_min、y_min)、(x_max、y_min)、(x_max、y_max)、(x_max、y_min)、(x_min、y_min)を使用してポリゴンを作成します。私は同じことを試みましたが、失敗しました。あなたの例を詳しく見て、(x_min、y_min)、(x_max、y_min)、...の代わりに使用することを調べて、(x_min、y_min)、(x_min、y_max)、...の可能性があります私のエラーの理由は?あなたの例を修正してください:)
ExploreR

回答:


7

コードにいくつかの変更が加えられました。

まず、ポイントの作成を削除したことに注意してください。を使用せずにポリゴンを形成できSpatialPointsます。多くのポイントが含まれる場合、ポイントからポリゴンを作成する方が良いでしょう。

次に、下のマトリックスに5つの座標を記述しました。各座標は境界ボックスの1つの角を表し、5つ目は最初の点を繰り返します。つまり、マトリックスには以下が含まれます:[ (x_min、y_min)、(x_max、y_min)、(x_max、y_max)、(x_max、y_min)、(x_min、y_min) ]

最後に、地理コンテキスト内でプロット可能なオブジェクトを形成するためにSpatialPolygonswith を使用しespg:4326ました。

library(sp)

coords = matrix(c(78.46801, 19.53407,
               78.46801, 19.74557,
               78.83157, 19.74557,
               78.83157, 19.53407,
               78.46801, 19.53407), 
             ncol = 2, byrow = TRUE)


P1 = Polygon(coords)
Ps1 = SpatialPolygons(list(Polygons(list(P1), ID = "a")), proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
plot(Ps1, axes = TRUE)

コードをプロットすると、次のようになります。

線のように見えるポリゴン

そして、これはここに示されたコード修正の後です:

ボンディングボックス


それでおしまい!少しコメントしていただけますproj4Stringか?緯度と経度の特性を定義していますか?
user134611

ヒット?is.projected確認するためにR-コンソールでproj4stringヘルプを。はい、CRSクラスを空間オブジェクトに定義するために使用されます
-dof1985

21

extentラスターライブラリから関数をネストasして、SpatialPolygonsオブジェクトを作成できます。

library(sp)
e <- as(raster::extent(78.46801, 78.83157, 19.53407, 19.74557), "SpatialPolygons")
proj4string(e) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
plot(e)

2
これは私の答えよりも良い方法のように見えます。
-dof1985
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.