<div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Boa tarde colegas listeiros, como vão?<br><br>Há algum tempo atras recorri a lista com algumas duvidas de manipulação do SIG com o R e me levaram bem longe, mas ainda sigo com algumas dificuldades.</div><div>Estou fazendo uma analise de agrupamento para um local com base em informações georreferenciadas e espacializadas numa grade de 20x20 metros.<br></div><div>Inicialmente tenho essas informações num shape de pontos e também tenho o shape do contorno da minha área. O resultado da minha analise de agrupamento é uma lista indicando o cluster de cada conjunto lat;long.</div><div>Após esse passo, gostaria de criar um filtro que fosse capaz de identificar e substituir o valor de um pixel caso ele estiver cercado por valores de cluster diferente. existe alguma ferramenta que faça algo do tipo?</div><div><br></div><div>Paralelo a isso, gerei um shape de polígonos com a mesma dimensão da grade de pontos (20x20 metros). Nesse momento ocorre a quebra do script, pois o número de polígonos gerado é menor do que o número de informações que eu tenho no meu shape de pontos original e na minha lista de clusters.</div><div>Minha ideia foi de fazer um merge (ou coisa do tipo) entre minha lista de cluster e uma lista com os centroides de cada polígono, assim, eu eliminaria os pontos "excedentes" em relação aos polígonos, mas não consegui fazer com que funcionasse. Segue script ao final da mensagem.</div><div><br></div><div>Desde já, agradeço pela ajuda de todos!<br></div><div><br></div><div><div>library(spatstat) </div><div>library(maptools) </div><div>library(shapefiles)</div><div>library(foreign)</div><div>library(magrittr)</div><div>library(formattable)</div><div>library(e1071)</div><div>library(rgeos)</div><div>library(rgdal)</div><div>library(rgeos)</div><div>library(raster)</div><div>library(sp)</div><div>library(RcppCNPy)</div><div>library(deldir)</div><div>library(dismo)</div><div>library(dplyr)</div><div>library(ggplot2)</div><div>library(gstat)</div><div><br></div><div>#------Ler shape de contorno e shape de dados + transformar coordenadas em UTM------#</div><div>#-----Lendo shape de dados------#</div><div>shapefile_dados_das_camadas_utilizadas = readOGR(paste0('diretorio', 'dados.shp'))</div><div><br></div><div>#-----Lendo shape de contorno------#</div><div>shapefile_contorno_do_talhao = readOGR(paste0('diretorio', 'contorno.shp'))</div><div><br></div><div>#------Clusterizacao------#</div><div>shapefile_dados_padronizados = scale(shapefile_dados_das_camadas_utilizadas@data)</div><div>shapefile_dados_geolocalizacao = shapefile_dados_das_camadas_utilizadas@coords</div><div>wss = (nrow(shapefile_dados_padronizados)-1)*sum(apply(shapefile_dados_padronizados,2,var))</div><div>cluster_maximo = 30</div><div>for (i in 1:cluster_maximo) wss[i] = sum(kmeans(shapefile_dados_padronizados,</div><div>                                     centers=i)$withinss)</div><div>plot(1:cluster_maximo, wss, type="b", xlab="Número of Clusters",</div><div>     ylab="Soma dos quadrados dentro dos clusteres") </div><div><br></div><div>#dendograma = shapefile_dados_padronizados %>% dist %>% hclust</div><div>#plot(dendograma)</div><div>#rect.hclust(dendograma, k = 3, border = "blue")</div><div>#rect.hclust(dendograma, k = 4, border = "red")</div><div><br></div><div>escolher_num_cluster = 6</div><div>lista_clusteres = data.frame((kmeans(shapefile_dados_padronizados, centers = escolher_num_cluster)$cluster),shapefile_dados_geolocalizacao)</div><div><br></div><div>#------Transformando em poligono------#</div><div>x = shapefile_dados_das_camadas_utilizadas@coords[,1]</div><div>y = shapefile_dados_das_camadas_utilizadas@coords[,2]</div><div>df_xy = data.frame(shapefile_dados_das_camadas_utilizadas@coords[,1],shapefile_dados_das_camadas_utilizadas@coords[,2])</div><div>#coordinates(df_xy) <- ~x+y </div><div>z = deldir(x,y,plot=TRUE,wl='triang',wp="none")</div><div>w = tile.list(z) </div><div>polys = vector(mode="list", length=length(w)) </div><div>for (i in seq(along=polys)) { </div><div>  pcrds = cbind(w[[i]]$x, w[[i]]$y) </div><div>  pcrds = rbind(pcrds, pcrds[1,]) </div><div>  polys[[i]] = Polygons(list(Polygon(pcrds)), ID=as.character(i)) </div><div>} </div><div>SP = SpatialPolygons(polys) </div><div>plot(SP) </div><div>celulas_dentro_do_talhao = raster::intersect(SP, shapefile_contorno_do_talhao)</div><div>plot(celulas_dentro_do_talhao) </div><div><br></div><div>#------Adicionando Informacao de cluster ao poligono------#</div><div>length(celulas_dentro_do_talhao)</div><div>confirmando_pontos_dentro_da_area = data.frame(coordinates(celulas_dentro_do_talhao))</div><div>length(lista_clusteres[,1])</div><div>colnames(lista_clusteres) = c('Cluster', 'Long', 'Lat')</div><div>colnames(confirmando_pontos_dentro_da_area) = c('Long', 'Latitude')</div><div>#confirmando_pontos_dentro_da_area$Long = round(confirmando_pontos_dentro_da_area$Long, 5)</div><div>#lista_clusteres$Long = round(lista_clusteres$Long, 5)</div><div>#teste = merge(confirmando_pontos_dentro_da_area, lista_final, all.x = TRUE)</div><div>#celulas_dentro_do_talhao@data$Cluster = '???' </div><div>plot(celulas_dentro_do_talhao)</div><div>writeOGR(celulas_dentro_do_talhao, 'C:\\Users\\Yury\\Desktop\\InCeres\\UGD', layer = 'sss', driver = 'ESRI Shapefile')</div></div><div><br></div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Yury Duarte<br></div>Engenheiro Agrônomo - ESALQ/USP<br></div></div></div></div></div></div>