public static LayerDrawable GetLayeredImg(
      Context c, String rid1, String product, String url, boolean spotters) {

    Bitmap bitmap;
    String cod_url;
    final String scale_type = "cod";

    if (url.equals("")) {
      cod_url = GetCOD(rid1, product);
      bitmap = UtilityDownload.getBitmapFromURL(cod_url);
    } else {
      bitmap = UtilityDownload.getBitmapFromURL(url);
    }

    if (!MyApplication.black_bg) {
      bitmap = UtilityImg.BM_BlackToWhite(bitmap);
    }

    if ((!product.equals("OHA")) && (!product.equals("NVW"))) {
      android.graphics.Bitmap.Config bitmapConfig = bitmap.getConfig();
      if (bitmapConfig == null) {
        bitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
      }
      bitmap = bitmap.copy(bitmapConfig, true);
      UtilityCanvasMain.AddCanvasItems(bitmap, scale_type, rid1, 0, spotters, false, 22);
    }

    return UtilityImg.BitmapToLayerDrawable(c, bitmap);
  }
    @Override
    protected String doInBackground(String... params) {

      // conus is 3400x1600 39.725 97.00

      if (!nws_radar_mosaic_sector_current.equals("alaska"))
        ld =
            UtilityUSImgNWSMosaic.NWSMosaic(
                getBaseContext(), nws_radar_mosaic_sector_current, spotters);
      else
        ld =
            UtilityImg.BitmapToLayerDrawable(
                getBaseContext(),
                UtilityDownload.getBitmapFromURL(
                    "http://radar.weather.gov/ridge/Conus/RadarImg/alaska.gif"));

      return "Executed";
    }
  @Override
  public boolean onMenuItemClick(MenuItem item) {

    switch (item.getItemId()) {
      case R.id.action_a12:
        new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "12");
        return true;
      case R.id.action_a18:
        new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "18");
        return true;
      case R.id.action_a6:
        new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "6");
        return true;
      case R.id.action_stop:
        animDrawable.stop();
        return true;
      case R.id.action_share:
        if (anim_ran)
          UtilityShare.ShareAnimGif(
              this, "NWS mosaic: " + nws_radar_mosaic_sector_label_current, animDrawable);
        else
          UtilityShare.ShareBitmap(
              this,
              "NWS mosaic: " + nws_radar_mosaic_sector_label_current,
              UtilityImg.LayerDrawableToBitmap(ld));
        return true;
      case R.id.action_spotters:
        if (spotters) {
          spotters = false;
          new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        } else {
          spotters = true;
          new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        }
        return true;
      default:
        return super.onOptionsItemSelected(item);
    }
  }
  @Override
  public boolean onMenuItemClick(MenuItem item) {

    if (in_ogl_anim) {
      in_ogl_anim = false;
      anim.setIcon(play_icon);
      if (item.getItemId() == R.id.action_a6) return true;
    }

    switch (item.getItemId()) {
      case R.id.action_share:
        if (anim_ran) {
          if (!prod.equals("2k"))
            animDrawable = UtilityUSImgWX.AnimationFromFiles(this, rid1, prod, frame_cnt_str);

          UtilityShare.ShareAnimGif(
              this,
              rid1
                  + " ("
                  + MyApplication.preferences.getString("RID_LOC_" + rid1, "")
                  + ") "
                  + prod,
              animDrawable);

        } else {
          if (prod.equals("2k"))
            UtilityShare.ShareBitmap(
                this,
                rid1
                    + " ("
                    + MyApplication.preferences.getString("RID_LOC_" + rid1, "")
                    + ") "
                    + prod,
                bitmap);
          else
            UtilityShare.ShareBitmap(
                this,
                rid1
                    + " ("
                    + MyApplication.preferences.getString("RID_LOC_" + rid1, "")
                    + ") "
                    + prod,
                UtilityImg.LayerDrawableToBitmap(
                    UtilityUSImgWX.LayeredImgFromFile(getApplicationContext(), rid1, prod, false)));
        }
        return true;

      case R.id.action_settings:
        Intent intent = new Intent(this, SettingsRadarActivity.class);
        startActivity(intent);
        return true;

      case R.id.action_n0q:
        prod = "N" + tilt + "Q";
        setTitle(prod);
        tilt_option = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_n0u:
        prod = "N" + tilt + "U";
        setTitle(prod);
        tilt_option = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;

      case R.id.action_tv0:
        prod = "TV0";
        setTitle(prod);
        tilt_option = false;
        rid_changed = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_tzl:
        prod = "TZL";
        setTitle(prod);
        tilt_option = false;
        rid_changed = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;

      case R.id.action_n0s:
        prod = "N" + tilt + "S";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_net:
        prod = "EET";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_DVL:
        prod = "DVL";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_N0X:
        prod = "N" + tilt + "X";
        setTitle(prod);
        tilt_option = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_N0C:
        prod = "N" + tilt + "C";
        setTitle(prod);
        tilt_option = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_N0K:
        prod = "N" + tilt + "K";
        setTitle(prod);
        tilt_option = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_H0C:
        prod = "H" + tilt + "C";
        setTitle(prod);
        tilt_option = true;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_about:
        ShowRadarScanInfo();
        return true;
      case R.id.action_vil:
        prod = "DVL";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_dsp:
        prod = "DSP";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_n0r:
        prod = "N0R";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_n0v:
        prod = "N0V";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_l2vel:
        prod = "L2VEL";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_l2ref:
        prod = "L2REF";
        setTitle(prod);
        tilt_option = false;
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_tilt1:
        tilt = "0";
        prod = prod.replaceAll("N[0-3]", "N" + tilt);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_tilt2:
        tilt = "1";
        prod = prod.replaceAll("N[0-3]", "N" + tilt);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_tilt3:
        tilt = "2";
        prod = prod.replaceAll("N[0-3]", "N" + tilt);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_tilt4:
        tilt = "3";
        prod = prod.replaceAll("N[0-3]", "N" + tilt);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_a12:
        setTitle(prod);
        if (prod.equals("2k")) {
          new AnimateRadarMosaic().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "12", prod);

        } else {
          anim.setIcon(stop_icon);
          new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "12", prod);
        }
        return true;
      case R.id.action_a18:
        setTitle(prod);
        if (prod.equals("2k")) {
          new AnimateRadarMosaic().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "18", prod);

        } else {
          anim.setIcon(stop_icon);
          new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "18", prod);
        }
        return true;
      case R.id.action_a6:
        setTitle(prod);
        if (prod.equals("2k")) {
          new AnimateRadarMosaic().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "6", prod);

        } else {
          anim.setIcon(stop_icon);
          new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "6", prod);
        }
        return true;
      case R.id.action_a36:
        setTitle(prod);
        if (prod.equals("2k")) {
          new AnimateRadarMosaic().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "36", prod);

        } else {
          anim.setIcon(stop_icon);
          new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "36", prod);
        }
        return true;
      case R.id.action_a3:
        setTitle(prod);
        if (prod.equals("2k")) {
          new AnimateRadarMosaic().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "3", prod);

        } else {
          anim.setIcon(stop_icon);
          new AnimateRadar().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "3", prod);
        }
        return true;
      case R.id.action_zoomout:
        setTitle(state + " Radar");
        if (zoom_level_radar == 0) {
          img_url =
              "http://climate.cod.edu/data/satellite/1km/" + onek + "/current/" + onek + ".rad.gif";
          zoom_level_radar++;
        } else if (zoom_level_radar == 1) {
          img_url =
              "http://climate.cod.edu/data/satellite/2km/"
                  + state
                  + "/current/"
                  + state
                  + ".rad.gif";
          zoom_level_radar++;
        } else if (zoom_level_radar == 2) {
          img_url =
              "http://climate.cod.edu/data/satellite/regional/"
                  + sector
                  + "/current/"
                  + sector
                  + ".rad.gif";
          zoom_level_radar++;
        } else if (zoom_level_radar == 3) {
          img_url = "http://climate.cod.edu/data/satellite/regional/usa/current/usa.rad.gif";
          zoom_level_radar = 0;
        }
        prod = "2k";
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_vis:
        setTitle(state + " Vis");
        tilt_option = false;
        if (state.equals("HI") || state.equals("AK")) {
          zoom_level_vis = 3;
        }

        if (zoom_level_vis == 1) {
          img_url =
              "http://climate.cod.edu/data/satellite/1km/" + onek + "/current/" + onek + ".vis.gif";
          zoom_level_vis++;
        } else if (zoom_level_vis == 2) {
          img_url =
              "http://climate.cod.edu/data/satellite/2km/"
                  + state
                  + "/current/"
                  + state
                  + ".vis.gif";
          zoom_level_vis++;
        } else if (zoom_level_vis == 3) {
          img_url =
              "http://climate.cod.edu/data/satellite/regional/"
                  + sector
                  + "/current/"
                  + sector
                  + ".vis.gif";
          zoom_level_vis++;
        } else if (zoom_level_vis == 4) {
          img_url = "http://climate.cod.edu/data/satellite/regional/usa/current/usa.vis.gif";
          zoom_level_vis = 1;
        }
        prod = "2k";
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_ir:
        setTitle(state + " IR");
        tilt_option = false;
        if (state.equals("HI") || state.equals("AK")) {
          zoom_level_ir = 2;
        }
        if (zoom_level_ir == 1) {
          img_url =
              "http://climate.cod.edu/data/satellite/2km/"
                  + state
                  + "/current/"
                  + state
                  + ".ir.gif";
          zoom_level_ir++;
        } else if (zoom_level_ir == 2) {
          img_url =
              "http://climate.cod.edu/data/satellite/regional/"
                  + sector
                  + "/current/"
                  + sector
                  + ".ir.gif";
          zoom_level_ir++;
        } else if (zoom_level_ir == 3) {
          img_url = "http://climate.cod.edu/data/satellite/regional/usa/current/usa.ir.gif";
          zoom_level_ir = 1;
        }
        prod = "2k";
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_wv:
        setTitle(state + " WV");
        tilt_option = false;
        if (state.equals("HI") || state.equals("AK")) {
          zoom_level_wv = 2;
        }
        if (zoom_level_wv == 1) {
          img_url =
              "http://climate.cod.edu/data/satellite/2km/"
                  + state
                  + "/current/"
                  + state
                  + ".wv.gif";
          zoom_level_wv++;
        } else if (zoom_level_wv == 2) {
          img_url =
              "http://climate.cod.edu/data/satellite/regional/"
                  + sector
                  + "/current/"
                  + sector
                  + ".wv.gif";
          zoom_level_wv++;
        } else if (zoom_level_wv == 3) {
          img_url = "http://climate.cod.edu/data/satellite/regional/usa/current/usa.wv.gif";
          zoom_level_wv = 1;
        }
        prod = "2k";
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_NVW:
        prod = "2k";
        img_url = "NVW";
        setTitle("NVW");
        img.resetZoom();
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_fav:
        ToggleFavorite();
        return true;

      case R.id.action_CMH:
        rid1 = "CMH";
        prod = "TZL";
        setTitle(prod);
        RIDMapSwitch(rid1);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_CVG:
        rid1 = "CVG";
        prod = "TZL";
        setTitle(prod);
        RIDMapSwitch(rid1);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_DAL:
        rid1 = "DAL";
        prod = "TZL";
        setTitle(prod);
        RIDMapSwitch(rid1);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_DAY:
        rid1 = "DAY";
        prod = "TZL";
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_EWR:
        rid1 = "EWR";
        prod = "TZL";
        RIDMapSwitch(rid1);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_FLL:
        rid1 = "FLL";
        prod = "TZL";
        RIDMapSwitch(rid1);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_IAD:
        rid1 = "IAD";
        prod = "TZL";
        RIDMapSwitch(rid1);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;

      case R.id.action_IAH:
        rid1 = "IAH";
        prod = "TZL";
        RIDMapSwitch(rid1);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_MDW:
        rid1 = "MDW";
        prod = "TZL";
        RIDMapSwitch(rid1);
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;
      case R.id.action_PBI:
        rid1 = "PBI";
        prod = "TZL";
        setTitle(prod);
        new GetContent().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        return true;

      case R.id.action_ridmap:
        LayoutParams params_iv = mImageMap.getLayoutParams();
        params_iv.height =
            MyApplication.dm.heightPixels
                - toolbar.getHeight()
                - toolbar_bottom.getHeight()
                - getStatusBarHeight();
        params_iv.width = MyApplication.dm.widthPixels;
        mImageMap.setLayoutParams(params_iv);

        if (!map_shown) {
          map_shown = true;
          glview.setVisibility(View.GONE);
          img.setVisibility(View.GONE);
          mImageMap.setVisibility(View.VISIBLE);
          ogl_in_view = false;
          mImageMap.addOnImageMapClickedHandler(
              new ImageMap.OnImageMapClickedHandler() {
                @Override
                public void onImageMapClicked(int id, ImageMap im2) {

                  RIDMapSwitch(UtilityImageMap.MaptoRid(id));
                }

                @Override
                public void onBubbleClicked(int id) {}
              });

        } else {
          map_shown = false;
          mImageMap.setVisibility(View.GONE);
          img.setVisibility(View.GONE);
          glview.setVisibility(View.VISIBLE);
          ogl_in_view = true;
        }

        return true;

      default:
        return super.onOptionsItemSelected(item);
    }
  }
  @Override
  public void onCreate(Bundle savedInstanceState) {

    setTheme(MyApplication.theme_int);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_uswxoglv2);

    loc_x_current =
        MyApplication.preferences.getString("LOC" + MyApplication.current_loc_fragment + "_X", "");
    loc_y_current =
        MyApplication.preferences.getString("LOC" + MyApplication.current_loc_fragment + "_Y", "");

    turl = getIntent().getStringArrayExtra(RID);

    // for L2 archive called from storm reports
    if (turl.length > 5) {
      url_str = turl[3];
      loc_x_current = turl[4];
      loc_y_current = turl[5];
      archive_mode = true;
    }

    toolbar = (Toolbar) findViewById(R.id.toolbar_top);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_36px));
    // toolbar.setNavigationIcon(android.R.drawable.);

    toolbar_bottom = (Toolbar) findViewById(R.id.toolbar_bottom);

    if (MyApplication.icons_even_spaced)
      UtilityToolbar.setupEvenlyDistributedToolbar(this, toolbar_bottom, R.menu.uswxoglradar);
    else toolbar_bottom.inflateMenu(R.menu.uswxoglradar);

    toolbar_bottom.setOnMenuItemClickListener(this);

    if (archive_mode) toolbar_bottom.setVisibility(View.GONE);

    Menu menu = toolbar_bottom.getMenu();

    star_icon = R.drawable.star;
    star_outline_icon = R.drawable.star_outline;
    map_icon = R.drawable.map;
    star = menu.findItem(R.id.action_fav);
    map = menu.findItem(R.id.action_ridmap);
    map.setIcon(map_icon);

    tv0 = menu.findItem(R.id.action_tv0);
    tdwr = menu.findItem(R.id.action_tdwr);

    anim = menu.findItem(R.id.action_a6);
    tilt_menu = menu.findItem(R.id.action_tilt);

    // if ( ! MyApplication.loaded )
    //	MyApplication.Init(this);

    mImageMap = (ImageMap) findViewById(R.id.map);
    mImageMap.setVisibility(View.GONE);

    delay = UtilityImg.GetAnimInterval();

    img = (TouchImageView2) findViewById(R.id.iv);
    img.setMaxZoom(max_zoom);

    prod = "N0Q";

    glview = (WXGLSurfaceView) findViewById(R.id.glsurfaceview);
    InitGLVIEW();

    ogl_in_view = true;

    rid1 = turl[0];
    state = turl[1];
    if (turl.length > 2) {
      prod = turl[2];
      if (prod.equals("N0R")) {
        prod = "N0Q";
      }
    }

    if (MyApplication.wxogl_remember_location && !archive_mode) {

      OGLR.setZoom(MyApplication.wxogl_zoom);
      glview.mScaleFactor = (MyApplication.wxogl_zoom);
      if (!MyApplication.wxogl_rid.equals("")) rid1 = MyApplication.wxogl_rid;
      prod = MyApplication.wxogl_prod;
      OGLR.mPositionX = MyApplication.wxogl_x;
      OGLR.mPositionY = MyApplication.wxogl_y;
    }

    setTitle(prod);
    rid_arr_loc = UtilityFavorites.SetupFavMenu(MyApplication.rid_fav, rid1, pref_token_location);

    spinner1 = (Spinner) findViewById(R.id.spinner1);
    dataAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, rid_arr_loc);
    dataAdapter.setDropDownViewResource(MyApplication.spinner_layout);
    spinner1.setAdapter(dataAdapter);
    spinner1.setOnItemSelectedListener(this);

    if (MyApplication.wxogl_radar_autorefresh) {
      // 180000 is 3 min
      mInterval = 60000 * MyApplication.preferences.getInt("RADAR_REFRESH_INTERVAL", 3);

      getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
      mHandler = new Handler();
      startRepeatingTask();
    }
  }
  public static Bitmap GetCODMosaic(
      Context context,
      String img_url,
      String image_type,
      String k,
      List<String> meso_img,
      List<String> overlay_img) {

    Bitmap bitmap = null;
    Bitmap bitmap1 = null;
    Bitmap bitmap2 = null;
    String map_url;
    String overlay_url;
    String location = "";
    Bitmap[] bitmap_arr = new Bitmap[meso_img.size() + overlay_img.size()];

    if (meso_img.size() == 0 && overlay_img.size() == 0) {
      bitmap = UtilityDownload.getBitmapFromURL(img_url);
      if (!MyApplication.black_bg && image_type.equals("rad")) {
        bitmap = UtilityImg.BM_BlackToWhite(bitmap);
      }
    } else {
      try {
        Pattern p2 = Pattern.compile("/current/(.*?)\\.");
        Matcher m2 = p2.matcher(img_url);
        while (m2.find()) {
          location = m2.group(1);
        }
      } catch (Exception e) {
      }

      map_url = img_url.replaceAll("/current/.*?gif", "/maps/");
      overlay_url = img_url.replaceAll("/current/.*?gif", "/overlays/");

      bitmap1 = UtilityDownload.getBitmapFromURL(img_url.replaceAll(".gif", ".nomap.gif"));
      if (!MyApplication.black_bg && image_type.equals("rad")) {
        bitmap1 = UtilityImg.BM_BlackToWhite(bitmap1);
      }
      bitmap2 = UtilityDownload.getBitmapFromURL(map_url + location + "_map.gif");
      try {
        int i = 0;
        for (String s : overlay_img) {

          bitmap_arr[i] = UtilityDownload.getBitmapFromURL(map_url + location + "_" + s + ".gif");
          bitmap_arr[i] = UtilityImg.eraseBG(bitmap_arr[i], -16777216); // use for black background
          i++;
        }

        for (String s : meso_img) {
          if (s.equals("rad")) {
            bitmap_arr[i] =
                UtilityDownload.getBitmapFromURL(
                    "http://climate.cod.edu/data/satellite/"
                        + k
                        + "/"
                        + location
                        + "/current/"
                        + location
                        + ".rad.nomap.gif");
          } else {
            bitmap_arr[i] =
                UtilityDownload.getBitmapFromURL(overlay_url + location + "-" + s + ".gif");
          }
          bitmap_arr[i] = UtilityImg.eraseBG(bitmap_arr[i], -16777216); // use for black background
          i++;
        }

      } catch (Exception e) {
      }

      bitmap2 = UtilityImg.eraseBG(bitmap2, -16777216); // use for black background
    }

    if (meso_img.size() == 0 && overlay_img.size() == 0) {
    } else {

      Drawable[] layers = new Drawable[2 + meso_img.size() + overlay_img.size()];
      layers[0] = new BitmapDrawable(context.getResources(), bitmap1); // radar
      Integer i = 0;
      for (@SuppressWarnings("unused") String s : overlay_img) {
        layers[1 + i] = new BitmapDrawable(context.getResources(), bitmap_arr[i]); // warnings
        i++;
      }
      for (@SuppressWarnings("unused") String s : meso_img) {
        layers[1 + i] = new BitmapDrawable(context.getResources(), bitmap_arr[i]); // warnings
        i++;
      }
      layers[2 + meso_img.size() - 1 + overlay_img.size()] =
          new BitmapDrawable(context.getResources(), bitmap2); // state
      LayerDrawable layerDrawable = new LayerDrawable(layers);
      bitmap = UtilityImg.LayerDrawableToBitmap(layerDrawable);
    }

    return bitmap;
  }