Esempio n. 1
0
  /**
   * Read the shapefile
   *
   * @param shapefile shapefile
   * @param bbox _more_
   * @return List of point sets
   */
  private List doRead(EsriShapefile shapefile, Rectangle2D bbox) {

    this.shapefile = shapefile;
    List features = shapefile.getFeatures();
    java.util.Iterator si = features.iterator();
    dbFile = shapefile.getDbFile();
    List s0 = new ArrayList();

    int pointCnt = 0;
    for (int i = 0; si.hasNext(); i++) {
      EsriShapefile.EsriFeature gf = (EsriShapefile.EsriFeature) si.next();
      SampledSet mapLines = gf.getMapLines(bbox);
      pointCnt += gf.getPointCount();
      if (mapLines != null) {
        s0.add(mapLines);
      }
    }
    return s0;
  }
  /**
   * @param request _more_
   * @param entry _more_
   * @param map _more_
   * @return _more_
   */
  @Override
  public boolean addToMap(Request request, Entry entry, MapInfo map) {
    try {
      if (!entry.isFile()) {
        return true;
      }
      // TODO: stream through the shapes
      EsriShapefile shapefile = new EsriShapefile(entry.getFile().toString());
      List features = shapefile.getFeatures();
      int totalPoints = 0;
      int MAX_POINTS = 10000;
      for (int i = 0; i < features.size(); i++) {
        if (totalPoints > MAX_POINTS) {
          break;
        }
        EsriShapefile.EsriFeature gf = (EsriShapefile.EsriFeature) features.get(i);
        java.util.Iterator pi = gf.getGisParts();
        while (pi.hasNext()) {
          if (totalPoints > MAX_POINTS) {
            break;
          }
          GisPart gp = (GisPart) pi.next();
          double[] xx = gp.getX();
          double[] yy = gp.getY();
          List<double[]> points = new ArrayList<double[]>();
          for (int ptIdx = 0; ptIdx < xx.length; ptIdx++) {
            points.add(new double[] {yy[ptIdx], xx[ptIdx]});
          }
          totalPoints += points.size();
          if (points.size() > 1) {
            map.addLines("", points);
          } else if (points.size() == 1) {
            map.addMarker("id", points.get(0)[0], points.get(0)[1], null, "");
          }
        }
      }
    } catch (Exception exc) {
      throw new RuntimeException(exc);
    }

    return false;
  }