6 votos

Comprobar si Lng y Lat caen dentro de polígonos de ESRI Shapefile

Tengo dos archivos de entrada.

Primero: Archivo CSV con una lista de puntos, cada uno definido con Lng, Lat, Name

Segundo: ESRI Shapefile que define una serie de polígonos

Me gustaría determinar para cada punto que tengo (del fichero CSV) dentro de qué polígono se encuentra (si es que se encuentra dentro de alguno).

Utilizaré R.

Sé que podría ser una tarea sencilla, pero soy totalmente novato en SIG.

He hecho algunas búsquedas, y he encontrado que puedo usar el paquete "MapTools" en R para cargar el shapefile de ESRI, pero no sé cómo moverme después de eso.

He conseguido leer el shapefile utilizando readShapePoly en la función MapTools y ahora puedo trazar los polígonos e iterar a través de ellos en R. También he cargado los puntos del archivo CSV en un marco de datos con dos columnas (lng, lat). Ahora necesito comprobar en qué polígono se encuentra cada punto (si es que se encuentra dentro de alguno)...

He conseguido hacerlo utilizando la función over del paquete sp de la forma explicada aquí Sin embargo, estoy recibiendo NA resultado para todos los puntos, lo cual es inesperado. Creo que se debe a las diferentes proyecciones de los puntos y polígonos.. Examinando los polígonos cargados desde el shapefile usando la función summary me da Se proyecta: NA, proj4string : [NA]

¿Algún consejo?

Cualquier consejo, buen tutorial o ejemplo de código que muestre cómo hacerlo sería muy apreciado.

3voto

DSC Puntos 146

Querrás importar tu archivo shape. Puede probar el paquete rgdal En concreto, la función readOGR .

Después de leer en R su archivo csv, es posible que desee coaccionarlo a un archivo SpatialPoints clase. Asegúrese de que sus proyecciones son idénticas.

Después de tener el polígono y SpatialPoints debería ser sólo cuestión de utilizar la función over del paquete sp .

Hace poco pregunté una pregunta similar . Espero que los datos del ejemplo autocontenido sean suficientes para resolver la segunda parte de tu pregunta.

-2voto

Örjan Jämte Puntos 3127

Hace poco hice esto en Python, utilizando la función Algoritmo Ray Casting . La función "dibuja" un rayo arbitrario desde el punto en cualquier dirección y "cuenta" cuántas veces el rayo cruza el borde del polígono: si el número es impar, el punto está dentro del polígono, si es impar, está fuera.

No tengo experiencia con R, pero encontré este enlace en pnt.in.poly . Utiliza un algoritmo diferente que utiliza la suma de los ángulos realizados entre el punto en cuestión y los vértices del polígono. Si por alguna razón no puedes utilizar este algoritmo, tal vez quieras investigar el algoritmo de fundición de rayos anterior. Hay muchos ejemplos de código en varios lenguajes que lo documentan.

Independientemente del método que elijas (u otro completamente distinto), obviamente necesitarás una matriz con los vértices del polígono.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X