У меня есть один популяционный растр с грубым разрешением 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))