2015-04-22 54 views
5

座標難道只有我是誰與從SpatialPolygonsDataFrame對象提取多邊形的座標問題?我能夠提取對象的其他插槽(IDplotOrder)但不是座標(coords)。我不知道我做錯了什麼。請在我的R會話下方找到,其中bdryData是具有兩個多邊形的SpatialPolygonsDataFrame對象。R_Extracting從SpatialPolygonsDataFrame

> bdryData 
An object of class "SpatialPolygonsDataFrame" 
Slot "data": 
    ID GRIDCODE 
0 1  0 
1 2  0 

Slot "polygons": 
[[1]] 
An object of class "Polygons" 
Slot "Polygons": 
[[1]] 
An object of class "Polygon" 
Slot "labpt": 
[1] 415499.1 432781.7 

Slot "area": 
[1] 0.6846572 

Slot "hole": 
[1] FALSE 

Slot "ringDir": 
[1] 1 

Slot "coords": 
     [,1]  [,2] 
[1,] 415499.6 432781.2 
[2,] 415498.4 432781.5 
[3,] 415499.3 432782.4 
[4,] 415499.6 432781.2 



Slot "plotOrder": 
[1] 1 

Slot "labpt": 
[1] 415499.1 432781.7 

Slot "ID": 
[1] "0" 

Slot "area": 
[1] 0.6846572 


[[2]] 
An object of class "Polygons" 
Slot "Polygons": 
[[1]] 
An object of class "Polygon" 
Slot "labpt": 
[1] 415587.3 432779.4 

Slot "area": 
[1] 20712.98 

Slot "hole": 
[1] FALSE 

Slot "ringDir": 
[1] 1 

Slot "coords": 
      [,1]  [,2] 
    [1,] 415499.6 432781.2 
    [2,] 415505.0 432781.8 
    [3,] 415506.5 432792.6 
    [4,] 415508.9 432792.8 
    [5,] 415515.0 432791.5 
    [6,] 415517.7 432795.6 
    [7,] 415528.6 432797.7 
    [8,] 415538.8 432804.2 
    [9,] 415543.2 432805.8 
[10,] 415545.1 432803.6 
[11,] 415547.1 432804.7 
[12,] 415551.7 432805.8 
[13,] 415557.5 432812.3 
[14,] 415564.2 432817.1 
[15,] 415568.5 432823.9 
[16,] 415571.0 432826.8 
[17,] 415573.2 432828.7 
[18,] 415574.1 432829.7 
[19,] 415576.2 432830.7 
[20,] 415580.2 432833.8 
[21,] 415589.6 432836.0 
[22,] 415593.1 432841.0 
[23,] 415592.2 432843.7 
[24,] 415590.6 432846.6 
[25,] 415589.0 432853.3 
[26,] 415584.8 432855.3 
[27,] 415579.7 432859.8 
[28,] 415577.7 432866.2 
[29,] 415575.6 432868.1 
[30,] 415566.7 432880.7 
[31,] 415562.7 432887.5 
[32,] 415559.2 432889.1 
[33,] 415561.5 432890.7 
[34,] 415586.2 432889.7 
[35,] 415587.1 432888.6 
[36,] 415588.5 432890.2 
[37,] 415598.2 432888.7 
[38,] 415599.1 432887.7 
[39,] 415601.2 432886.7 
[40,] 415603.1 432885.7 
[41,] 415605.2 432884.7 
[42,] 415606.1 432882.7 
[43,] 415607.2 432880.7 
[44,] 415608.3 432878.3 
[45,] 415612.2 432874.8 
[46,] 415614.7 432871.9 
[47,] 415617.1 432870.7 
[48,] 415622.4 432868.2 
[49,] 415622.0 432862.4 
[50,] 415624.2 432855.4 
[51,] 415633.2 432845.3 
[52,] 415639.0 432841.1 
[53,] 415642.8 432832.9 
[54,] 415647.5 432828.7 
[55,] 415654.3 432820.3 
[56,] 415654.1 432816.5 
[57,] 415658.2 432812.8 
[58,] 415661.9 432808.6 
[59,] 415663.5 432808.7 
[60,] 415668.1 432803.5 
[61,] 415676.5 432801.3 
[62,] 415679.1 432802.7 
[63,] 415680.1 432802.7 
[64,] 415681.1 432802.7 
[65,] 415682.2 432802.7 
[66,] 415685.8 432804.7 
[67,] 415691.8 432802.2 
[68,] 415693.6 432798.9 
[69,] 415696.2 432777.0 
[70,] 415689.8 432773.5 
[71,] 415683.7 432771.6 
[72,] 415680.2 432766.7 
[73,] 415679.0 432765.6 
[74,] 415676.8 432753.7 
[75,] 415671.4 432747.7 
[76,] 415662.7 432747.2 
[77,] 415658.7 432750.0 
[78,] 415657.0 432746.3 
[79,] 415654.1 432743.7 
[80,] 415652.3 432739.8 
[81,] 415649.6 432739.6 
[82,] 415648.0 432739.7 
[83,] 415641.9 432736.4 
[84,] 415633.4 432736.9 
[85,] 415630.2 432734.7 
[86,] 415622.3 432733.6 
[87,] 415614.4 432726.5 
[88,] 415617.1 432719.1 
[89,] 415612.5 432718.1 
[90,] 415610.0 432720.9 
[91,] 415606.2 432716.6 
[92,] 415603.2 432713.9 
[93,] 415601.4 432710.0 
[94,] 415580.3 432708.7 
[95,] 415545.1 432709.7 
[96,] 415543.5 432711.5 
[97,] 415534.0 432715.7 
[98,] 415527.1 432713.7 
[99,] 415521.1 432711.6 
[100,] 415505.6 432710.6 
[101,] 415501.3 432710.9 
[102,] 415499.3 432708.7 
[103,] 415495.6 432711.6 
[104,] 415482.6 432726.2 
[105,] 415477.2 432734.0 
[106,] 415478.1 432737.7 
[107,] 415479.2 432739.7 
[108,] 415480.9 432743.4 
[109,] 415486.5 432751.2 
[110,] 415493.2 432760.7 
[111,] 415494.1 432762.7 
[112,] 415498.1 432767.9 
[113,] 415497.2 432770.7 
[114,] 415490.6 432773.2 
[115,] 415493.2 432775.6 
[116,] 415496.0 432778.7 
[117,] 415499.2 432779.7 
[118,] 415499.6 432781.2 



