# File lib/numru/nusdas.rb, line 1730
    def get_xy(reference)
      imax, jmax = @meta[:size]
      case @meta[:projection]
      when "FG  "
      when "GS  "
        di, dj = @meta[:distance]
        bi, bj = @meta[:basepoint]
        by, bx = @meta[:basepoint2]
        dum,n = @meta[:standard]
        if n==0
          n = (180.0/dj).round
        end
        xi = NArray.sfloat(imax).indgen(1) - bi
        lon = bx + xi*di
        glat = gausslat(n)
        yj0 = ((n+1).to_f/2-bj).round
        lat = glat[yj0..(yj0+jmax-1)]
        return [lon, lat]
      when "LL  "
        di, dj = @meta[:distance]
        bi, bj = @meta[:basepoint]
        by, bx = @meta[:basepoint2]
        xi = NArray.sfloat(imax).indgen(1) - bi
        yj = NArray.sfloat(jmax).indgen(1) - bj
        lon = bx + xi*di
        lat = by - yj*dj
        return [lon, lat]
      when "LMN "
        dx, dy = @meta[:distance]
        bi, bj = @meta[:basepoint]
        by, bx = @meta[:basepoint2]
        sy,sx = @meta[:standard]
        sy2, = @meta[:standard2]
        unless bx.abs < 180
          raise "parameter for basepoint is invalide"
        end
        unless dx != 0 && dy != 0
          raise "parameter for distance is invalide"
        end
        unless sx.abs < 180
          raise "parameter for standard is invalide"
        end
        unless 0 < sy.abs && sy.abs < sy2.abs && sy2.abs < 90 && sy*sy2>0
          raise "parameter for standard is invalide"
        end
        bx = bx*PI/180
        by = by*PI/180
        sx = sx*PI/180
        sy = sy*PI/180
        sy2 = sy2*PI/180
        xi = NArray.sfloat(imax).indgen(1) - bi
        yj = NArray.sfloat(jmax).indgen(1) - bj
        yj = -yj
        if sy == sy2
          n = sin(sy)
        else
          n = (log(cos(sy))-log(cos(sy2)))/(log(tan((PI/2-sy)/2))-log(tan((PI/2-sy2)/2)))
        end
        f = R*cos(sy)*tan((PI/2-sy)/2)**n/n
        r0 = f/tan((PI/2-sy)/2)**n
        if reference
          lon = NMath::asin(xi*dx/r0 + sin(n*(bx-sx)))/n + sx
          r = yj*dy/cos(n*(bx-sx)) + r0
          lat = PI/2 - NMath::atan((f/r)**(1.0/n))*2
        else
          rsin = xi*dx + r0*sin(n*(bx-sx))
          rcos = yj*dy + r0*cos(n*(bx-sx))
          r = NMath::sqrt(rsin**2+rcos.reshape!(1,jmax)**2)
          lon = NMath::asin(rsin/r)/n + sx
          lat = PI/2 - NMath::atan((f/r)**(1.0/n))*2
        end
        lon = lon*180/PI
        lat = lat*180/PI
        return [lon,lat]
      when "LMS "
      when "MER "
        dx, dy = @meta[:distance]
        bi, bj = @meta[:basepoint]
        by, bx = @meta[:basepoint2]
        sy, = @meta[:standard]
        unless bx.abs < 180
          raise "parameter for basepoint is invalide"
        end
        xi = NArray.sfloat(imax).indgen(1) - bi
        yj = NArray.sfloat(jmax).indgen(1) - bj
        r = R*cos(sy*PI/180)
        lon = bx + xi*dx/r*180/PI
        lat = NMath::asin( NMath::tanh(atanh(sin(by*PI/180)) + yj*dy/r) )*180/PI
        return [lon, lat]
      when "OL  "
      when "NPS ", "SPS "
        dx, dx = @meta[:distance]
        bi, bj = @meta[:basepoint]
        by, bx = @meta[:basepoint2]
        sy, sx = @meta[:standard]
        unless bx.abs < 180
          raise "parameter for basepoint is invalide"
        end
        unless dx != 0 && dy != 0
          raise "parameter for distance is invalide"
        end
        unless sx.abs < 180
          raise "parameter for standard is invalide"
        end
        bx = bx*PI/180
        by = by*PI/180
        sx = sx*PI/180
        sy = sy*PI/180
        xi = NArray.sfloat(imax).indgen(1) - bi
        yj = NArray.sfloat(jmax).indgen(1) - bj
        r0 = 2*R*cos(sy)*tan((PI/2-by)/2)
        if reference
          lon = NMath::asin(xi*dx/r0 + sin(bx-sx)) + sx
          r = yj*dy/cos(bx-sx) + r0
          lat = PI/2 - NMath::atan(r/(2*R*cos(sy)))*2
        else
          rsin = xi*dx + r0*sin(bx-sx)
          rcos = yj*dy + r0*cos(bx-sx)
          r = NMath::sqrt(rsin**2+rcos.reshape!(1,jmax)**2)
          lon = NMath::asin(rsin/r) + sx
          lat = PI/2 - NMath::atan(r/(2*R*cos(sy)))*2
        end
        lon = lon*180/PI
        lat = lat*180/PI
        return [lon,lat]
      when "RD  "
      when "RG  "
        bi, dum = @meta[:basepoint]
        dum, bx = @meta[:basepoint2]
        parm = @meta[:subc]["RGAU"]
        raise("parameters RGAU in SUBC do not exist") unless parm
        i = parm[:i]
        i_n = parm[:i_n]
        j_n = parm[:j_n]
        i_start = parm[:i_start]
        i_n_max = i_n.max
        lon = NArrayMiss.sfloat(i_n_max,j_n)
        lat = NArrayMiss.sfloat(i_n_max,j_n)
        itotal = 0
        j_n.times{|jj|
          xi = NArray.sfloat(i_n[jj]).indgen(i_start[jj])
          lon[0...i_n[jj],jj] = (xi-bi)*360.0/i[jj] + bx
          lat[0...i_n[jj],jj] = parm[:lat][jj]
        }
        if lon.get_mask!.count_false == 0
          lon = lon.get_array!
          lat = lat.get_array!
        end
        if reference
          lon = lon.mean(1)
          lat = lat.mean(0)
        end
        return [lon,lat]
      when "RT  "
      when "SB  "
      when "ST  "
      when "XX  "
      when "YP  "
      else
        raise "projection is invalid"
      end
      warn "sorry, projection of '#{@meta[:projection]}' is not suported"
      xi = NArray.sint(imax).indgen(1)
      yj = NArray.sint(jmax).indgen(1)
      return [xi, yj]
    end