/**
   * Salva la tabla de color al fichero rmf.
   *
   * @param fName
   * @throws IOException
   */
  private void saveToRmf(String fileName) {
    RasterDataset rds = null;
    int limitNumberOfRequests = 20;
    while (rds == null && limitNumberOfRequests > 0) {
      try {
        rds = rasterSE.getDataSource().getDataset(0)[0];
      } catch (IndexOutOfBoundsException e) {
        // En ocasiones, sobre todo con servicios remotos al pedir un
        // datasource da una excepción de este tipo
        // se supone que es porque hay un refresco en el mismo momento
        // de la petición por lo que como es más lento de
        // gestionar pilla a la capa sin datasources asociados ya que
        // está reasignandolo. Si volvemos a pedirlo debe
        // haberlo cargado ya.
        try {
          Thread.sleep(200);
        } catch (InterruptedException e1) {
        }
      }
      limitNumberOfRequests--;
    }

    if (rds == null) {
      // RasterToolsUtil.messageBoxError("error_load_layer", this, new
      // Exception("Error writing RMF. limitNumberOfRequests=" +
      // limitNumberOfRequests));
      return;
    }

    RasterFilterList rasterFilterList = rasterSE.getRenderFilterList();

    // Guardamos en el RMF el valor NoData
    if (Configuration.getValue("nodata_transparency_enabled", Boolean.FALSE).booleanValue()) {
      try {
        RasterDataset.saveObjectToRmfFile(
            fileName,
            NoData.class,
            new NoData(
                rasterSE.getNoDataValue(), rasterSE.getNoDataType(), rasterSE.getDataType()[0]));
      } catch (RmfSerializerException e) {
        RasterToolsUtil.messageBoxError("error_salvando_rmf", this, e);
      }
    }

    // Guardamos en el RMF la tabla de color
    ColorTableFilter colorTableFilter =
        (ColorTableFilter) rasterFilterList.getByName(ColorTableFilter.names[0]);
    if (colorTableFilter != null) {
      GridPalette gridPalette =
          new GridPalette((ColorTable) colorTableFilter.getColorTable().clone());
      try {
        RasterDataset.saveObjectToRmfFile(fileName, ColorTable.class, (ColorTable) gridPalette);
      } catch (RmfSerializerException e) {
        RasterToolsUtil.messageBoxError("error_salvando_rmf", this, e);
      }
    }
  }
Example #2
0
  /**
   * Obtiene la lista de parámetros de los filtros añadidos
   *
   * @param lyr Capa raster
   * @return ArrayList
   */
  public ArrayList getParamStruct(
      FLyrRasterSE lyr, StretchPreviewRender prevRender, StretchData data) {
    RasterFilterList filterList = new RasterFilterList();
    filterList.setInitDataType(lyr.getDataType()[0]);
    RasterFilterListManager filterManager = new RasterFilterListManager(filterList);

    try {
      prevRender.addPosterization(filterManager, lyr);
    } catch (FilterTypeException e1) {
      RasterToolsUtil.messageBoxError(RasterToolsUtil.getText(null, "noposterization"), null, e1);
    }

    return getParams(filterList);
  }
