A raíz de la entrada 'Efecto hillshade o sombras de laderas' del blog de Dominic Royé, he probado una forma menos ambiciosa de obtener con R un sombreado hillshade de un mapa de elevaciones, pero con la premisa de no usar ninguna librería específica haciendo el método fácilmente trasladable a cualquier lenguaje con notación matricial como Python o Matlab. El código además está vectorizado para no usar bucles lo que hace su ejecución instantánea.
Pese a su fuerte apariencia volumétrica un hillshade no es una infografía 3D, sino un cálculo en 2D de iluminación por zonas basado en el ángulo de incidencia de los rayos solares sobre el terreno.
Con un truco vectorial que usaba en la universidad estimamos la dirección normal al terreno en cada posición del mapa. Consiste en realizar el producto vectorial de dos vectores definidos por las elevaciones de las dos parejas de celdas adyacentes en los ejes X e Y. Elegante y más sencillo que calcular el gradiente o hacer regresiones.
Contrastando la dirección obtenida con la dirección de incidencia definida para la iluminación mediante un producto escalar, tenemos de forma directa el nivel de luminosidad reflejada en cada celda.
Se muestran las ecuaciones de los cálculos descritos incluyendo la forma de vectorizar la obtención del vector normal en todo el mapa (hacer clic para ampliar):
Aplicamos el cálculo a los datos DEM de la Sierra de Guadarrama en Madrid descargados desde el Centro Nacional de Información Geográfica del Ministerio de Transportes, que representados en escala de grises tienen el siguiente aspecto (hacer clic para visualizar en alta resolución):
El resultado del hillshade para una dirección de iluminación que correspondería al atardecer resulta del siguiente modo (hacer clic para visualizar en alta resolución):
Finalmente con Photoshop fusionamos la luminosidad del hillshade con el color del mapa de elevaciones coloreado con las curvas de la paleta 'topo.colors' que calculamos en 'Mapas de color 'viridis' en Photoshop con R' (hacer clic para ver en todo su esplendor):
No hay comentarios:
Publicar un comentario
Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.