
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 Em 20 de maio de 2016 09:51, gabriel henrique pires de mello ribeiro < gabrielgiga@gmail.com> escreveu:
Prezado Éder, segue o exemplo de três árvores, note que para cada árvore o número de medidas de distância e azimute entre os pontos ao redor da copa podem variar (de acordo com as dimensões da copa). As medidas Az1 a Az8 representam os azimutes e D1 a D8 a distância entre os pontos de medição. grato Gabriel Ribeiro
Em 20 de maio de 2016 09:41, Éder Comunello <comunello.eder@gmail.com> escreveu:
Gabriel, bom dia!
Se você tem as coordenadas polares, pode obter as coordenadas cartesianas e somar a distância entre pontos obtidas com dist() ou utilizar o próprio {geosphere}, função perimeter(). Se não me engano {geosphere} trabalha só com lat/long, mas poderia converter o valor considerando que um grau ~111km.
Talvez se você fornecer os dados de uma ou duas árvores, alguém possa dar uma sugestão mais precisa.
================================================ É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
Em 19 de maio de 2016 10:13, gabriel henrique pires de mello ribeiro < gabrielgiga@gmail.com> escreveu:
Prezados estou tentando definir o perímetro de copas de árvores após a derrubada. Utilizando um true pulse, medi as distâncias e azimutes ao redor da copa, até o retorno ao ponto de partida. Ainda não consegui achar um pacote adequado, e.g. o pacote geosphere realiza algo similar (mas no caso a partir de coordenadas geográficas ele computa a distância entre linhas). Eu gostaria de fazer o delineamento do perímetro a partir da distância e azimuth entre os pontos (ao redor da copa de cada árvore derrubada). Qualquer sugestão será bem vinda. grato Gabriel Ribeiro
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.