예제 #1
0
  public static void main(String[] args) {

    s2k = new General();

    try {
      if (args.length > 0) {
        s2k.executeFromProperties(args[0]);
      } else {
        PropertiesGenerator propGen = new PropertiesGenerator("iabin.properties");
        try {
          if (propGen.exists()) {
            s2k.executeFromProperties("iabin.properties");
          } else {
            propGen.write();
            System.out.println(
                "the file \"iabin.properties\" has been created on same folder as this program is");
          }
        } catch (IOException e2) {
          e2.printStackTrace();
        }
      }

    } catch (ArrayIndexOutOfBoundsException e1) {
      System.out.println(
          "__Please provide the path to the iabin.properties file or execute the script without arguments");
      e1.getMessage();
    } catch (NullPointerException e3) {
      e3.getMessage();
      System.out.println(
          "some lines missing in "
              + args[0]
              + " file, add the line \"language=english\" to the "
              + args[0]
              + " file");
    }
  }
예제 #2
0
  private void execute(String sourcePath, String targetPath, String species, String language)
      throws NullPointerException {

    if (language.equals("espanol") || language.equals("español")) {
      System.out.println("bienvenido \n seleccione la opcion que desee");
      System.out.println("1. crear el archivo properties");
      System.out.println("2. convierte archivo .shp a kml, protected areas");
      System.out.println(
          "3. convierte archivo .csv a kml; puntos y poligonos - ocurrencias y chull, chull-buff");
      System.out.println("4. convierte archivo .asc a png, variables bioclimaticas");
      System.out.println("5. convierte archivo .asc a png, distribucion de especies");
      System.out.println("6. realiza todos los procesos anteriores");
      System.out.println(
          "para mas info consulta en la wiki del proyecto http://code.google.com/p/iabin-threats/wiki/HowToBuildITAMaps");
    }
    if (language.equals("english")) {
      System.out.println("welcome \n select the option: ");
      System.out.println("1. create default properties file");
      System.out.println("2. convert file .shp to kml, protected areas");
      System.out.println(
          "3. convert file .csv to kml; points and polygons - ocurrences and chull, chull-buff");
      System.out.println("4. convert file .asc to png, variables bioclimaticas");
      System.out.println("5. convert file .asc to png, species distribution");
      System.out.println("6. performs all the previous tasks");
      System.out.println(
          "for more info visit the project's wiki page at http://code.google.com/p/iabin-threats/wiki/HowToBuildITAMaps");
    }
    String option;
    String horaEmpieza = this.getDateTime();
    if (language.equals("english")) System.out.println("started at : " + horaEmpieza);
    if (language.equals("espanol") || language.equals("español"))
      System.out.println("empieza a las : " + horaEmpieza);
    if (language.equals("english")) System.out.print("please select an option :");
    if (language.equals("espanol") || language.equals("español"))
      System.out.print("por favor seleccione una opcion :");

    Scanner in = new Scanner(System.in);
    option = in.nextLine();

    int opt = Integer.parseInt(option);
    if (opt == 1 || opt == 6) {

      if (language.equals("english")) System.out.println("you selected option :" + option);
      if (language.equals("espanol") || language.equals("español"))
        System.out.println("usted escogio la opcion :" + option);

      // esta sección crea el archivo properties con la configuración por defecto.
      PropertiesGenerator propGen =
          new PropertiesGenerator(targetPath + "default-iabin.properties");
      try {
        propGen.write();
      } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
    } // cierra el case1

    // protected areas shape to kml

    if (opt == 2 || opt == 6) {

      if (language.equals("english")) System.out.println("you selected option :" + option);
      if (language.equals("espanol") || language.equals("español"))
        System.out.println("usted escogio la opcion :" + option);

      String[] shapesID = PropertiesManager.getInstance().getPropertiesAsStringArray("shapes");

      for (String shapeID : shapesID) {
        System.out.println(shapeID);
        String group = PropertiesManager.getInstance().getPropertiesAsString(shapeID + ".group");
        String pathGroup = PropertiesManager.getInstance().getPropertiesAsString(group + ".path");
        String fileName =
            PropertiesManager.getInstance().getPropertiesAsString(shapeID + ".shapefile");
        int[] columnIndexes =
            PropertiesManager.getInstance()
                .getPropertiesAsIntArray(shapeID + ".shape.column.indexes");
        String[] columnName =
            PropertiesManager.getInstance()
                .getPropertiesAsStringArray(shapeID + ".shape.column.names");

        String sourceFile = sourcePath + pathGroup + fileName;
        String targetFile = targetPath + pathGroup + shapeID;
        SortedMap<Integer, String> atributos = new TreeMap<Integer, String>();
        for (int i = 0; i < columnIndexes.length; i++) {
          atributos.put(columnIndexes[i], columnName[i]);
        }
        File file = new File(sourceFile); // loads the shape file to read
        System.out.println("folder of shape file: " + sourceFile);
        System.out.println("file: " + file);
        shp = new Shapefile(file);
        SimpleFeature sf = null;
        FeatureIterator<SimpleFeature> fi = shp.getFeatures();
        final Kml kml2 = new Kml();
        Folder folder = kml2.createAndSetFolder();
        String ruta = targetFile + File.separator + "total-info.kml";
        System.out.println("ruta: " + ruta);

        DecimalFormat formatter = new DecimalFormat("####.####");
        while (fi.hasNext()) { // && count-- > 0) {				
          sf = fi.next();
          Set<Integer> keySet = atributos.keySet();
          String descripcion =
              "<div><h2 align=\"center\"><span>Information Protected Area</span></h2></div><h5><table bgcolor=\"#BCD56C\" border=\"1\" align=\"center\">";

          for (Integer i :
              keySet) { // se crean los titulos de la tabla de la informacion del poligono
            descripcion += "<tr align=\"left\"><th>" + atributos.get(i) + "</th>";
            String contenido = (String) sf.getAttribute(i).toString();
            if (isValidDouble(contenido)) {
              contenido = formatter.format(Double.parseDouble(contenido));
            }

            descripcion += "<td>" + contenido + "</td>";
          }
          // descripcion += "</tr><tr>";
          descripcion += "</tr></table></h5>";

          Placemark placemark = KmlFactory.createPlacemark();
          String estilo = PropertiesManager.getInstance().getPropertiesAsString("style.url");
          // se recorre la lista generando las coordenadas y agregando al folder
          placemark = folder.createAndAddPlacemark(); // se crea el placemark y se añade al folder
          placemark.withName(atributos.get(1)).withDescription(descripcion).withStyleUrl(estilo);
          Point punto = Shapefile.getPointForMarker(sf);
          // se crean las coordenadas y se registran al placemark
          placemark.createAndSetPoint().addToCoordinates(punto.getX(), punto.getY());
        } // fin while
        kml2.setFeature(folder); // se registra el folder al kml

        File dir = new File(targetFile);
        dir.mkdirs();
        // kml.marshal();//se imprime kml en consola
        try {
          kml2.marshal(new File(ruta));
        } catch (FileNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } // se guarda kml en archivo
      }
    } // fin case 2
    // **********************************************************************************************************
    // Esta seccion se encarga de recorrer la carpeta data y cargar los
    // archivos csv para convertir a kml
    // puntos y poligonos - ocurrencias y chull, chull-buff

    if (opt == 3 || opt == 6) {

      if (language.equals("english")) System.out.println("you selected option :" + option);
      if (language.equals("espanol") || language.equals("español"))
        System.out.println("usted escogio la opcion :" + option);

      // se debe agregar properties
      String estilo = PropertiesManager.getInstance().getPropertiesAsString("style.url");
      String estilo1 = PropertiesManager.getInstance().getPropertiesAsString("style1.url");

      File folder = new File(sourcePath + species);
      // *************************************************************************************

      File[] listOfFiles = folder.listFiles();

      int contador = 100;
      for (File s : listOfFiles) {

        if (s.isDirectory()) {

          String ruta =
              folder.getPath() + File.separator + s.getName() + File.separator + s.getName();
          if (contador % 100 == 0) {
            System.out.println("File " + ruta);
            System.gc();
          }
          contador++;

          CsvFile file1 = new CsvFile(ruta + ".csv");
          lista = file1.getLista();

          CsvFile chull = new CsvFile(ruta + "-chull.csv");
          listaChull = chull.getLista();
          CsvFile chullbuff = new CsvFile(ruta + "-chull-buff.csv");
          listaChullBuff = chullbuff.getLista();

          Csv2Point point = new Csv2Point(lista);
          try {
            point.createKML(
                targetPath + species + s.getName() + File.separator,
                s.getName(),
                estilo); // cambiar a properties file
          } catch (FileNotFoundException e) {
            e.printStackTrace();
          }

          Csv2Polygon pol = new Csv2Polygon(listaChull, listaChullBuff, estilo, estilo1);
          try {
            pol.createKMLchull(
                targetPath + species + s.getName() + File.separator,
                s.getName(),
                estilo); // crea kml chull
            pol.createKMLchullbuff(
                targetPath + species + s.getName() + File.separator,
                s.getName(),
                estilo1); // crea kml chull buff

          } catch (FileNotFoundException e) {
            e.printStackTrace();
          }
        }
      }
    } // fin case3

    // bioclim variables
    if (opt == 4 || opt == 6) {

      if (language.equals("english")) System.out.println("you selected option :" + option);
      if (language.equals("espanol") || language.equals("español"))
        System.out.println("usted escogio la opcion :" + option);

      try {
        TileCutter.execute(propertiesFile);
      } catch (IOException e) {
        System.out.println("file not found");
        e.getMessage();
        e.printStackTrace();
      }
    } // fin case 4

    // se crean las imagenes de distribucion de especies a partir de los rasters .asc
    if (opt == 5 || opt == 6) {

      if (language.equals("english")) System.out.println("you selected option :" + option);
      if (language.equals("espanol") || language.equals("español"))
        System.out.println("usted escogio la opcion :" + option);

      if (opt == 5) {

        if (language.equals("english"))
          System.out.println("Do you want to run the script for all species? y/n :");
        if (language.equals("espanol") || language.equals("español"))
          System.out.println("Desea correr el algoritmo para todas las especies? s/n" + option);
        option = in.nextLine();

        if (option.equalsIgnoreCase("n")) {
          if (language.equals("english"))
            System.out.println(
                "Please write the minimum and maximum species directory separated by (-), format: 78465-98750543:");
          if (language.equals("espanol") || language.equals("español"))
            System.out.println(
                "Por favor, indique el codigo de especie minimo y maximo, formato: 78465-98750543");
          option = in.nextLine();
          String[] minMax = option.split("-");
          if (minMax.length == 2) {
            String min = minMax[0];
            String max = minMax[1];
            try {
              TileCutter.createSpeciesDistributionImages(propertiesFile, min, max);
            } catch (IOException e) {
              System.out.println("file not found");
              e.getMessage();
              e.printStackTrace();
            }
          } else {
            if (language.equals("english")) System.out.println("Invalid format!");
            if (language.equals("espanol") || language.equals("español"))
              System.out.println("Formato incorrecto!");
          }
        } else {
          try {
            TileCutter.createSpeciesDistributionImages(propertiesFile, null, null);
          } catch (IOException e) {
            System.out.println("file not found");
            e.getMessage();
            e.printStackTrace();
          }
        }
      } else {
        try {
          TileCutter.createSpeciesDistributionImages(propertiesFile, null, null);
        } catch (NumberFormatException e) {
          System.out.println("format error");
          e.getMessage();
          e.printStackTrace();
        } catch (IOException e) {
          System.out.println("file not found");
          e.getMessage();
          e.printStackTrace();
        }
      }
    } // fin case 5

    String horaTermina = this.getDateTime();
    if (language.equals("espanol") || language.equals("español"))
      System.out.println(
          "empezo a las : " + horaEmpieza + "\r\n" + " finalizo a las : " + horaTermina);
    if (language.equals("english"))
      System.out.println("started at : " + horaEmpieza + "\r\n" + " ended at : " + horaTermina);
  } // fin switch