Package com.vividsolutions.jts.operation.linemerge

Examples of com.vividsolutions.jts.operation.linemerge.LineMerger


  }

  void run() throws Exception {
    Collection lineStrings = getData();
   
    LineMerger lineMerger = new LineMerger();
    lineMerger.add(lineStrings);
    Collection mergedLineStrings = lineMerger.getMergedLineStrings();
   
    System.out.println("Lines formed (" + mergedLineStrings.size() + "):");
    System.out.println(mergedLineStrings);
  }
View Full Code Here


    if (GeometryCollection.class.equals(adaptTo)) {
      return gf.createGeometryCollection(new Geometry[] { inputGeom });
    }

    if (MultiLineString.class.equals(adaptTo) || LineString.class.equals(adaptTo)) {
      LineMerger merger = new LineMerger();
      merger.add(inputGeom);
      Collection<? extends LineString> mergedLineStrings = merger.getMergedLineStrings();
      ArrayList<LineString> lineList = new ArrayList<LineString>(mergedLineStrings);
      LineString[] lineStrings = lineList.toArray(new LineString[mergedLineStrings.size()]);

      assert lineStrings.length >= 1;
View Full Code Here

   */
  private Geometry unionLines(Geometry withGeometry) {

    Geometry result = null;

    LineMerger merger = new LineMerger();

    merger.add(mergeGeometry);
    merger.add(withGeometry);

    Collection<? extends LineString> mergedLineStrings = merger.getMergedLineStrings();

    Iterator<? extends LineString> it = mergedLineStrings.iterator();

    if (mergedLineStrings.size() == 1) {
      result = it.next();
View Full Code Here

                try {
                    Feature feature = baseFeatureReader.next();
                    String uniqueKey = (String)feature.getAttribute(featureUniqueKey);
                    //LOG.info("Read feature " + featureUniqueKey + ": " + uniqueKey);
                    if (!uniqueFeatureMap.containsKey(uniqueKey)) uniqueFeatureMap.put(uniqueKey, feature);
                    if (!uniqueFeatureMerger.containsKey(uniqueKey)) uniqueFeatureMerger.put(uniqueKey, new LineMerger());
                    LineMerger merger = uniqueFeatureMerger.get(uniqueKey);
                    merger.add(feature.getDefaultGeometry());
                } catch (NoSuchElementException e) {
                    LOG.warning("Error reading feature: " + e);
                } catch (IllegalAttributeException e) {
                    LOG.warning("Error reading feature: " + e);
                }
            }
        } catch (IOException e) {
            LOG.warning("Error reading features: " + e);
        }
        for (String uniqueKey : uniqueFeatureMerger.keySet()) {
            //LOG.info("Get merged: " + uniqueKey);
            Feature feature = uniqueFeatureMap.get(uniqueKey);
            LineMerger merger = uniqueFeatureMerger.get(uniqueKey);
            try {
                feature.setDefaultGeometry(new MultiLineString((LineString[])merger.getMergedLineStrings().toArray(new LineString[0]), feature.getDefaultGeometry().getFactory()));
            } catch (IllegalAttributeException e) {
                LOG.warning("Prolem setting new geometry: " + e);
            }
        }
        //LOG.info("Features="+uniqueFeatureMap.size());
View Full Code Here

                union = union.union(l);
            }
        }
       
        // merge segments
        LineMerger merger = new LineMerger();
        merger.add(union);
        union = gf.buildGeometry(merger.getMergedLineStrings());
       
        return JTSUtils.getLineStrings(union);
    }
View Full Code Here

*/
public class MergeLinesPlugIn extends AbstractPlugIn {
  private static String LAYER_NAME = "Merged Lines";

  public boolean execute(PlugInContext context) throws Exception {
    LineMerger lineMerger = new LineMerger();
    lineMerger.add(node(extractLineStrings(
        context.getLayerViewPanel().getSelectionManager()
                             .getSelectedItems())));
    if (context.getLayerManager().getLayer(LAYER_NAME) != null) {
      context.getLayerManager().remove(context.getLayerManager().getLayer(LAYER_NAME));
    }
    Layer layer = context.addLayer(StandardCategoryNames.WORKING, LAYER_NAME,
      FeatureDatasetFactory.createFromGeometry(
        lineMerger.getMergedLineStrings()));
    layer.addStyle(new ArrowLineStringEndpointStyle.SolidEnd());
    layer.addStyle(new ArrowLineStringEndpointStyle.FeathersStart());
    return true;
  }
View Full Code Here