Slot "plotOrder": 
[1] 1 

Slot "labpt": 
[1] 415587.3 432779.4 

Slot "ID": 
[1] "1" 

Slot "area": 
[1] 20712.98 



Slot "plotOrder": 
[1] 2 1 

Slot "bbox": 
     min  max 
x 415477.2 415696.2 
y 432708.7 432890.7 

Slot "proj4string": 
CRS arguments: 
+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 
+datum=OSGB36 +units=m +no_defs +ellps=airy 
+towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 

子集第二個多邊形從bdryData

> [email protected][[2]] 
An object of class "Polygons" 
Slot "Polygons": 
[[1]] 
An object of class "Polygon" 
Slot "labpt": 
[1] 415587.3 432779.4 

Slot "area": 
[1] 20712.98 

Slot "hole": 
[1] FALSE 

Slot "ringDir": 
[1] 1 

Slot "coords": 
      [,1]  [,2] 
    [1,] 415499.6 432781.2 
    [2,] 415505.0 432781.8 
    [3,] 415506.5 432792.6 
    [4,] 415508.9 432792.8 
    [5,] 415515.0 432791.5 
    [6,] 415517.7 432795.6 
    [7,] 415528.6 432797.7 
    [8,] 415538.8 432804.2 
    [9,] 415543.2 432805.8 
