4

これを行うことが可能かどうか疑問に思っています R 。

SpatialLinesDataFrame として 1 つのデータを、spatialPolygonDataFrame として別のデータを持っています。この 2 つのデータを重ねることはできますか?

これらをオーバーレイしようとすると、次のエラーが発生します。

  jd <- overlay(res,hello) 
  Error in function (classes, fdef, mtable)  :  unable to find an inherited method for function      
  ‘overlay’ for signature ‘"SpatialLinesDataFrame", "SpatialPolygonsDataFrame"’

上記のコードで res は SpatialLinesDataFrame で、hello は SpatialPolygonDataFrame です。

シェープファイルがあり、x、y、z 座標のデータ ポイントがあります。シェープファイルに等高線を表示したい。

私が使用した手順は、akima パッケージを使用して補間を行うことです。補間に使用したコードは

fld <- interp(x,y,z)

次に、次のコードを使用して、これを空間オブジェクトに変更しました。

res <-ContourLines2SLDF(contourLines(fld))

上記のコマンドは、等高線を空間データとして保存します。

次に、シェープファイルを読み取り、シェープファイルと解像度の両方を次のようにプロットします。

p1 <-
spplot(hello,sp.layout=list(list("sp.lines",res)),col="blue",lwd=0,fill="grey",colorkey=F)
p1

「hello」はシェープファイルで、「res」は上記のように作成したオブジェクトです。

問題は、「res」に保存された輪郭がシェープファイルを超えて拡張されていることです。そのため、シェープファイルでその輪郭をクリップし、シェープファイル領域内の輪郭のみを表示したいと思います。

そこで、輪郭レイヤーをポリゴンレイヤーでクリップする方法を探しています。

コードで取得した画像を添付しました。 ここに画像の説明を入力

画像では、シェープファイルからの線を見ることができます。また、地図上に等高線レベルを表示する方法を知りたいです。

どうもありがとう。

ジババ

また、オーバーレイが正確に何をするのか知りたいです。両方のデータの領域と交差していますか?

ありがとうございました。

4

2 に答える 2

6

ラインをポリゴンの範囲にクリップしようとしているようです。パッケージgIntersectionからご利用ください。rgeos再現可能な例を次に示します。

library(rgeos)
xx <- SpatialPoints(coords=matrix(data=c(0,0), nrow=1))
xx <- gBuffer(spgeom=xx, width=1)
yy <- SpatialLines(list(Lines(Line(matrix(c(-1,1,-1,1), nrow=2)), ID=1)))
zz <- gIntersection(yy, xx)

次のようにプロットを重ねることができます。

plot(xx)
plot(zz, add = TRUE, col = "blue")
于 2013-01-19T15:07:53.617 に答える
1

ノアの答えは私にとって非常にうまくいきました。ただし、彼の回答の出力は SpatialLines オブジェクトであり、シェープ ファイルとして保存することはできません。

ここで私の 2 セントは、SpatialLines オブジェクトを SpatialLinesDataFrame に変換し、それをシェイプ ファイルとして保存する方法についてです。

res.df <- fortify(res) # create data frame of res, your original SpatialLinesDataFrame

data <- data.frame(id = unique(res.df$id)) # get ids of road segments
rownames(data) <- data$id

# transform SpatialLines object into SpatialLinesDataFrame
zzSpatialLineDF <- SpatialLinesDataFrame(zz, data) # convert zz object keeping road ids


# 5 Save Shape File to your working directory
writeOGR(zzSpatialLineDF, dsn = '.', layer ='zzSpatialLineDF', driver = 'ESRI Shapefile')
于 2015-08-02T13:49:01.293 に答える