Las imprecisiones introducido por hacer caso omiso de los edificios, los árboles, etc., sugieren que no necesita de muy alta precisión en este tipo de cálculos. Si tenemos la intención de excluir la celda en la que el observador se basa, junto con inmediatamente las células vecinas, a continuación, los cálculos pueden ser considerablemente simplificado. Esta respuesta se describe la simplificación de los cálculos.
La vista subtendido por cualquier célula es proporcional a todos de los siguientes:
La célula real de la zona en tres dimensiones. Esto explica la inclinación de la tierra sobre que celular; pendientes empinadas indicar áreas más grandes en proporción a la secante de la pendiente.
La celda de distancia. Debido a que una célula puede tener una distancia constante de un observador, esta es una aproximación. Para las células razonablemente distante, podemos utilizar la distancia entre el observador y la celda del centro de distancias aproximadas a lo largo de la célula.
El seno del ángulo entre la célula y el observador. Más específicamente, el producto interior de la dirección normal de la célula y el vector normalizado hacia el observador le da la proporción relativa de la celda de la zona subyacente en el observador del campo de visión.
Para calcular este producto interior, debemos obtener la x, y y z, las coordenadas de dos vectores: (1) un vector que apunta desde el celular del centro de la espalda hacia el observador, y (2) un vector perpendicular a la superficie en la misma célula. (1) es quizás el más fácil de obtener a partir de dos componentes, la horizontal y la vertical. La componente vertical es la diferencia entre la célula y de elevación del observador (total) de elevación. La componente horizontal es igual al producto de la distancia desde la célula hacia el observador y el vector de dirección (que es, seno y coseno) de la célula hacia el observador. ¿Por qué se descomponen como este? Debido a que el ángulo de la célula hacia el observador está dado por el aspecto de la distancia Euclidiana de la cuadrícula relativa al observador. (Esto es obvio una vez que usted reconoce que la distancia Euclidiana se describe un resumen de "superficie" que es invertida código centrada en el observador.)
Obtenemos (x,y,z) las coordenadas de (2) a partir de la pendiente y aspecto de la DEM en la misma célula.
Aquí están los detalles, con una ejecución de ejemplo.
Comenzamos con un DEM cuyos valores están en las mismas unidades de medida como sus coordenadas horizontales. El punto blanco se muestra la ubicación de un observador cuya altura es ligeramente por encima de los DEM sí mismo.
Calcular la pendiente (en grados o radianes, no en por ciento) de los DEM y su aspecto.
Calcular la distancia Euclidiana de la cuadrícula relativa al observador.
Calcular el aspecto de la distancia de la cuadrícula (en grados o radianes).
Calcular el (x,y,z) las coordenadas de los vectores que apuntan desde la celda centros de regreso hacia el observador. En peudocode, asumiendo todos los ángulos se expresan en grados, estos cálculos son
X = Cos((90.AsGrid- [Aspect of Distance]) / 180 * 3.14159265358979323) * [distance]
Y = Sin((90.AsGrid- [Aspect of Distance]) / 180 * 3.14159265358979323) * [distance]
Z = (Observer's total elevation) - [DEM]
Por último, usted necesita para obtener la calidad de observador de la elevación de la interpolación de la DEM de la altura del observador, coordinar y agregar el observador de la altura por encima de la DEM. La suma es un número que se utiliza para Observer's total elevation
.
El (x,y,z) las coordenadas de la unidad vector normal a cada una de las células son obtenidas por el (la habitual) fórmulas de conversión entre el esférico y 3D en coordenadas Cartesianas: 90 Grados - [Aspecto] es esférica, longitud y 90 Grados - [Pendiente] es esférico latitud. De dónde
Nx = Sin([Aspect] / 180 * 3.14159265358979324) * Sin([slope] / 180 * 3.14159265358979324)
Ny = Cos([Aspect] / 180 * 3.14159265358979324) * Sin([slope] / 180 * 3.14159265358979324)
Nz = Cos([slope] / 180 * 3.14159265358979324)
Aquí, por ejemplo, es el [Nx] cuadrícula, con el rojo de células positivas y células grises negativos:
Calcular la relación de área de cada celda como el inverso del coseno de las pistas.
La distancia en tres dimensiones entre cada celda del centro y el observador está dada por el teorema de Pitágoras como
[Distance 3D] = (([X] * [X]) + ([Y] * [Y]) + ([Z] * [Z])) ^ (1/2)
Calcular los pesos. Como se ha descrito, esto es (a) la celda del área de veces (b) el producto interior de la normal y de la distancia de vectores, (c) normalizado por la longitud del vector de distancia, y (d) dividido por el cuadrado de la distancia. El efecto neto de (c) y (d) se divide por el cubo de la distancia:
[Weight] = [Area] * (( [Nx] * [X]) + ([Ny] * [Y]) + ([Nz] * [Z])) / ([Distance 3D]^3).
Excluir pesos negativos usando SetNull
o Con
: pesos negativos corresponden a las células que no será visible debido a que la pendiente de distancia de la línea de visión del observador. Aquí, el resultado se muestra en una escala logarítmica (amarillo=grande, azul=pequeño, negro=invisible):
Esta red debería verse exactamente como si una luz se brilla en la localización del observador en el DEM de la superficie: los valores de la cuadrícula representa la intensidad de la luz en cada célula, la cual es proporcional a la vista subtendido por el celular desde el punto de vista del observador.
Con estos pesos, cada versión de este problema puede ser resuelto directamente. Dado un ráster de cualquier tipo de valores, y dado otra trama que indica que los valores deben ser utilizados (como un indicador de la visibilidad), es deseado para formar la suma ponderada de los valores de la primera trama. (Es una buena idea para excluir a las células cercanas a partir de este cálculo, debido a las imprecisiones de las aproximaciones allí). Esto se obtiene con dos zonal de sumas:
Calcular el zonal suma de las ponderaciones, enmascarado por la visibilidad de la cuadrícula.
Calcular el zonal suma del producto del peso y valor de las redes, la enmascarada por la visibilidad de la cuadrícula.
Dividiendo el resultado de (2) por el resultado de (1) se obtiene el promedio ponderado de los valores dentro de la máscara.
Este procedimiento debe ser repetido por separado para cada observador (con un bucle por los observadores). No hay forma de evitar esto: cada conjunto de pesos es observador-específicos.