Tengo dos capas en ArcGIS: una es un punto vectorial y la otra es una capa ráster. Quiero agregar el valor de la cuadrícula de datos ráster al punto vectorial. El problema es que el punto vectorial está lejos de cualquier cuadrícula ráster existente con valor, por lo que el comando "Muestra" no devuelve ningún valor para ese punto vectorial.
Entonces mi pregunta es: ¿cómo puedo encontrar la celda ráster más cercana dado un punto vectorial y extraer el valor de la celda?
En realidad, hay dos cosas que debo hacer:
- Identificar el delineador dentro de un guardabosques (por lo general, a 1-2 celdas de mi ráster existente)
- Asigne un valor del ráster más cercano a ellos, si están en un rango
Editado: tengo alrededor de 3000 puntos vectoriales y mi problema es este:
Necesito agregar el valor ráster basado en ubicaciones a los puntos vectoriales. Utilicé la herramienta "Muestra" y funciona bien para la mayoría de los puntos.
Sin embargo, hay una situación como esta
El punto derecho puede obtener el valor del ráster ("Muestra" funciona) pero el punto izquierdo no puede debido a problemas de alineación.
De ráster a polígono no funciona porque recibo un mensaje de error de que no puedo convertirlos en vectores porque están fuera del dominio. También tengo puntos como este
Esos puntos superiores no deberían obtener ningún valor porque están demasiado lejos del ráster.
Pensé en alguna manera de evitar:
Paso 1. Haz la "muestra" primero
Paso 2. Seleccione el valor nulo después de las operaciones de "muestra"
Paso 3. construir zonas de amortiguamiento (dentro de 1 grado decimal) en base a los puntos nulos
Paso 4. usa estadísticas zonales? ? u otras herramientas para recorrer todas las celdas ráster en el búfer, encontrar la más cercana, extraer su valor y colocarlo en el punto vectorial.
Estoy atrapado en el paso 4. No sé qué herramienta en ArcSDK puedo usar para lograr esta función.
O bien ... ¿Tienes una mejor idea para lidiar con eso?
Tengo 20 capas ráster como esta y me gustaría hacerlo automáticamente (usando el generador de modelos y el arcobject).
Sample
herramienta.Respuestas:
Un contorno de trama ocupa un rectángulo delimitado en la parte inferior izquierda por el origen, que tiene coordenadas (por ejemplo) (x0, y0), y en la parte superior derecha por (x1, y1): estas son propiedades fácilmente descubiertas de cualquier trama. Puede usar esta información para mover cualquier punto fuera de la extensión del ráster al punto más cercano en el límite del ráster y extraer los valores del ráster en las nuevas ubicaciones.
Tareas como esta a menudo se resuelven fácilmente considerando dimensiones más bajas . La extensión de un ráster unidimensional es solo un intervalo de números, digamos de x0 a x1> x0, convencionalmente escrito [x0, x1]. Suponga que desea encontrar el punto más cercano en este intervalo a un número dado x. Hay tres casos: x <x0 (x está a la izquierda), x0 <= x <= x1 (x está en el intervalo) y x1 <x (x está a la derecha). Claramente, los puntos más cercanos son x0, x y x1, respectivamente. Una fórmula para este resultado es
x -> min (max (x, x0), x1),
como puede ver al contemplar cada uno de los tres casos por separado.
Como la extensión de un ráster es el producto cartesiano de dos intervalos, [x0, x1] * [y0, y1], la misma fórmula funciona en dos dimensiones. Simplemente aplíquelo a cada intervalo. Por lo tanto, las coordenadas del punto proyectado se pueden calcular (en una calculadora de campo, por ejemplo) como
(x, y) -> (min (max (x, x0), x1), min (max (y, y0), y1).
Aquí está esta fórmula en acción con 100 puntos colocados aleatoriamente alrededor y dentro de la extensión de una cuadrícula:
Las líneas discontinuas asocian visualmente puntos fuera de la extensión a las ubicaciones donde se moverán.
Cree una capa de puntos a partir de estas coordenadas calculadas y aplique la
Sample
herramienta para extraer los valores ráster. Unir los resultados a la capa de puntos original.Como cuestión práctica , para evitar problemas con el redondeo de coma flotante que podrían evitar que los nuevos puntos se encuentren dentro de la extensión de la cuadrícula, sería aconsejable hacer que x0 e y0 sean un poco más grandes que el verdadero origen (puede agregarles la mitad del tamaño de la celda) y, de manera similar, haga x1 e y1 un poco más pequeños.
En resumen , el flujo de trabajo consiste en calcular dos campos (las nuevas coordenadas) en la tabla de la capa de puntos original, crear una capa de eventos de puntos a partir de esas nuevas coordenadas, ejecutar la
Sample
herramienta y realizar una unión a la base de datos (no una unión espacial).Cuando tiene muchos más puntos vectoriales que celdas en el ráster , debe preferir la solución dada por @celenius (quien propone convertir el ráster en puntos y usar una unión espacial). Sin embargo, normalmente, los rásteres tienen muchas celdas, de millones a miles de millones, y la conversión a puntos lleva tanto tiempo y disco que debe abordarse con precaución.
Alternativamente, podría acelerar la solución de Celenius utilizando un cálculo de trama para hacer una cuadrícula entera con valores solo a lo largo de su límite. Convertir eso en una capa de puntos es rápido y fácil porque tendrá pocos puntos. Llamemos a esto la "capa límite". Muestree la cuadrícula en los puntos de la capa límite, copiando así los valores de la cuadrícula en la tabla de atributos de la capa límite. Después de ejecutar
Sample
con la capa de puntos original, elimine todos los puntos donde se obtuvo con éxito una muestra. Unir espacialmente la capa límite a los puntos restantes para completar el proceso de muestreo.(Una forma de hacer una cuadrícula con valores solo a lo largo de su límite es aplicar una operación de vecindario focal que falla a lo largo del límite: los ejemplos incluyen encontrar pendientes, sombreado, estadísticas focales de vecindario 3 x 3. Esto crea una cuadrícula con una celda anillo grueso de NoData alrededor de su borde. El uso de IsNull y SetNull para detectar celdas NoData y convertir entre NoData y celdas de datos produce una cuadrícula llena de valores NoData excepto alrededor del límite).
fuente
Puede convertir el ráster en puntos ( ref ), y luego hacer una unión espacial en los puntos (desde los rásteres) al punto.
(Acabo de enterarme de que los puntos se pueden unir espacialmente aquí ayer )
fuente
Puede convertir la capa ráster en un polígono con la herramienta Ráster a polígono y ejecutar la unión espacial (haga clic con el botón derecho en la capa de puntos y seleccione Uniones y relaciones - Unir, en el primer menú desplegable seleccione la opción de unión espacial y seleccione la más cercana a la opción en el botón readio), o use la herramienta Near.
fuente