2015-04-22 19 views
5

Sono solo io che ho il problema di estrarre le coordinate di un poligono dall'oggetto SpatialPolygonsDataFrame? Sono in grado di estrarre gli altri slot dell'oggetto (ID, plotOrder) ma non le coordinate (coords). Non so cosa sto sbagliando. Si prega di trovare sotto la mia sessione R dove bdryData è l'oggetto SpatialPolygonsDataFrame con due poligoni.R_estrarre le coordinate da 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 

Impostazione secondaria secondo poligono da 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 

slot Estrazione

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

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

Ma problema con coordinate

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

Qualsiasi aiuto è molto apprezzato. Grazie.

risposta

5

Infine, ho capito che non ho analizzato correttamente l'output. Il modo corretto per fare è [email protected][[2]]@Polygons[[1]]@coords. Ricorda la differenza nel comando polygons (Polygons e polygons) e mi ci sono voluti anni per scoprirlo.

+1

Per quale poligono dovrebbe essere questo codice? Non riesco a capire la mancata corrispondenza nel riferimento [[2]] e [[1]]. – LoveMeow

+1

Questo non è generalizzabile e, come @ Ms.Meow, non sono sicuro di dove arriva il 2. – forlooper

0

Utilizzare la funzione coordinates() dal pacchetto sp. Dovrebbe darti i valori in un formato elenco.

È inoltre possibile ottenere l'attributo Poligono dallo shapefile.

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

Grazie. Ma il vero problema era che non l'ho analizzato correttamente e ho impiegato anni per risolverlo. per favore controlla la mia risposta Le coordinate – user3420448

+1

() recuperano lo slot labpt, non le coordinate del poligono – cmbarbu

+0

Ciò che @cmbarbu ha detto è corretto, le coordinate() non funzioneranno. – forlooper

2

Questo mi ci è voluto un po 'per capire anche. La seguente funzione che ho scritto ha funzionato per me. sp.df dovrebbe essere 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 
} 
Problemi correlati