计算山体阴影

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from osgeo import gdal
from numpy import gradient
from numpy import pi
from numpy import arctan
from numpy import arctan2
from numpy import sin
from numpy import cos
from numpy import sqrt
import matplotlib.pyplot as plt
import subprocess

def hillshade(array, azimuth, angle_altitude):
    """
    :param array: input USGS ASCII DEM / CDED .dem
    :param azimuth: sun position
    :param angle_altitude: sun angle
    :return: numpy array
    """
    #计算梯度
     x, y = gradient(array)
    #计算坡度
     slope = pi/2. - arctan(sqrt(x*x + y*y))
    #计算坡向
     aspect = arctan2(-x, y)
    #计算方位角
     azimuthrad = azimuth * pi / 180.
    altituderad = angle_altitude * pi / 180.

    shaded = sin(altituderad) * sin(slope)     + cos(altituderad) * cos(slope)     * cos(azimuthrad - aspect)
    # return 255*(shaded + 1)/2
    return aspect

ds = gdal.Open(‘../geodata/092j02_0200_demw.dem‘)
arr = ds.ReadAsArray()

hs_array = hillshade(arr, 90, 45)
plt.imshow(hs_array,cmap=‘Greys‘)
plt.savefig(‘../geodata/hillshade_whistler.png‘)
plt.show()

# gdal command line tool called gdaldem
# link  http://www.gdal.org/gdaldem.html
# usage:
# gdaldem hillshade input_dem output_hillshade
# [-z ZFactor (default=1)] [-s scale* (default=1)]"
# [-az Azimuth (default=315)] [-alt Altitude (default=45)]
# [-alg ZevenbergenThorne] [-combined]
# [-compute_edges] [-b Band (default=1)] [-of format] [-co "NAME=VALUE"]* [-q]

create_hillshade = ‘‘‘gdaldem hillshade -az 315 -alt 45 ../geodata/092j02_0200_demw.dem ../geodata/hillshade.tif‘‘‘

#通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序
subprocess.call(create_hillshade)
时间: 2024-08-03 17:37:19

计算山体阴影的相关文章

DEM山体阴影原理以及算法具体解释

山体阴影原理以及算法具体解释 山体阴影基本原理: 山体阴影是假想一个光源在某个方向和某个太阳高度的模拟下.用过临近像元的计算来生成一副0-255的灰度图. 一.山体阴影的主要參数: 1.  太阳光线的入射角度:这个角度的量算起点是正北方向,依照顺时针的方向,角度的范围是0到360度.例如以下图所看到的,默认的角度是315度,西北方向,例如以下图所看到的: 2.  太阳高度角:太阳高度角也简称太阳高度.是太阳光线和当地地平面之间的夹角,范围是0-90度,默认的太阳高度是45度,例如以下图所看到的:

DEM山体阴影原理以及算法详解

山体阴影原理以及算法详解 山体阴影基本原理: 山体阴影是假想一个光源在某个方向和某个太阳高度的模拟下,用过临近像元的计算来生成一副0-255的灰度图. 一.山体阴影的主要参数: 1.  太阳光线的入射角度:这个角度的量算起点是正北方向,按照顺时针的方向,角度的范围是0到360度,如下图所示,默认的角度是315度,西北方向,如下图所示: 2.  太阳高度角:太阳高度角也简称太阳高度.是太阳光线和当地地平面之间的夹角,范围是0-90度,默认的太阳高度是45度,如下图所示: 二.山体阴影计算方法 山体

arcgis中山体阴影制作方法研究

一. 数据介绍 本文使用的数据为全国30米分辨率的ASTER DEM,数据量大小为58G,WGS84坐标,像元类型为SIGNED 16 BIT INTEGER.NASA公开了全球30米分辨率的ASTER DEM,并可以免费下载. 二.山体阴影生成 我们知道,在ArcMap中有Hillshade工具用来生成山体阴影;ERDAS提供Shaded Relief工具;ENVI的山体阴影工具存放在Topographic Modeling中.我们分别使用这三款软件进行山体阴影的生成,结果如下所示: 整个生成

计算坡度与坡向

#!/usr/bin/env python # -*- coding: utf-8 -*- import subprocess # SLOPE # - To generate a slope map from any GDAL-supported elevation raster : # gdaldem slope input_dem output_slope_map" # [-p use percent slope (default=degrees)] [-s scale* (default=

[转]更优雅地绘制阴影

Box-shadow虽然是一个css3的属性,但由于浏览器支持不错,且用它来营造一种立体感.层次感着实方便,这让它成为了互联网上随处可见的css3特效.不过我感觉想写好阴影不是一件容易的事情.至少我常常摸索半天,写出来的阴影却总让人很难受. 上周在知乎上看到了一个问答,很受启发:如何理解 Material Design 中卡片的两层阴影,于是特意去看了Meterial Design的设计准则(中文翻译),觉得其中的一些设计思想和细节追求很值得我们去借签. 本文标题是“更优雅地绘制阴影”,但其实我

ShaderLab学习小结(五)接收平行光阴影

运行环境:Win10 x64Unity 5.5.4在"ShaderLab学习小结(四)简单产生阴影"基础上,在顶点片断着色器中编写程序使材质能接收阴影将小结(四)中添加的plane的材质换成和球体一样,即用相同的shader,效果如下:阴影消失.球的shader代码没有改动,也就是说球应该是产生阴影了,但是底下的plane也换成球的材质,接收不到阴影.那就要修改shader让它能接收阴影.Shader代码: Shader "Custom/DifSpecPoint"

gis制作高程、坡度、坡向分析图 

ArcGIS教程之DEM(高程)的应用(坡度坡向.提等高线) 相关教程:           DEM水文分析(一)           Arcgis下DEM水文分析(二) DEM的应用包括:坡度:Slope.坡向:Aspect.提取等高线.算地形表面的阴影图.可视性分析.地形剖面.水文分析等,其中涉及的知识点有: a)掌握根据DEM 计算坡度.坡向的方法.     b)理解基于DEM数据进行水文分析的基本原理.     c)利用ArcGIS的提供的水文分析工具进行水文分析的基本方法和步骤. 第一

如何制作坡度分析图

ArcGIS教程之DEM(高程)的应用(坡度坡向.提等高线) 相关教程:           DEM水文分析(一)           Arcgis下DEM水文分析(二) DEM的应用包括:坡度:Slope.坡向:Aspect.提取等高线.算地形表面的阴影图.可视性分析.地形剖面.水文分析等,其中涉及的知识点有: a)掌握根据DEM 计算坡度.坡向的方法.     b)理解基于DEM数据进行水文分析的基本原理.     c)利用ArcGIS的提供的水文分析工具进行水文分析的基本方法和步骤. 第一

GIS制图人员的自我修养(2)--制图意识

by 李远祥 上次提及到GIS制图人员的一些制图误区,主要是为GIS制图人员剖析在制图工作中的一些问题.但如何提高制图的自我修养,却是一个非常漫长的过程,这一章主要为提升制图修养作一些理论铺垫.其中,最值得强调的就是制图意识. 什么是制图意识?就是当第一时间看到数据的时候,就立刻针对该数据做出反应,基本上形成初步的制图思路,并确定制图的技术路线.说到底,所谓的制图意识,对于制图界的老鸟来说,就是经验.但是经验往往是需要长时间的积累的.还有一种情况就是具有制图天赋的人,天生就具备这种敏锐的触觉.但