
23 Mai
2016
23 Mai
'16
13:02
Mauro, bom dia! A instrução splancs::areapl(...) é uma chamada da função areapl() que pertence ao pacote {splancs}, sem carregá-lo. O erro se dá, provavelmente, por você não ter o pacote instalado. Tente novamente após instalar o pacote com install.packages("splancs", dep=T). ================================================ Éder Comunello Agronomist (UEM), MSc in Environ. Sciences (UEM) DSc in Agricultural Systems Engineering (USP/Esalq) Brazilian Agricultural Research Corporation (Embrapa) Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00 2016-05-22 21:40 GMT-04:00 sznelwar@uol.com.br <sznelwar@uol.com.br>: > Tentei rodar vosso código, mas veja o que aconteceu mais abaixo! > > > da <- data.frame(Tree=rep(c("CB6", "CB7", "MB10"), each=8), ID=rep(1:8, > 3), > + AZ=c(240.7, 276.6, 301.1, 51.9, 110.8, 130, NA, NA, > 211.3, 182.1, > + 178, 111.6, 29.4, 13.8, 307.7, 274.2, 325.5, 228.8, > 192.9, 138.9, > + 92.4, 35.9, 330.8, NA), > + DH=c(3.6, 5.6, 3.3, 3.3, 2.5, 6.4, NA, NA, 4.5, 4.3, > 3.4, 4.6, 2.4, > + 4.5, 7.6, 3.2, 6.1, 10, 3.2, 3.9, 6.9, 4.2, 3.4, > NA)) > > > > ### remove NA's e calcula coordenadas x e y > > da <- da[complete.cases(da),] > > da$x = da$DH*cos(da$AZ*pi/180) > > da$y = da$DH*sin(da$AZ*pi/180) > > da > Tree ID AZ DH x y > 1 CB6 1 240.7 3.6 -1.7617768 -3.1394494 > 2 CB6 2 276.6 5.6 0.6436480 -5.5628875 > 3 CB6 3 301.1 3.3 1.7045600 -2.8256814 > 4 CB6 4 51.9 3.3 2.0362184 2.5968856 > 5 CB6 5 110.8 2.5 -0.8877674 2.3370642 > 6 CB6 6 130.0 6.4 -4.1138407 4.9026844 > 9 CB7 1 211.3 4.5 -3.8450647 -2.3378360 > 10 CB7 2 182.1 4.3 -4.2971121 -0.1575679 > 11 CB7 3 178.0 3.4 -3.3979288 0.1186583 > 12 CB7 4 111.6 4.6 -1.6933729 4.2769718 > 13 CB7 5 29.4 2.4 2.0909131 1.1781690 > 14 CB7 6 13.8 4.5 4.3701043 1.0734006 > 15 CB7 7 307.7 7.6 4.6476055 -6.0132989 > 16 CB7 8 274.2 3.2 0.2343622 -3.1914063 > 17 MB10 1 325.5 6.1 5.0271698 -3.4550780 > 18 MB10 2 228.8 10.0 -6.5868946 -7.5241491 > 19 MB10 3 192.9 3.2 -3.1192358 -0.7144004 > 20 MB10 4 138.9 3.9 -2.9388972 2.5637635 > 21 MB10 5 92.4 6.9 -0.2889420 6.8939475 > 22 MB10 6 35.9 4.2 3.4021749 2.4627639 > 23 MB10 7 330.8 3.4 2.9679351 -1.6587228 > > > > ### "fecha" polígonos > > da2 <- NULL > > for (tree in unique(da$Tree)) { > + sel <- da[da$Tree==tree,] > + sel <- rbind(sel, sel[1,]) > + da2 <- rbind(da2, sel) > + } > > > > ### visualiza formas das copas > > par(mfrow=c(2,2)) > > for (tree in unique(da$Tree)) { > + sel <- da[da$Tree==tree,] > + plot(sel$y~sel$x, type="n", asp=T, xlab=NA, ylab=NA, > xlim=c(-10,10), ylim=c(-10,10)) > + polygon(sel$y~sel$x, col="light green", bor=3) > + area <- paste(round(splancs::areapl(cbind(sel$x, sel$y)),2 ), "m²") > + text(6,6, area) > + } > Error in loadNamespace(name) : there is no package called ‘splancs’ > > > > > > > Gabriel, bom dia! > > Segue uma ideia inicial para seu caso. Considerei que as distâncias que > você forneceu são de fato as distâncias horizontais e que os pontos foram > tomados a partir de um único ponto de visada. Dê uma olhada no desenho das > copas, de fato eu esperava copas mais circulares... > > > ### <code r> > da <- data.frame(Tree=rep(c("CB6", "CB7", "MB10"), each=8), ID=rep(1:8, 3), > AZ=c(240.7, 276.6, 301.1, 51.9, 110.8, 130, NA, NA, 211.3, > 182.1, > 178, 111.6, 29.4, 13.8, 307.7, 274.2, 325.5, 228.8, > 192.9, 138.9, > 92.4, 35.9, 330.8, NA), > DH=c(3.6, 5.6, 3.3, 3.3, 2.5, 6.4, NA, NA, 4.5, 4.3, 3.4, > 4.6, 2.4, > 4.5, 7.6, 3.2, 6.1, 10, 3.2, 3.9, 6.9, 4.2, 3.4, NA)) > > ### remove NA's e calcula coordenadas x e y > da <- da[complete.cases(da),] > da$x = da$DH*cos(da$AZ*pi/180) > da$y = da$DH*sin(da$AZ*pi/180) > da > > ### "fecha" polígonos > da2 <- NULL > for (tree in unique(da$Tree)) { > sel <- da[da$Tree==tree,] > sel <- rbind(sel, sel[1,]) > da2 <- rbind(da2, sel) > } > > ### visualiza formas das copas > par(mfrow=c(2,2)) > for (tree in unique(da$Tree)) { > sel <- da[da$Tree==tree,] > plot(sel$y~sel$x, type="n", asp=T, xlab=NA, ylab=NA, xlim=c(-10,10), > ylim=c(-10,10)) > polygon(sel$y~sel$x, col="light green", bor=3) > area <- paste(round(splancs::areapl(cbind(sel$x, sel$y)),2 ), "m²") > text(6,6, area) > } > > ### Exemplos de operações com um polígono > p1 <- as.matrix(da2[1:7, 5:6]) > splancs::areapl(p1) # [1] 31.77187 m² > p1.d <- as.matrix(dist(p1)) > p1.l <- sapply(1:(nrow(p1.d)-1), function(x) p1.d[x, x+1]) > sum(p1.l) # perimeter - 27.21928 m > > require(sp) > p1.sp <- SpatialPolygons(list(Polygons(list(Polygon(p1)), "pol1"))) > rgeos::gArea(p1.sp) # [1] 31.77187 m² > > require(geosphere) > areaPolygon(p1.sp) # 390888183993 ??? > perimeter(p1.sp) # 3014297 ??? > ### geosphere considera que seriam coordenadas em graus > > ### é possível calcular um fator de conversão > conv <- sqrt(areaPolygon(p1.sp)/rgeos::gArea(p1.sp)); conv # ~ 110919m > areaPolygon(p1.sp)/conv^2 # 31.77187 m² > perimeter(p1.sp)/conv # 27.17573 m > > ### Cálculo para os três polígonos > > for (tree in unique(da2$Tree)) { > sel <- da2[da2$Tree==tree, 5:6] > sel.sp <- SpatialPolygons(list(Polygons(list(Polygon(sel)), "pol1"))) > conv <- sqrt(areaPolygon(sel.sp)/rgeos::gArea(sel.sp)) > print(paste(tree, round(areaPolygon(sel.sp)/conv^2, 1), > round(perimeter(sel.sp)/conv, 1))) > } > > # Área e perímetros > # [1] "CB6 31.8 27.2" > # [1] "CB7 48.1 31.3" > # [1] "MB10 74 40.8" > > ### </code> > > > [image: Imagem inline 1] > > > > ================================================ > Éder Comunello > Agronomist (UEM), MSc in Environ. Sciences (UEM) > DSc in Agricultural Systems Engineering (USP/Esalq) > Brazilian Agricultural Research Corporation (Embrapa) > Dourados, MS, Brazil |<O>| > ================================================ > GEO, -22.2752, -54.8182, 408m > UTC-04:00 / DST: UTC-03:00 > > > >