Thanks for your comment gnwiii. My SeaDAS is still not working properly so I can't use l3bindump. ButI actually found a python code that seem to work for me. I modified it a bit so it runs faster. Sharing it here in case anyone is also looking for a way outside of SeaDAS.
================================
def binnum2latlon(binnum, nrows):
latbin = (np.arange(0, nrows, dtype=np.float_) + 0.5) * (180.0 / nrows) - 90.0
numbin = (np.cos(latbin * np.pi / 180.0) * (2.0 * nrows) + 0.5).astype(dtype=np.int_)
basebin = np.cumsum(numbin)+1
basebin = np.insert(basebin, 0, 1)
row = nrows - 1
if binnum < 1:
binnum = 1
row = (binnum >= basebin).sum() - 1
clat = latbin[row]
clon = (360.0 * (binnum - basebin[row] + 0.5) / numbin[row]) - 180.0
return (clat,clon)
================================
Note that "nrows" depends on the resolution of the satelite image.
The L3b_DAY_CYAN data have sensor spatial resolution of 300m, so nrows = 69120 (according to the "binIndexDim" dimension in the nc file).
From this doc on l3bins:
https://oceancolor.gsfc.nasa.gov/resources/docs/format/l3bins/
Data with resolution of 9km: nrows = 2160
Data with resolution of 4km: nrows = 4320
Since l3bindump does not work on my laptop, I was only able to test this code with the example Tom provided in an earlier post (i.e. bin 4568737875 translate to clat=30.141927 and clon=-89.317931).