trazar - programa para dibujar poligonos regulares
sp:: over() para el punto en el análisis de polĂgonos (4)
Tengo un shapefile llamado "ind_adm" y un SpatialPointsDataFrame llamado "pnts". Los "pnts" contienen puntos generados al azar, y algunos de los puntos se superponen con el polígono. Vea la imagen de abajo.
Ahora, quiero hacer un punto en el análisis de polígonos, es decir, quiero saber qué puntos se encuentran dentro del polígono gris que representa el límite de la India. Para esto estoy usando la función over () en la biblioteca sp.
pt.in.poly <- sp::over(ind_adm, pnts, fn = mean) #do the join
Sin embargo, la salida que estoy obteniendo es
>pt.in.poly
values
0 6.019467
Debería obtener el índice de los puntos que están "en" el polígono.
¿A dónde me voy mal?
Encontré esta sintaxis concisa e intuitiva para más de:
pnts[ind_adm,]
de this documento de introducción
No debes suministrar una función. Está agregando los valores de atributo de sus puntos sobre la geometría del polígono, (es decir, el número devuelto es la mean
del atributo de los puntos que caen dentro del polígono). Además, tienes tu y
el camino equivocado para lo que quieres hacer. Debiera ser...
over( pnts , ind_adm , fn = NULL)
Puede usar el paquete point.in.poly
fom spatialEco
. Se "intersecta las clases de entidad de punto y polígono y agrega atributos de polígono a los puntos".
library(spatialEco)
new_shape <- point.in.poly(pnts, ind_adm)
También puede usar la función st_intersection
del paquete sf
:
Cargar la biblioteca
library(sf)
Cree una geometría de entidad simple (polígono) desde su polígono
ind_adm <- st_as_sf(ind_adm)
Cree una geometría (punto) de entidad simple desde sus puntos de interés
(24047 es el código EPSG para India)
pnts <- st_as_sf(pnts) %>% st_set_crs(., 24047)
Mantener solo los puntos dentro del polígono.
kept_points <- st_intersection(ind_adm, pnts)