Classificação de pontos em cada polígono em um shapefile

Caros Listeiros Eu criei um shapefile POLY e gostaria de lançar alguns pontos aleatórios (objeto pts) e depois classifica-los com a função over() para saber em qual polígono esta contido cada ponto, no entanto, todas as modificações que eu faço geram em incompatibilidade na avaliação de argumentos entre ppp e cordinates e gostaria que alguém me desse uma dica de como otimizar essa operação sem ficar fazendo inúmeras transformações de objetos, segue CRM: #Pacotes require(shapefiles) require(rgdal) require(maptools) require(spatstat) #------------------------------------------------------------------------------- #Criação de 4 polígonos sr1=Polygons(list(Polygon(cbind(c(180114, 180553, 181127, 181477, 181294, 181007, 180409, 180162, 180114), c(332349, 332057, 332342, 333250, 333558, 333676, 332618, 332413, 332349)))),'1') sr2=Polygons(list(Polygon(cbind(c(180042, 180545, 180553, 180314, 179955, 179142, 179437, 179524, 179979, 180042), c(332373, 332026, 331426, 330889, 330683, 331133, 331623, 332152, 332357, 332373)))),'2') sr3=Polygons(list(Polygon(cbind(c(179110, 179907, 180433, 180712, 180752, 180329, 179875, 179668, 179572, 179269, 178879, 178600, 178544, 179046, 179110), c(331086, 330620, 330494, 330265, 330075, 330233, 330336, 330004, 329783, 329665, 329720, 329933, 330478, 331062, 331086)))),'3') sr4=Polygons(list(Polygon(cbind(c(180304, 180403,179632,179420,180304), c(332791, 333204, 333635, 333058, 332791)))),'4') #Converte em polígonos espaciais sr=SpatialPolygons(list(sr1,sr2,sr3,sr4)) srdf=SpatialPolygonsDataFrame(sr, data.frame(row.names=c('1','2','3','4'), PIDS=1:4)) #Cria o shapefile writeOGR(srdf, getwd(), 'POLY', 'ESRI Shapefile') #Leitura do shapefile contorno_line_X <- readShapeSpatial("POLY.shp") plot(contorno_line_X) #Seleção de pontos contorno_line_spat <- as(contorno_line_X,"owin") pts <- rpoispp(lambda=0.000012, win=contorno_line_spat) points(pts, col="blue") #Classificação dos pontos em cada área pts$PIDS <- over(pts, contorno_line_X)$PIDS pontos<-as.data.frame(pts) pontos #------------------------------------------------------------------------------- Obrigado, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 OrcID: orcid.org/0000-0001-8232-6722 Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10 LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635 ======================================================================

Alexander, A funcao rpoispp() ja faz essa classificacao. Veja o resultado de str(pts) e note uma sub-lita contendo um conjunto de pontos para cada poligono. Elias

Obrigado Elias, Mas se faço BD<-as.data.frame(pts) , não recupero essa informação e preciso dela para posterior manipulação. Tem outra questão, no meu shape original tenho 6 colunas e espero resgatar essas informações todas por isso a necessidade da criação do OBJETO$INFORMACOES Obrigado -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 OrcID: orcid.org/0000-0001-8232-6722 Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10 LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635 ====================================================================== Em 14/01/2016 09:40, Elias Teixeira Krainski escreveu:
Alexander,
A funcao rpoispp() ja faz essa classificacao. Veja o resultado de str(pts) e note uma sub-lita contendo um conjunto de pontos para cada poligono.
Elias _______________________________________________ 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 fornea cdigo mnimo reproduzvel.

conte o numero de pontos em cada area, basta usar nrow() em cada elemento, e crie um indice com rep()

Obrigado Elias!! Fiz de um outro jeito que também funcionou, sendo: RES<-NULL for (i in 1:length(contorno_line_X$PIDS)){ RES<-rbind(RES, c(contorno_line_X$PIDS[i],length(pts$b[[i]]$x))) } -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 OrcID: orcid.org/0000-0001-8232-6722 Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10 LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635 ====================================================================== Em 14/01/2016 13:27, Elias Teixeira Krainski escreveu:
conte o numero de pontos em cada area, basta usar nrow() em cada elemento, e crie um indice com rep() _______________________________________________ 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 fornea cdigo mnimo reproduzvel.

