Extract x/y index for a list of coordinates
Added by Andreas Hilboll over 8 years ago
Given a curvilinear grid and a list of latitude/longitude coordinates, can I use cdo to get lists of x and y indices of the coordinates in the grid?
Replies (2)
RE: Extract x/y index for a list of coordinates - Added by Karin Meier-Fleischer over 8 years ago
Hi Andreas,
in my opinion, there is no way to retrieve the indices of given lat/lon values.
But there is a workaround using NCL. Here, a ksh script is used to create the NCL script, commit the file name,lat and lon values to the NCL script which returns the indices:
#!/bin/ksh
infile="infile.nc"
set -A lats
set -A lons
lats+=( 31.0 17.31 24.05 )
lons+=( -86.45 -101.00 -92.46 )
cat <<EOF > ncl_script
begin
if(.not. isvar("infile")) then
print("ERROR: infile not given")
exit
end if
if(.not. isvar("lat_array")) then
print("ERROR: lat_array variable not set")
exit
else
lat_array := tofloat(str_split(lat_array," "))
end if
if(.not. isvar("lon_array")) then
print("ERROR: lon_array variable not set")
exit
else
lon_array := tofloat(str_split(lon_array," "))
end if
f = addfile(infile,"r") ;-- open file
lat2d = f->lat ;-- get 2D latitude array
lon2d = f->lon ;-- get 2D longitude array
ndims = dimsizes(lat_array)
indices = getind_latlon2d (lat2d,lon2d, lat_array, lon_array) ;-- retrieve the indices
lat_indices = indices(:,0) ;-- latitude indices
lon_indices = indices(:,1) ;-- longitude indices
do i=0,ndims-1
print(sprinti("%5i",lat_indices(i))+" "+sprinti("%5i",lon_indices(i))) ;-- print ("lat index" "lon index")
end do
end
EOF
set -A ret $(ncl -nQ infile=\""${infile}"\" lat_array=\""${lats[*]}"\" lon_array=\""${lons[*]}"\" ncl_script)
echo "latid lonid"
echo ${ret[0]} ${ret[1]}
echo ${ret[2]} ${ret[3]}
echo ${ret[4]} ${ret[5]}
exit
Hope this will help.
-Karin
RE: Extract x/y index for a list of coordinates - Added by Andreas Hilboll over 8 years ago
Thanks a lot, Karin! I'll have to look into using NCL. (Actually, I'm building a Python application which already uses CDO for regridding and other things, so CDO will be nice. I'll look into NCL Python bindings ...)