Example #3
0
  /**
   * A partir de una lista de filtros devuelve un array con sus parámetros
   *
   * @param filterList
   * @return ArrayList
   */
  public ArrayList getParams(RasterFilterList filterList) {
    ArrayList listFilterUsed = new ArrayList();
    for (int i = 0; i < filterList.lenght(); i++) {
      try {
        RasterFilter filter = (RasterFilter) filterList.get(i);
        Params params = (Params) filter.getUIParams(filter.getName()).clone();

        ParamStruct newParam = new ParamStruct();
        Class c = null;
        if (filter instanceof LinearStretchEnhancementFilter)
          c = LinearStretchEnhancementFilter.class;
        newParam.setFilterClass(c);
        newParam.setFilterName(filter.getName());
        newParam.setFilterParam(params);
        listFilterUsed.add(newParam);
      } catch (CloneNotSupportedException e) {
      }
    }
    return listFilterUsed;
  }
  /**
   * Aqui se seleccionan que filtros se van a aplicar y se devuelven en forma de ArrayList tanto
   * para el dibujado como cuando aceptan o aplican el panel.
   *
   * @param rendering
   * @return
   */
  public ArrayList applyFilters(IRasterRendering rendering) {
    ArrayList listFilterUsed = new ArrayList();

    RasterFilterList filterList = new RasterFilterList();
    filterList.setEnv(rendering.getRenderFilterList().getEnv());
    RasterFilterListManager stackManager = new RasterFilterListManager(filterList);

    // Conservamos filtros no visibles ya existentes
    ArrayList filtersInit = getFilterPanel().getLayerVisualStatus().getLast().getFilterStatus();
    for (int i = 0; i < filtersInit.size(); i++) {
      // Si es visible no hacemos nada
      if (((RasterFilter) filtersInit.get(i)).isVisible()) continue;

      RasterFilter obj = null;
      for (int j = 0; j < stackManager.getRasterFilterList().size(); j++) {
        Class classFilter = (Class) stackManager.getRasterFilterList().get(j);
        try {
          obj = (RasterFilter) classFilter.newInstance();
          if (obj.getName().equals(((RasterFilter) filtersInit.get(i)).getName())) break;
        } catch (InstantiationException e) {
          RasterToolsUtil.messageBoxError("error_creando_filtro", this, e);
        } catch (IllegalAccessException e) {
          RasterToolsUtil.messageBoxError("error_creando_filtro", this, e);
        }
      }

      // Si no encontramos el filtro apropiado, nos olvidamos de el
      if (obj == null) continue;

      // Si no es visible tenemos que conservar el filtro
      try {
        Params params =
            (Params)
                ((RasterFilter) filtersInit.get(i))
                    .getUIParams(((RasterFilter) filtersInit.get(i)).getName())
                    .clone();
        // Añado el parametro RenderBands a los parametros del filtro
        String rgb =
            rendering.getRenderBands()[0]
                + " "
                + rendering.getRenderBands()[1]
                + " "
                + rendering.getRenderBands()[2];
        params.setParam("RenderBands", rgb, 0, null);
        params.setParam("alphaBand", new Integer(rendering.getAlphaBandNumber()), 0, null);

        ParamStruct newParam = new ParamStruct();
        newParam.setFilterClass(obj.getClass());
        newParam.setFilterName(((RasterFilter) filtersInit.get(i)).getName());
        newParam.setFilterParam(params);
        listFilterUsed.add(newParam);
      } catch (CloneNotSupportedException e) {
      }
    }

    // Metemos los filtros seleccionados en el panel
    ListModel list = getFilterPanel().getMainPanel().getTreeListContainer().getListModel();
    for (int i = 0; i < list.getSize(); i++) {
      Hashtable hastTable = getFilterPanel().getMainPanel().getTreeListContainer().getMap();
      for (int j = 0; j < paramsList.size(); j++) {
        boolean active = true;
        Param param = ((ParamStruct) paramsList.get(j)).getFilterParam().getParamById("enabled");
        if ((param != null)
            && param.defaultValue instanceof Boolean
            && ((((Boolean) param.defaultValue).booleanValue()) == false)) active = false;
        if (active) {
          if (((ParamStruct) paramsList.get(j))
              .getFilterName()
              .equals(hastTable.get(list.getElementAt(i)))) {
            try {
              Params params = (Params) ((ParamStruct) paramsList.get(j)).getFilterParam().clone();
              // Añado el parametro RenderBands a los parametros
              // del filtro
              String rgb =
                  rendering.getRenderBands()[0]
                      + " "
                      + rendering.getRenderBands()[1]
                      + " "
                      + rendering.getRenderBands()[2];
              params.setParam("RenderBands", rgb, 0, null);
              params.setParam("alphaBand", new Integer(rendering.getAlphaBandNumber()), 0, null);

              ParamStruct newParam = new ParamStruct();
              newParam.setFilterClass(((ParamStruct) paramsList.get(j)).getFilterClass());
              newParam.setFilterName(((ParamStruct) paramsList.get(j)).getFilterName());
              newParam.setFilterParam(params);
              listFilterUsed.add(newParam);
            } catch (CloneNotSupportedException e) {
            }
          }
        }
      }
    }
    return listFilterUsed;
  }