# Exemplo de calculo de metricas espaciais # utilizando o conjunto de dados catarina require(aRT) con<-openConn() con if(any(showDbs(con)=="catarina")) deleteDb(con, "catarina", force=T) db<-createDb(con,"catarina") data(catarina) lcities = createLayer(db, "cities") addPolygons(lcities, catarina) t = createTable(lcities, "cities") hull = getMetric(lcities, "hull") area = getMetric(lcities, "area") # polígonos cuja area for maior que 1.100.000.000 ids = area$id[which(area$area > 1.1*10^9)] # construindo area de plotagem 2x2 par(mfcol=c(2,2), mar=c(.5,.5,.5,.5)) # plota os municipios do estado aRTplot(catarina, col="red") # plotagem com o buffer dos maiores municipios aRTplot(catarina, id=ids) aRTplot(catarina, col="gray", bor="white", add=T) aRTplot(hull, id=ids, col="green", add=T) aRTplot(catarina, id=ids, col="gray", add=T) data(oeste) loeste=createLayer(db, "oeste") addPolygons(loeste, oeste) t=createTable(loeste,"toeste") # alguns poligonos escolhidos a dedo id=c("67","241","290","101","76") buffer = getMetric(loeste, "buffer", dist=3500, id=id) # plota o buffer dos poligonos escolhidos aRTplot(oeste, col="gray") aRTplot(catarina, bor="white",col="gray", add=T) aRTplot(oeste, bor="white", col="gray", add=T) aRTplot(buffer, col="yellow", add=T) aRTplot(oeste, id=id, add=T, col="gray") # cria um layer com os centroides dos poligonos center = getMetric(loeste, "centroid") lcenter = createLayer(db, "center") addPoints(lcenter, center) t = createTable(lcenter,"center") # funcao para desenhar os vizinhos mais proximos de # um layer de pontos dado uma distancia maxima drawNearest = function(layer, border, distance) { aRTsilent(TRUE) plot(border, bor="white", col="gray") plot(catarina, bor="gray", add=T) # só funciona aqui por # causa do catarina global plot(border, bor="white", col="gray", add=T) points = getPoints(layer) aRTplot(points, add=T) id = getID(points) # cria um SpatialLines com uma linhe, depois só # muda esta linha e plota l=Line(points[c(1,2),]@coords) L = Lines(l, paste(1,2, sep="_")) SL=SpatialLines(list(L)) # para cada par de pontos calcula a distancia e plota # se for menor que o limiar for(i in 1:(length(id)-1)) { for(j in (i+1):(length(id))) { d = getDistance(layer, paste(c(id[i],id[j]))) if(d < distance) { SL@lines[[1]]@Lines[[1]]@coords=points[c(i,j),]@coords aRTplot(SL, add=T, col="blue") } } } aRTsilent(FALSE) } drawNearest(lcenter, loeste, 15000) #drawNearest(lcenter, loeste, 13000) #drawNearest(lcenter, loeste, 14000) #drawNearest(lcenter, loeste, 15000) #drawNearest(lcenter, loeste, 16000)