[10,] 415545.1 432803.6 
[11,] 415547.1 432804.7 
[12,] 415551.7 432805.8 
[13,] 415557.5 432812.3 
[14,] 415564.2 432817.1 
[15,] 415568.5 432823.9 
[16,] 415571.0 432826.8 
[17,] 415573.2 432828.7 
[18,] 415574.1 432829.7 
[19,] 415576.2 432830.7 
[20,] 415580.2 432833.8 
[21,] 415589.6 432836.0 
[22,] 415593.1 432841.0 
[23,] 415592.2 432843.7 
[24,] 415590.6 432846.6 
[25,] 415589.0 432853.3 
[26,] 415584.8 432855.3 
[27,] 415579.7 432859.8 
[28,] 415577.7 432866.2 
[29,] 415575.6 432868.1 
[30,] 415566.7 432880.7 
[31,] 415562.7 432887.5 
[32,] 415559.2 432889.1 
[33,] 415561.5 432890.7 
[34,] 415586.2 432889.7 
[35,] 415587.1 432888.6 
[36,] 415588.5 432890.2 
[37,] 415598.2 432888.7 
[38,] 415599.1 432887.7 
[39,] 415601.2 432886.7 
[40,] 415603.1 432885.7 
[41,] 415605.2 432884.7 
[42,] 415606.1 432882.7 
[43,] 415607.2 432880.7 
[44,] 415608.3 432878.3 
[45,] 415612.2 432874.8 
[46,] 415614.7 432871.9 
[47,] 415617.1 432870.7 
[48,] 415622.4 432868.2 
[49,] 415622.0 432862.4 
[50,] 415624.2 432855.4 
[51,] 415633.2 432845.3 
[52,] 415639.0 432841.1 
[53,] 415642.8 432832.9 
[54,] 415647.5 432828.7 
[55,] 415654.3 432820.3 
[56,] 415654.1 432816.5 
[57,] 415658.2 432812.8 
[58,] 415661.9 432808.6 
[59,] 415663.5 432808.7 
[60,] 415668.1 432803.5 
[61,] 415676.5 432801.3 
[62,] 415679.1 432802.7 
[63,] 415680.1 432802.7 
[64,] 415681.1 432802.7 
[65,] 415682.2 432802.7 
[66,] 415685.8 432804.7 
[67,] 415691.8 432802.2 
[68,] 415693.6 432798.9 
[69,] 415696.2 432777.0 
[70,] 415689.8 432773.5 
[71,] 415683.7 432771.6 
[72,] 415680.2 432766.7 
[73,] 415679.0 432765.6 
[74,] 415676.8 432753.7 
[75,] 415671.4 432747.7 
[76,] 415662.7 432747.2 
[77,] 415658.7 432750.0 
[78,] 415657.0 432746.3 
[79,] 415654.1 432743.7 
[80,] 415652.3 432739.8 
[81,] 415649.6 432739.6 
[82,] 415648.0 432739.7 
[83,] 415641.9 432736.4 
[84,] 415633.4 432736.9 
[85,] 415630.2 432734.7 
[86,] 415622.3 432733.6 
[87,] 415614.4 432726.5 
[88,] 415617.1 432719.1 
[89,] 415612.5 432718.1 
[90,] 415610.0 432720.9 
[91,] 415606.2 432716.6 
[92,] 415603.2 432713.9 
[93,] 415601.4 432710.0 
[94,] 415580.3 432708.7 
[95,] 415545.1 432709.7 
[96,] 415543.5 432711.5 
[97,] 415534.0 432715.7 
[98,] 415527.1 432713.7 
[99,] 415521.1 432711.6 
[100,] 415505.6 432710.6 
[101,] 415501.3 432710.9 
[102,] 415499.3 432708.7 
[103,] 415495.6 432711.6 
[104,] 415482.6 432726.2 
[105,] 415477.2 432734.0 
[106,] 415478.1 432737.7 
[107,] 415479.2 432739.7 
[108,] 415480.9 432743.4 
[109,] 415486.5 432751.2 
[110,] 415493.2 432760.7 
[111,] 415494.1 432762.7 
[112,] 415498.1 432767.9 
[113,] 415497.2 432770.7 
[114,] 415490.6 432773.2 
[115,] 415493.2 432775.6 
[116,] 415496.0 432778.7 
[117,] 415499.2 432779.7 
[118,] 415499.6 432781.2 



Slot "plotOrder": 
[1] 1 

Slot "labpt": 
[1] 415587.3 432779.4 

Slot "ID": 
[1] "1" 

Slot "area": 
[1] 20712.98 

提取插槽

> [email protected][[2]]@ID 
[1] "1" 

> [email protected][[2]]@plotOrder 
[1] 1 

但問題座標

> [email protected][[2]]@coords 
Error: no slot of name "coords" for this object of class "Polygons" 

任何幫助非常感謝。謝謝。

回答

5

最後,我想通了,我沒有正確解析輸出。正確的方法是[email protected][[2]]@Polygons[[1]]@coords。注意命令polygonsPolygonspolygons)的區別,並花了很長時間才弄清楚。

+1

此代碼適用於什麼多邊形?我無法理解[[2]]和[[1]]參考文件中的不匹配。 – LoveMeow

+1

這不是一般化的,就像@ Ms.Meow一樣,我不確定2在哪裏進來。 – forlooper

0

sp包使用coordinates()功能。它應該以列表格式給你值。

您還可以從shapefile中獲取Polygon屬性。

mfile = readOGR(dsn=dsn,layer=layername) 
polys = attr(mfile,'polygons') 
npolys = length(polys) 
for (i in 1:npolys){ 
    poly = polys[[i]] 
    polys2 = attr(poly,'Polygons') 
    npolys2 = length(polys2) 
    for (j in 1:npolys2){ 
    #do stuff with these values 
    coords = coordinates(polys2[[j]]) 
    } 
} 
+0

謝謝。但真正的問題是我沒有正確分析它,花了很多時間來解決它。請檢查我的答案。 – user3420448

+1

coordinates()檢索labpt槽,而不是多邊形座標 – cmbarbu

+0

@cmbarbu說的是正確的,coordinates()將不起作用。 – forlooper

2

這花了我一段時間才弄清楚。我寫的以下函數爲我工作。 sp.df應該是SpatialPolygonsDataFrame。

extractCoords <- function(sp.df) 
{ 
    results <- list() 
    for(i in 1:length([email protected][[1]]@Polygons)) 
    { 
     results[[i]] <- [email protected][[1]]@Polygons[[i]]@coords 
    } 
    results <- Reduce(rbind, results) 
    results 
} 
相關問題