计算DEM上的斜率

时间:2015-10-05 20:00:41

标签: python numpy

我有另一个问题。

我必须为数字高程模型中的每个单元格计算斜率。应在具有3x3形状单元的移动窗口中计算每个中心单元的斜率,并根据公式:

Slope = max | x9-xi | / A;其中值i是从1到8的值,值x9是窗口的中心。 A是到相邻小区中点的距离。因此,对于与中心对角的单元格,距离(A)是sqrt(2)乘以分辨率,而其他距离则等于分辨率。

所以我不知道的是如何编写一个与对角线不同的代码不同的代码?我用'无值'创建了一个空的numpy数组,我希望斜率值具有相同的分辨率。我知道我必须循环遍历行和列,并且必须忽略第一行和最后一行和列。 到目前为止我的代码:

import numpy as np
import matplotlib.pyplot as plt
dem=np.loadtxt('dem.txt',dtype='int',delimiter=',')
(rows,cols)=np.shape(dem)
slope2=np.zeros((rows,cols))
   for r in xrange(1,rows-1):
    for c in xrange(1,cols-1):
        temp_win=dem[r-1:r+2,c-1:c+2]
        mid= temp_win[1,1]
        max_d=np.max([temp_win[0,0]],[temp_win[0,2]],[temp_win[2,0]],[temp_win[2,2]])
        max_1=np.max([temp_win[1,1]],[temp_win[1,0]],[temp_win[1,2]],[temp_win[2,1]])
        slope = (np.max([np.abs(mid-max_d)/np.sqrt(2)]),np.max([np.abs(mid-s1/np.sqrt(2))])
        slope_2 = slope[r,c]

有没有人有任何想法,我真的很感激一些帮助?

2 个答案:

答案 0 :(得分:0)

here is your 3 by 3 array, with its indexes
for i in range(3):
    for j in range(3):
        print((i, j) , end=' ')
    print()
    (0, 0) (0, 1) (0, 2) 
    (1, 0) (1, 1) (1, 2) 
    (2, 0) (2, 1) (2, 2) 

要对角线,你必须给出一行或一列偏移量。 column_index = 2

    # diagonal (2,0)(1,1)(0,2)
column_index = 2
for i in range(3):
    for j in range(3):
        print((j + column_index,i), end=' ')
        column_index -=1
        break

(2, 0) (1, 1) (0, 2) 

答案 1 :(得分:0)

max_1 = np.max([temp_win [1,1]],[temp_win [1,0]],[temp_win [1,2]],[temp_win [2,1]]) 应该 max_1 = np.max([temp_win [0,1]],[temp_win [1,0]],[temp_win [1,2]],[temp_win [2,1]]) 因为1,1是中期

然而,在我看来,如果mid的高度高于某些舍入节点且低于其他舍入节点,或者如果某些低于0,则代码将无效。 如果它是你所追求的,你应该比较8个斜率并取其最大值。