/** * 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; }