Más

¿Generando ráster de dirección del viento usando sus componentes U y V en ArcGIS Desktop?

¿Generando ráster de dirección del viento usando sus componentes U y V en ArcGIS Desktop?


Tengo dos capas ráster que representan los componentes U y V de un viento vectorial. Podría generar el ráster de magnitud aplicando(u * u + v * v)en Álgebra de mapas en ArcGIS.

Ahora necesito generar el ráster de dirección con la siguiente función:

si (u> 0 && v> 0, (atan (u / v) + 180), si (u <0 && v <0, (atan (u / v) + 0), si (u> 0 && v < 0, (atan (u / v) + 360), si (u <0 && v> 0, (atan (u / v) +270)))))

pero no sé cómo aplicarlo en ArcGIS. ¿Alguna ayuda por favor?


Utilice ATan2, como en

ATan2 (-v, -u) * (180 / 3,14159265)

Tenga en cuenta que

  1. Se supone que el vector de dirección del viento es (u, v).

  2. Debido a que la construcción en la pregunta parece calcular la contrarrestar dirección, la dirección se invierte negando ambos componentes.

  3. El segundo componente de (-u, -v) es el primero argumento paraATan2(la página de ayuda no explica este punto crucial).

  4. El resultado está en radianes, que se convierte en grados mediante la multiplicación.


Debido a que este resultado estará en el rango (-180, 180] y la pregunta parece querer un valor en el rango [0, 360), se puede usar una función de módulo para cambiar el rango. Desafortunadamente, la función Mod en ArcGIS solo funciona con números enteros. Para una precisión total, necesitamos implementar el módulo nosotros mismos utilizando una alternativa como Int. Un par de fórmulas simplificadas es

x = ATan2 (-v, -u) / (2 * 3,14159265) + 1 (x - Int (x)) * 360

Aquí,Xrepresenta el rumbo de (-u, -v) como una fracción de un círculo completo. La suma de 1 garantiza que la fracción estará entre 1/2 y 3/2. La expresionx - Int (x)extrae la parte fraccionaria de ese número.

Por ejemplo, con u = -1 y v = 1 (una dirección que apunta hacia el noroeste) encontramos que ATan2 (-v, -u) = ATan2 (-1, 1) = -0.7853982. Dividiendo por 2 * Pi (= 2 * 3,14159265 en precisión simple) se obtiene -0,125. La suma de 1 aumenta eso a 0.875 (del camino alrededor del círculo). La operación de restar su parte entera la deja sin cambios en 0.875, que en grados es 0.875 * 360 = 315. Esa es la dirección en sentido antihorario en relación con el este. Para obtener el rodamiento en el sentido de las agujas del reloj en relación con el norte simplemente invertir los roles detuyven la fórmula.


Debido a que agregar o restar un semicírculo a cualquier rumbo invierte su dirección, una expresión equivalente pero más eficiente para usar es

(ATan2 (v, u) / (2 * 3,14159265) + 0,5) * 360

La constante aditiva 0.5 surge como la diferencia entre 1 y 0.5 (el semicírculo). Cuando lea esta fórmula, piense así:

ATan2 encuentra el rumbo de (u, v) (víaATan2 (v, u)) en sentido contrario a las agujas del reloj en relación con el este. Eso se convierte en una fracción del círculo completo (/ (2*3.14159264)), que luego se hace girar en un semicírculo para invertirlo y, de paso, hacer que el resultado no sea negativo (+ 0.5). Finalmente, todo se convierte en grados (* 360).


En lugar deSi(), utilizarEstafa()(condicional) en Calculadora ráster.

La estructura lógica if / else es esencialmente la misma, pero la sintaxis es diferente (también, single&para combinar condiciones):

Con (u> 0 & v> 0, (atan (u / v) + 180), Con (u <0 & v <0, (atan (u / v) + 0), Con (u> 0 & v < 0, (atan (u / v) + 360), Con (u <0 & v> 0, (atan (u / v) + 270)))))