Finding whether set of coordinates are within a bounding box set by a condition

18 views (last 30 days)
Hi,
I have two meshgrids of X and Y coordinates (UTM/polar stereographic) with a corresponding grid of elevation values.
I have a set of specific coordinates marking sites of interest and I'd like to find out if they fall within a particular elevation band.
E.g.
index1 = elevation > 3000
and I want to find if any of the sites fall in the coordinates specified by the elevation. The specific points will not correspond exactly to the points on the meshgrid.
I've tried inpolygon, filterm, etc to no avail.
Update
Added sample data: etopo_15.mat loads LAT, LON and topo_bed (elevation) matrices.
You can plot this using
figure();
pcolor(LON,LAT,topo_bed)
shading flat
% And let's say the coordinates of the sites I'm interested in are
coords = [2.43875e+02,-48.375;2.45625e+02,44.87540.125,5.375;2.47125e+02,10.625]%[LON1,LAT1;LON2,LAT2...]
I create elevation bands from
elev1 = find(topo_bed > 3000);
elev2 = find(topo_bed > 1000 & topo_bed<2000);
How do I find out if the sites in coords are in those elevations?
I think one method might be to make a polygon from the elevation criteria, and the use inpolygon? Having trouble making a polygon from the matrix though..
  4 Comments
Elizabeth Case
Elizabeth Case on 24 Feb 2020
Edited: Elizabeth Case on 24 Feb 2020
Hi darova,
The image is really small, I can't see what you've painted, could you repost it? Thanks!

Sign in to comment.

Answers (1)

Guillaume
Guillaume on 20 Feb 2020
Edited: Guillaume on 20 Feb 2020
Can't you just create an interpolant for your elevation and query the interpolant at your desired coordinates. It's then trivial to check if the elevation is in the desired bands:
%note that griddedInterpolant want NDGRID'ed data, not MESHGRID'ed data, so everything has to be transposed
ElevInterp = griddedInterpolant(LON.', LAT.', topo_bed.'); %using default linear interpolant here. Use whichever interpolation method you prefer
siteelevation = ElevInterp(coords) %get elevation at site coordinates
isinband = siteelevation > 3000 | (siteelevation > 1000 & siteelevation < 2000)
  2 Comments
Elizabeth Case
Elizabeth Case on 24 Feb 2020
Edited: Elizabeth Case on 24 Feb 2020
Hi Guillaume, this seems like a good option. I'm getting an error in gridded interopolant that might grids aren't monotonically increasing, but as far as I know/can tell, they are (see attached imshow). I'll try something along these lines and follow up here.
update: the issue is that my y (polar stereographic) values are decreasing
Guillaume
Guillaume on 24 Feb 2020
As long as the grid vectors are strictly monotonic, griddedInterpolant should work, it doesn't matter if it's monotonically increasing or decreasing. Certainly, I have no issue with the LAT and LON in your attached mat file.
If the coordinates are not monotonic or not gridded, you can always use scatteredInterpolant instead. The syntax is slightly different from that of griddedInterpolant but the principle is the same.

Sign in to comment.

Categories

Find more on Interpolation in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!