# filterm

Filter latitudes and longitudes based on underlying data grid

## Syntax

`[latout,lonout] = filterm(lat,lon,Z,R,allowed)[latout,lonout,indx] = filterm(lat,lon,Z,R,allowed)`

## Description

`[latout,lonout] = filterm(lat,lon,Z,R,allowed)` filters a set of latitudes and longitudes to include only those data points which have a corresponding value in `Z` equal to `allowed`. `R` can be a geographic raster reference object, a referencing vector, or a referencing matrix.

If `R` is a geographic raster reference object, its `RasterSize` property must be consistent with `size(Z)`.

If `R` is a referencing vector, it must be a 1-by-3 with elements:

`[cells/degree northern_latitude_limit western_longitude_limit]`

If `R` is a referencing matrix, it must be 3-by-2 and transform raster row and column indices to or from geographic coordinates according to:

`[lon lat] = [row col 1] * R`

If `R` is a referencing matrix, it must define a (non-rotational, non-skewed) relationship in which each column of the data grid falls along a meridian and each row falls along a parallel. Nearest-neighbor interpolation is used by default. NaN is returned for points outside the grid limits or for which `lat` or `lon` contain NaN. All angles are in units of degrees.

`[latout,lonout,indx] = filterm(lat,lon,Z,R,allowed)` also returns the indices of the included points.

## Examples

Filter a random set of 100 geographic points. Use the `topo` map for starters:

`load topo`

Then generate 100 random points:

```lat = -90+180*rand(100,1); long = -180+360*rand(100,1);```

Make a land map, which is `1` where `topo>0` elevation:

```land = topo>0; [newlat,newlong] = filterm(lat,long,land,topolegend,1); size(newlat) ans = 15 1 ```

15 of the 100 random points fall on land.