Visualizar contornos de Tanaka

La técnica de los contornos de Tanaka o “Tanaka contours” debe a su nombre a Tanaka Kitiro (1950), aunque ya se utilizó anteriormente,  que propuso este método para representar el relieve aplicando una la fuente de luz creando un efecto en 3D.

Fuente: Kitiro Tanaka

Existen varias maneras de que puedas crear este efecto en tus MDT (el mío es un  Modelo Digital del Terreno del CNIG de una sierra al Norte de Zaragoza), en esta ocasión vamos a trabajar con ArcGIS Pro y siguiendo los pasos de este tutorial , os lo detallo para simplificaros y entendáis mejor cómo llevarlo a cabo. Antes que nada, aplicamos la herramienta “Focal Statistics” al modelo para “suavizarlo” un poco.

Posteriormente calcularemos las curvas de nivel a partir del dato obtenido en el anterior paso.

Estas curvas vamos a  “Dividir las líneas en los vértices” ya que la simbología la vamos a obtener a partir del acimut el cual calcularemos más adelante y de él obtendremos los parámetros “color” y “ancho” para  definir dicho efecto “Tanaka”:

Cuando ya tengamos nuestras curvas de nivel divididas, abrimos la tabla de atributos de dicha capa y creamos tres campos (azimuth, color y ancho) , el formato de los datos ojo, que sea de tipo “flotante”:

Y a continuación vamos a calcular los campos con el código aportado en el tutorial, fíjate cómo debes incluir los diferentes datos:

Entonces, en simbología, vamos a “Apariencia” y desde ahí en color introducimos el campo “color” y en Tamaño , el campo “ancho”:

Y si vemos nuestro visor debería aparecernos un efecto con el siguiente, ojo el MDT simbolízalo con la escala de colores relacionada con la curva de nivel para tener un contraste coherente, juega con la visualización hasta que consigas el diseño que te guste.

get_azimuth(!Shape!)
from math import atan2, pi

def get_azimuth(shape):
    x1 = shape.firstpoint.x
    y1 = shape.firstpoint.y
    x2 = shape.lastpoint.x
    y2 = shape.lastpoint.y
    
    dx = x1 - x2
    dy = y1 - y2
    azimuth = (atan2(dx, dy) * 180 / pi)
    if azimuth < 0: azimuth += 360
        
    return azimuth

--

get_color(!azimuth!)
def get_color(azimuth):
    azimuth -= 45
    if azimuth < 0:
        azimuth += 360
       
    return abs(azimuth - 180)

--

get_width(!azimuth!)

def get_width(azimuth):
    azimuth -= 45
    if azimuth < 0:
        azimuth += 360
        
    return abs(abs(azimuth - 180) - 90)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *