Возьмите среднее значение для повторной выборки - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть один популяционный растр с грубым разрешением 100 м, я хочу пересчитать его до более высокого разрешения, 75 м.У меня уже есть одна популяционная информация в растре, где значение каждого пикселя - это количество людей, количество людей в пределах 100 м * 100 м.Когда мне нужно изменить частоту до 75 м, новый диапазон пикселей (min_r_x, max_r_x, min_r_y, max_r_y) может охватывать несколько пикселей 100-метрового растра (здесь я использую четыре части, например, красный, синий, зеленый и желтый).моя идея состоит в том, чтобы сначала получить расположение четырех вершин каждого пикселя в этом желаемом 75-метровом растре, затем взять значение совокупности, в котором находятся вершины, и вычислить процент площади, чтобы сгенерировать значение результата повторной выборки.
Вы можете обратиться крисунок ниже в качестве простой иллюстрации.

Original_R = 100 
 R = 75 
 Area_red = (max_x - min_r_x)*(max_r_y-min_y)
 Area_blue = (R – (max_x –min_r_x))*(max_r_y-min_y)
 Area_green = (max_x - min_r_x)*(R – (max_r_y-min_y))
 Area_yellow = (R – (max_x –min_r_x))*(R – (max_r_y-min_y))
 Value_resample = (10 *area_red     +20*area_blue+40*area_green+50*area_yellow)/(original_R* original_R)

Я попытался повторно сэмплировать растр с 1 строкой, 2 столбцами с разрешением 4 м до нового растра с разрешением 2 м.

pop = (((0,4,0,4),10),((4,8,4,8),30))#original raster with two pixels, store as the Vertex coordinates ((xmin,xmax,ymin,ymax),pixel value)
min_r_x = [] 
min_r_y = []
max_r_x = []
max_r_y = []
pop_r = []
x1 = []
x2 = []
y1 = []
y2 = []
#loc = []
pop_r = []
area = 4*4
#re = 4
newre = 2
#max_y = 4
#min_x = 0
val = []
#get the vertex coordinates of new raster
for row in range(2):
    for col in range(4):
        min_r_x = 0 + col*newre
        max_r_x = 0 + (col+1)*newre
        max_r_y = 4 + row*(-newre)
        min_r_y = 4 + (row+1)*(-newre)
        pop_r.append(((min_r_x,max_r_x,max_r_y,min_r_y),0))

        #take each of the new raster vertex cooordinates locate their position
        for i in range(len(pop_r)):
            pairs = pop_r[i]
            coor = pairs[0]
            #val = pairs[1]              
            coorxmin = coor[0]
            coorxmax = coor[1]
            coorymax = coor[2]
            coorymin = coor[3]#loop each vertex of pixels            
            for j in range(len(pop)):
                record = pop[j]
                loc = record[0]
                xmin = loc[0]
                xmax = loc[1]
                ymin = loc[2]
                ymax = loc[3]
        #here is the place that I have some problem, it seems not right
                if xmin <= coorxmin <= xmax:                
                   x1.append(xmax-coorxmin)
                   val.append(record[1])
                if xmin <= coorxmax <= xmax: 
                   x2.append(xmax - coorxmax)                 
                   val.append(record[1])
                if ymin <= coorymin <= ymax:
                   y1.append(ymax-coorymin)
                   val.append(record[1])
                if ymin <= coorymax <= ymax:
                   y2.append(ymax-coorymax)
                   val.append(record[1])
                value = (x1 * y1 * val + x1*y2*val + x2*y1*val + x2*y2*val)/area
       pop_r.append(((min_r_x[i],max_r_x[i],min_r_y[i],max_r_y[i]),value))         
...