utilizando trazar regulares realizar programa procedimiento poligonos poligono para online inscribir hexagono graficar geogebra dibujar cual creador como r gis polygon shapefile

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)