I've got some scattered data in the form of (latitude, longitude, someParameterValue). I'm using inverse distance weighting interpolation method to interpolate them in a rectangular grid of pixels. Presently I'm generating the query points for that grid, in python, as given below. Please note that I've converted the (latitude, longitude) coordinates to cartesian (x, y) coordinates :
xr = int(math.ceil(xmax-xmin));
yr = int(math.ceil(ymax-ymin))
xres=yres=1
xr = math.ceil(xr/xres)+1
yr = math.ceil(yr/yres)+1
npts = int(xr * yr)
queryPts = np.zeros(shape=(npts,2))
x1=xmin; y1=ymin
idx=0
while(x1 <= xmax):
while(y1 <= ymax):
#the 2D array of query points is populated here
queryPts[idx] = [x1, y1]
idx += 1
y1 += yres
y1=ymin
x1 += xres
where xmin, ymin, xmax, ymax are the minimum and maximum values of x and y coordinates respectively. Here I feel that populating the query points at intervals of 1 in each of x and y axes is not the right way to go. After calculating the grid of interpolated values, I'm using gdal to turn it into a raster image with the interpolated values scaled to 0-255 for the pixels. A sample image, that I assume to be inappropriate, is shown here
Would like to get suggestions on the following:
- What would be the proper way to generate query points for an interpolation grid i.e. how to set the resolution of the points on x and y axes whose interpolated values that we are going to calculate?
- I can see that the above question is related to the pixel resolution that we want in the final interpolated image. Hence the above question could be asked as: how to generate 2D arrays of (x,y) points (query points?) that correspond to pixels in the rendered image?
Best Answer
i may try to attempt the answers in reverse:
the resolution might be somewhat specific to what you want - and as you mention, dependent on the cell size. If your coordinates were in meters - you might want to end with 10 meter cell size, so you might use
to generate a 2D array of points for interpolation, i sometimes use numpy mgrid as
note the step argument is a complex number in the example above - from the docs 'However, if the step length is a complex number (e.g. 5j), then the integer part of its magnitude is interpreted as specifying the number of points to create between the start and stop values, where the stop value is inclusive.' of course, you could also use linspace, or mesh grid, or probably any number of functions to generate the x and y points.
i found this post to be very helpful. and used it to evaluate different methods of interpolation - where 'pts' is a list of x,y pairs and z is a list of z values - ptx and pty are lists of x and y values respectively.
i think the resolution doesn't show up again until writing the raster (something like this?) -