2012-08-30 27 views
14

पैकेज 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] 

SpatialPolygons के लिए, 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

मैं तुम्हें बहुत अच्छी किताब की सिफारिश: Serie "उपयोग आर में" आर के साथ एप्लाइड स्थानिक डाटा विश्लेषण "अपने उदाहरण डेटा का उपयोग करना ! " -> http://www.springerlink.com/content/978-0-387-78171-6#section=147788&page=1 – Pop

+0

सामान्य रूप से सामान निकालने के लिए '@ property' का उपयोग करने की सलाह नहीं दी जाती है। यह वस्तु का आंतरिक संगठन है, जो बिना किसी सूचना के बदल सकता है। –

उत्तर

14

सबसे अच्छा तरीका है मैं के बारे में सोच सकते हैं ggplot2 से fortify समारोह का प्रयोग है। fortify एक सामान्य कार्य है जिसमें जेनेरिक आर ऑब्जेक्ट्स (उदा। lm, आदि) को data.frame में परिवर्तित करने के तरीके हैं जो ggplot2 साजिश के लिए उपयोग कर सकते हैं। पूरी सूची देता है:

> 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 

परिणाम और साजिश रचने:

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

enter image description here