NCL Home > Documentation > Functions > Array query, Lat/Lon functions


Returns the indices (subscripts) of two-dimensional latitude/longitude arrays that span user specified latitude/longitude boundaries.

Available in version 5.1.0 and later.


load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"  ; This library is automatically loaded
                                                             ; from NCL V6.2.0 onward.
                                                             ; No need for user to explicitly load.

	function region_ind (
		lat2d [*][*] : numeric,  
		lon2d [*][*] : numeric,  
		latS     [1] : numeric,  
		latN     [1] : numeric,  
		lonW     [1] : numeric,  
		lonE     [1] : numeric   

	return_val  :  (4)  [integer or long]



A two-dimensional array that contains latitudes.


A two-dimensional array that contains longitudes.


Southern boundary


Northern boundary


Western boundary


Eastern boundary

Return value

A one dimensional array of length 4 containing index subscripts which span the region of interest.

As of version 6.0.0, this can be of type integer or long.


Finds the first and last indices (subscripts) of two-dimensional lat2d/lon2d arrays containing the region of interest.

Note: This function may not be appropriate for all curvilinear grids.

See Also

ind, ind_resolve, getind_latlon2d


Example 1

Find the indices (subscripts) which span a user specified region of interest.

  load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
  f     = addfile("NARRmonhr-b_221_20021201_2100_000.grb" , "r")

  glon2d =  f->gridlon_221
  glat2d =  f->gridlat_221

  printMinMax(glat2d, 0)
  printMinMax(glon2d, 0)

  latS   = 30                      ; California [*rough*]
  latN   = 43
  lonW   = -125
  lonE   = -113

  ji = region_ind (glat2d,glon2d, latS, latN, lonW, lonE)

  jStrt = ji(0)      ; lat start
  jLast = ji(1)      ; lat last
  iStrt = ji(2)      ; lon start
  iLast = ji(3)      ; lon last

  LAT2D = glat2d(jStrt:jLast,iStrt:iLast)
  LON2D = glon2d(jStrt:jLast,iStrt:iLast)

  printMinMax(LAT2D, 0)
  printMinMax(LON2D, 0)

                      ; read data just for the region of interest
  x     = f->LHTFL_221_SFC_113(:,jStrt:jLast,iStrt:iLast)

The (edited) output
(0)	glat2d: min=   0.898   max= 85.334 
(0)	glon2d: min=-179.998   max=179.992

(0)	LAT2D : min=  28.680   max=  44.247 
(0)	LON2D : min=-128.941   max=-111.976

Example 2

The following is from a user question:

Say I've got a 2-D array (lat/lon) that has a blob of data in the middle surrounded by missing values. Is there an NCL function that will automatically crop or trim that array to the edges of the data, thereby getting rid of the surrounding cells of missing data?

Another user responded as follows:

Although it won't eliminate every missing value, this simple function should crop the array to the smallest rectangular region that includes all of the non-missing data:

   function crop2D(x[*][*]:numeric)
   local i
     i = ind_resolve(ind(.not.ismissing(ndtooned(x))),dimsizes(x))
     x_crop = x( min(i(:,0)):max(i(:,0)), min(i(:,1)):max(i(:,1)) )