示例#1
0
 /**
  * Transforms a LinearRing. The transformation of a LinearRing may result in a coordinate sequence
  * which does not form a structurally valid ring (i.e. a degnerate ring of 3 or fewer points). In
  * this case a LineString is returned. Subclasses may wish to override this method and check for
  * this situation (e.g. a subclass may choose to eliminate degenerate linear rings)
  *
  * @param geom the ring to simplify
  * @param parent the parent geometry
  * @return a LinearRing if the transformation resulted in a structurally valid ring
  * @return a LineString if the transformation caused the LinearRing to collapse to 3 or fewer
  *     points
  */
 protected Geometry transformLinearRing(LinearRing geom, Geometry parent) {
   CoordinateSequence seq = transformCoordinates(geom.getCoordinateSequence(), geom);
   if (seq == null) return factory.createLinearRing((CoordinateSequence) null);
   int seqSize = seq.size();
   // ensure a valid LinearRing
   if (seqSize > 0 && seqSize < 4 && !preserveType) return factory.createLineString(seq);
   return factory.createLinearRing(seq);
 }
示例#2
0
 /**
  * Creates a MultiPoint using the given CoordinateSequence. A a null or empty CoordinateSequence
  * will create an empty MultiPoint.
  *
  * @param coordinates a CoordinateSequence (possibly empty), or <code>null</code>
  * @return a MultiPoint object
  */
 public MultiPoint createMultiPoint(CoordinateSequence coordinates) {
   if (coordinates == null) {
     return createMultiPoint(new Point[0]);
   }
   Point[] points = new Point[coordinates.size()];
   for (int i = 0; i < coordinates.size(); i++) {
     points[i] = createPoint(coordinates.getCoordinate(i));
   }
   return createMultiPoint(points);
 }
 private CoordinateSequence readCoordinateSequence(int size) throws IOException {
   CoordinateSequence seq = csFactory.create(size, inputDimension);
   int targetDim = seq.getDimension();
   if (targetDim > inputDimension) targetDim = inputDimension;
   for (int i = 0; i < size; i++) {
     readCoordinate();
     for (int j = 0; j < targetDim; j++) {
       seq.setOrdinate(i, j, ordValues[j]);
     }
   }
   return seq;
 }
示例#4
0
 /**
  * Creates a {@link MultiPoint} using the points in the given {@link CoordinateSequence}. A <code>
  * null</code> or empty CoordinateSequence creates an empty MultiPoint.
  *
  * @param coordinates a CoordinateSequence (possibly empty), or <code>null</code>
  * @return a MultiPoint geometry
  */
 public MultiPoint createMultiPoint(CoordinateSequence coordinates) {
   if (coordinates == null) {
     return createMultiPoint(new Point[0]);
   }
   Point[] points = new Point[coordinates.size()];
   for (int i = 0; i < coordinates.size(); i++) {
     CoordinateSequence ptSeq =
         getCoordinateSequenceFactory().create(1, coordinates.getDimension());
     CoordinateSequences.copy(coordinates, i, ptSeq, 0, 1);
     points[i] = createPoint(ptSeq);
   }
   return createMultiPoint(points);
 }
示例#5
0
  public Geometry densify(double segLength) {
    newCoords = new CoordinateList();

    CoordinateSequence seq = inputLine.getCoordinateSequence();

    Coordinate p0 = new Coordinate();
    Coordinate p1 = new Coordinate();
    seq.getCoordinate(0, p0);
    newCoords.add(new Coordinate(p0));

    for (int i = 0; i < seq.size() - 1; i++) {
      seq.getCoordinate(i, p0);
      seq.getCoordinate(i + 1, p1);
      densify(p0, p1, segLength);
    }
    Coordinate[] newPts = newCoords.toCoordinateArray();
    return inputLine.getFactory().createLineString(newPts);
  }
 /**
  * Creates a new sequence based on a deep copy of the given {@link CoordinateSequence}.
  *
  * @param coordSeq the coordinate sequence that will be copied.
  */
 public DefaultCoordinateSequence(CoordinateSequence coordSeq) {
   coordinates = new Coordinate[coordSeq.size()];
   for (int i = 0; i < coordinates.length; i++) {
     coordinates[i] = coordSeq.getCoordinateCopy(i);
   }
 }
 private CoordinateSequence readCoordinateSequenceLineString(int size) throws IOException {
   CoordinateSequence seq = readCoordinateSequence(size);
   if (isStrict) return seq;
   if (seq.size() == 0 || seq.size() >= 2) return seq;
   return CoordinateSequences.extend(csFactory, seq, 2);
 }