      LineString l = e.getGeometry().toGeometry(this.geomFactory);
      edges.add(l);
    }

    // merge
    LineMerger lineMerger = new LineMerger();
    lineMerger.add(edges);
    LineString merge = (LineString)lineMerger.getMergedLineStrings().iterator().next();
   
    if (merge.isRing()) {
      LinearRing lr = new LinearRing(merge.getCoordinateSequence(), this.geomFactory);
      Polygon concaveHull = new Polygon(lr, null, this.geomFactory);
      return concaveHull;
View Full Code Here

        return poly.getFactory().createMultiPolygon((Polygon[]) polys.toArray(new Polygon[1]));
    }

    private List<LineString> mergeLines(Collection<LineString> lines) {
        LineMerger lm = new LineMerger();
        lm.add(lines);
        // build merged lines
        List<LineString> merged = new ArrayList<LineString>(lm.getMergedLineStrings());

        if (merged.size() == 0) {
            return null; // shouldnt happen
        } else if (merged.size() == 1) { // simple case - no need to continue
                                         // merging
View Full Code Here

            }

            FeatureIterator<Feature> featureIterator = null;
            Feature firstFeature = null;
            try {
                LineMerger lineMerger = new LineMerger();
                if (toMeasure.doubleValue() > fromMeasure.doubleValue()) {
                    featureIterator = featureCollection.features();
                    while (featureIterator.hasNext()) {
                        Feature feature = featureIterator.next();
                        if (firstFeature == null)
                            firstFeature = feature;
                        Double featureFromMeasure = (Double) feature.getProperty(fromMeasureAttb)
                                .getValue();
                        Double featureToMeasure = (Double) feature.getProperty(toMeasureAttb)
                                .getValue();

                        if (fromMeasure < featureToMeasure && toMeasure > featureFromMeasure) {
                            try {
                                if (fromMeasure <= featureFromMeasure
                                        && toMeasure >= featureToMeasure) {
                                    lineMerger.add((Geometry) feature.getDefaultGeometryProperty()
                                            .getValue());
                                } else if (fromMeasure > featureFromMeasure
                                        && toMeasure < featureToMeasure) {
                                    LengthIndexedLine lengthIndexedLine = new LengthIndexedLine(
                                            (Geometry) feature.getDefaultGeometryProperty()
                                                    .getValue());
                                    double featureLength = featureToMeasure - featureFromMeasure;
                                    double startOffset = fromMeasure - featureFromMeasure;
                                    double stopOffset = toMeasure - featureFromMeasure;
                                    double calcLength = ((Geometry) feature
                                            .getDefaultGeometryProperty().getValue()).getLength();
                                    if (calcLength == 0 || featureLength == 0)
                                        continue;
                                    Geometry extracted = lengthIndexedLine.extractLine(startOffset
                                            * calcLength / featureLength, stopOffset * calcLength
                                            / featureLength);
                                    if (!extracted.isEmpty())
                                        lineMerger.add(extracted);
                                } else if (fromMeasure > featureFromMeasure) {
                                    LengthIndexedLine lengthIndexedLine = new LengthIndexedLine(
                                            (Geometry) feature.getDefaultGeometryProperty()
                                                    .getValue());
                                    double featureLength = featureToMeasure - featureFromMeasure;
                                    double startOffset = fromMeasure - featureFromMeasure;
                                    double calcLength = ((Geometry) feature
                                            .getDefaultGeometryProperty().getValue()).getLength();
                                    if (calcLength == 0 || featureLength == 0)
                                        continue;
                                    Geometry extracted = lengthIndexedLine.extractLine(startOffset
                                            * calcLength / featureLength, calcLength);
                                    if (!extracted.isEmpty())
                                        lineMerger.add(extracted);
                                } else {
                                    LengthIndexedLine lengthIndexedLine = new LengthIndexedLine(
                                            (Geometry) feature.getDefaultGeometryProperty()
                                                    .getValue());
                                    double featureLength = featureToMeasure - featureFromMeasure;
                                    double stopOffset = toMeasure - featureFromMeasure;
                                    double calcLength = ((Geometry) feature
                                            .getDefaultGeometryProperty().getValue()).getLength();
                                    if (calcLength == 0 || featureLength == 0)
                                        continue;
                                    Geometry extracted = lengthIndexedLine.extractLine(0,
                                            stopOffset * calcLength / featureLength);
                                    if (extracted.isEmpty() || extracted.getLength() == 0.0) {
                                        LOGGER.info("Empty segment: featureFromMeasure="
                                                + featureFromMeasure + " featureToMeasure:"
                                                + featureToMeasure + " toMeasure:" + toMeasure
                                                + " fromMeasure:" + fromMeasure);
                                    } else {
                                        lineMerger.add(extracted);
                                    }
                                }
                            } catch (Exception e) {
                                LOGGER.warning("Error merging line strings: " + e
                                        + " featureFromMeasure=" + featureFromMeasure
                                        + " featureToMeasure:" + featureToMeasure + " toMeasure:"
                                        + toMeasure + " fromMeasure:" + fromMeasure);
                            }
                        }
                    }
                    results.add(createTargetFeature(firstFeature, (SimpleFeatureType) firstFeature
                            .getType(), new MultiLineString((LineString[]) lineMerger
                            .getMergedLineStrings().toArray(new LineString[0]), geometryFactory)));
                }
            } finally {
                if (featureIterator != null)
                    featureIterator.close();
View Full Code Here

        while (en.hasMoreElements())
        {
            Object key  = en.nextElement();
            ArrayList lines = (ArrayList) ht.get(key)// list of geometry
            count_orig += lines.size();
            LineMerger lm = new LineMerger();
            lm.add(lines);
          Collection merged = lm.getMergedLineStrings(); //merged lines
          count_new += merged.size();
          lines.clear();
          lines.addAll(merged);
        }
        System.out.println("merged "+count_orig+" lines into "+count_new+" lines.");
View Full Code Here

TOP

Related Classes of com.vividsolutions.jts.operation.linemerge.LineMerger

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.