2012-08-30 10 views
14

パッケージspは、さまざまな空間概念(点、線、ポリゴン)に対応するいくつかのクラスを提供します。一部のクラスでは、フィーチャ座標にアクセスすることは簡単です。 。すべての例はそれぞれのクラスヘルプページから取られました。 SpatialPolygonsについてSpatialPolygonsおよびその他のspクラスからフィーチャ座標を抽出

l1 = cbind(c(1,2,3),c(3,2,2)) 
l1a = cbind(l1[,1]+.05,l1[,2]+.05) 
l2 = cbind(c(1,2,3),c(1,1.5,1)) 
Sl1 = Line(l1) 
Sl1a = Line(l1a) 
Sl2 = Line(l2) 
S1 = Lines(list(Sl1, Sl1a), ID="a") 
S2 = Lines(list(Sl2), ID="b") 
Sl = SpatialLines(list(S1,S2)) 
coordinates(Sl) 
# [prints a list of two with corresponding segments] 

coordinates()以下に示すように、ポリゴン中心を返します。

Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2))) 
Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2))) 
Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5))) 
Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE) 

Srs1 = Polygons(list(Sr1), "s1") 
Srs2 = Polygons(list(Sr2), "s2") 
Srs3 = Polygons(list(Sr3, Sr4), "s3/4") 
SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3) 
coordinates(SpP) 
     [,1]  [,2] 
[1,] 2.696970 3.545455 
[2,] 3.666667 2.333333 
[3,] 6.133333 3.933333 

機能座標を抽出する共通のパッケージには便利な機能がありますか?私はSpatialPolygonsの関数を考え出しましたが、よりよくテストされ、一貫性があり、おそらくほとんど/すべてのspクラスでさえも、何かを探しています。

getEdges <- function(x) { 
    stopifnot(class(x) == "SpatialPolygons") 
    lapply([email protected], function(y) { 
       [email protected][[1]]@coords 
      }) 
} 
getEdges(SpP) 
# [returns a list of three, coordinates in a matrix] 
+1

を私はあなたに非常に良い本をお勧めします! " - > http://www.springerlink.com/content/978-0-387-78171-6#section=147788&page=1 – Pop

+0

一般に、物を取り出すには '@ property'を使うのはお勧めできません。これはオブジェクトの内部組織であり、予告なしに変更される可能性があります。 –

答えて

14

私は考えることができる最良の方法は、ggplot2からfortify機能を使用することです。 fortifyは、一般的なRオブジェクト(例えば、lmなど)を、ggplot2がプロットに使用できるdata.frameに変換するメソッドを持つ汎用関数です。完全なリストは提供します:

> ggplot2:::fortify. 
ggplot2:::fortify.cld                 
ggplot2:::fortify.confint.glht               
ggplot2:::fortify.data.frame                
ggplot2:::fortify.default                
ggplot2:::fortify.glht                 
ggplot2:::fortify.Line 
ggplot2:::fortify.Lines 
ggplot2:::fortify.lm 
ggplot2:::fortify.map 
ggplot2:::fortify.NULL 
ggplot2:::fortify.Polygon 
ggplot2:::fortify.Polygons 
ggplot2:::fortify.SpatialLinesDataFrame 
ggplot2:::fortify.SpatialPolygons 
ggplot2:::fortify.SpatialPolygonsDataFrame 
ggplot2:::fortify.summary.glht 

あなたは、これがSpatialPolygons*のオブジェクトのfortify機能が含まれて見ることができます。あなたの例のデータを使用して:

> obj = fortify(SpP) 
    long lat order hole piece group id 
1  2 2  1 FALSE  1 s1.1 s1 
2  1 4  2 FALSE  1 s1.1 s1 
3  4 5  3 FALSE  1 s1.1 s1 
4  4 3  4 FALSE  1 s1.1 s1 
5  2 2  5 FALSE  1 s1.1 s1 
6  5 2  1 FALSE  1 s2.1 s2 
7  2 2  2 FALSE  1 s2.1 s2 
8  4 3  3 FALSE  1 s2.1 s2 
9  5 2  4 FALSE  1 s2.1 s2 
10 4 5  1 FALSE  1 s3/4.1 s3/4 
11 10 5  2 FALSE  1 s3/4.1 s3/4 
12 5 2  3 FALSE  1 s3/4.1 s3/4 
13 4 3  4 FALSE  1 s3/4.1 s3/4 
14 4 5  5 FALSE  1 s3/4.1 s3/4 
15 5 4  6 TRUE  2 s3/4.2 s3/4 
16 5 3  7 TRUE  2 s3/4.2 s3/4 
17 6 3  8 TRUE  2 s3/4.2 s3/4 
18 6 4  9 TRUE  2 s3/4.2 s3/4 
19 5 4 10 TRUE  2 s3/4.2 s3/4 

と結果のプロット:使用R」セリエに「Rと応用空間データ分析」:

require(ggplot2); theme_set(theme_bw()) 
ggplot(aes(x = long, y = lat, group = group), data = obj) + geom_path() 

enter image description here

関連する問題