Olá, boa tarde! Alexandre, não sei se entendi bem sua necessidade, mas deixo uma sugestão baseado no que você e o Elias já fizeram... #Pacotes require(shapefiles) require(rgdal) require(maptools) require(spatstat) #------------------------------------------------------------------------------- #Criação de 4 polígonos sr <- SpatialPolygons(list( Polygons(list(Polygon(cbind(c(180114, 180553, 181127, 181477, 181294, 181007, 180409, 180162, 180114), c(332349, 332057, 332342, 333250, 333558, 333676, 332618, 332413, 332349)))),'1'), Polygons(list(Polygon(cbind(c(180042, 180545, 180553, 180314, 179955, 179142, 179437, 179524, 179979, 180042), c(332373, 332026, 331426, 330889, 330683, 331133, 331623, 332152, 332357, 332373)))),'2'), Polygons(list(Polygon(cbind(c(179110, 179907, 180433, 180712, 180752, 180329, 179875, 179668, 179572, 179269, 178879, 178600, 178544, 179046, 179110), c(331086, 330620, 330494, 330265, 330075, 330233, 330336, 330004, 329783, 329665, 329720, 329933, 330478, 331062, 331086)))),'3'), Polygons(list(Polygon(cbind(c(180304, 180403,179632,179420,180304), c(332791, 333204, 333635, 333058, 332791)))),'4'))) plot(sr) #Converte em polígonos espaciais srdf=SpatialPolygonsDataFrame(sr, data.frame(row.names=c('1','2','3','4'), PIDS=1:4)) srdf@data #Seleção de pontos set.seed(222) pts <- rpoispp(lambda=0.000012, win=srdf) pts2 <- SpatialPoints(data.frame(pts$x, pts$y), proj4string=CRS(as.character(NA))) points(pts2) #Classificação dos pontos em cada área pts$PIDS <- over(pts2, srdf)$PIDS pontos <- data.frame(x=pts$x, y=pts$y, PID=pts$PIDS) head(pontos) # x y PID # 1 179576.1 330096.8 3 # 2 180224.7 332009.1 2 # 3 178968.3 330136.9 3 # 4 180495.7 332731.4 1 # 5 178880.9 329897.9 3 # 6 181047.9 333129.5 1 table(pontos$PID) # 1 2 3 4 # 17 18 16 6 plot(sr); points(pontos, col=pontos$PID) #------------------------------------------------------------------------------- ================================================ Éder Comunello PhD Student in Agricultural Systems Engineering (USP/Esalq) Brazilian Agricultural Research Corporation (Embrapa) Dourados, MS, Brazil [22 16.5'S, 54 49.0'W] 2016-01-14 13:27 GMT-03:00 Elias Teixeira Krainski < eliaskrainski@yahoo.com.br>:
conte o numero de pontos em cada area, basta usar nrow() em cada elemento, e crie um indice com rep()
_______________________________________________ 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 fornea cdigo mnimo reproduzvel.

Muito obrigado Éder!! Essa sua solução é ótima quando tenho SpatialPoints(), que é o meu caso, fiz com planar points do spatstat apenas para montar o CMR. Valeu pela solução alternativa!! -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 OrcID: orcid.org/0000-0001-8232-6722 Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10 LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635 ====================================================================== Em 14/01/2016 16:37, Éder Comunello escreveu:
Olá, boa tarde!
Alexandre, não sei se entendi bem sua necessidade, mas deixo uma sugestão baseado no que você e o Elias já fizeram...
#Pacotes require(shapefiles) require(rgdal) require(maptools) require(spatstat)
#------------------------------------------------------------------------------- #Criação de 4 polígonos
sr <- SpatialPolygons(list( Polygons(list(Polygon(cbind(c(180114, 180553, 181127, 181477, 181294, 181007, 180409, 180162, 180114), c(332349, 332057, 332342, 333250, 333558, 333676, 332618, 332413, 332349)))),'1'), Polygons(list(Polygon(cbind(c(180042, 180545, 180553, 180314, 179955, 179142, 179437, 179524, 179979, 180042), c(332373, 332026, 331426, 330889, 330683, 331133, 331623, 332152, 332357, 332373)))),'2'), Polygons(list(Polygon(cbind(c(179110, 179907, 180433, 180712, 180752, 180329, 179875, 179668, 179572, 179269, 178879, 178600, 178544, 179046, 179110), c(331086, 330620, 330494, 330265, 330075, 330233, 330336, 330004, 329783, 329665, 329720, 329933, 330478, 331062, 331086)))),'3'), Polygons(list(Polygon(cbind(c(180304, 180403,179632,179420,180304), c(332791, 333204, 333635, 333058, 332791)))),'4'))) plot(sr)
#Converte em polígonos espaciais srdf=SpatialPolygonsDataFrame(sr, data.frame(row.names=c('1','2','3','4'), PIDS=1:4)) srdf@data
#Seleção de pontos set.seed(222) pts <- rpoispp(lambda=0.000012, win=srdf) pts2 <- SpatialPoints(data.frame(pts$x, pts$y), proj4string=CRS(as.character(NA))) points(pts2)
#Classificação dos pontos em cada área pts$PIDS <- over(pts2, srdf)$PIDS pontos <- data.frame(x=pts$x, y=pts$y, PID=pts$PIDS)
head(pontos) # x y PID # 1 179576.1 330096.8 3 # 2 180224.7 332009.1 2 # 3 178968.3 330136.9 3 # 4 180495.7 332731.4 1 # 5 178880.9 329897.9 3 # 6 181047.9 333129.5 1
table(pontos$PID) # 1 2 3 4 # 17 18 16 6
plot(sr); points(pontos, col=pontos$PID) #-------------------------------------------------------------------------------
================================================ Éder Comunello PhD Student in Agricultural Systems Engineering (USP/Esalq) Brazilian Agricultural Research Corporation (Embrapa) Dourados, MS, Brazil [22 16.5'S, 54 49.0'W]
2016-01-14 13:27 GMT-03:00 Elias Teixeira Krainski <eliaskrainski@yahoo.com.br <mailto:eliaskrainski@yahoo.com.br>>:
conte o numero de pontos em cada area, basta usar nrow() em cada elemento, e crie um indice com rep()
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto: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 fornea cdigo mnimo reproduzvel.
_______________________________________________ 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.
participantes (3)
-
ASANTOS
-
Elias Teixeira Krainski
-
Éder Comunello