All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.api.resource.CoordinateArrayListSequence Maven / Gradle / Ivy

There is a newer version: 2.5.0
Show newest version
package org.opentripplanner.api.resource;

import java.util.ArrayList;
import java.util.Arrays;

import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.CoordinateSequence;
import org.locationtech.jts.geom.Envelope;

/** An instance of CoordinateSequence that can be efficiently extended */
public class CoordinateArrayListSequence implements CoordinateSequence, Cloneable {
    ArrayList coordinates;
    
    public CoordinateArrayListSequence() {
        coordinates = new ArrayList();
    }
    
    @SuppressWarnings("unchecked")
    public CoordinateArrayListSequence(ArrayList coordinates) {
        this.coordinates = (ArrayList) coordinates.clone(); 
    }

    @Override
    public Envelope expandEnvelope(Envelope env) {
        for (Coordinate c : coordinates) {
            env.expandToInclude(c);
        }
        return env;
    }

    @SuppressWarnings("unchecked")
    @Override
    public CoordinateArrayListSequence clone() {
        CoordinateArrayListSequence clone;
        try {
            clone = (CoordinateArrayListSequence) super.clone();
        } catch (CloneNotSupportedException e) {
            /* never happens since super is Object */
            throw new RuntimeException(e);
        }
        clone.coordinates = (ArrayList) coordinates.clone();
        return clone;
    }

    
    @Override
    public Coordinate getCoordinate(int i) {
        return coordinates.get(i);
    }

    @Override
    public void getCoordinate(int index, Coordinate coord) {
        Coordinate internalCoord = coordinates.get(index);
        coord.x = internalCoord.x;
        coord.y = internalCoord.y;
    }

    @Override
    public Coordinate getCoordinateCopy(int i) {
        return new Coordinate(coordinates.get(i));
    }

    @Override
    public int getDimension() {
        return 2;
    }

    @Override
    public double getOrdinate(int index, int ordinateIndex) {
        // TODO Auto-generated method stub
        return ordinateIndex == 0 ? coordinates.get(index).x : coordinates.get(index).y; 
    }

    @Override
    public double getX(int index) {
        return coordinates.get(index).x;
    }

    @Override
    public double getY(int index) {
        return coordinates.get(index).y;
    }

    @Override
    public void setOrdinate(int index, int ordinateIndex, double value) {
        switch(ordinateIndex) {
        case 0:
            coordinates.get(index).x = value;
            break;
        case 1:
            coordinates.get(index).y = value;
            break;
        default:
            throw new UnsupportedOperationException(); 
        }
    }

    @Override
    public int size() {
        return coordinates.size();
    }

    @Override
    public Coordinate[] toCoordinateArray() {
        return coordinates.toArray(new Coordinate[0]);
    }

    public void extend(Coordinate[] newCoordinates) {
        coordinates.addAll(Arrays.asList(newCoordinates));
    }

    public void extend(Coordinate[] newCoordinates, int start) {
        extend(newCoordinates, start, newCoordinates.length);
    }
    
    public void extend(Coordinate[] newCoordinates, int start, int end) {
        coordinates.addAll(Arrays.asList(newCoordinates).subList(start, end));
    }

    public void add(Coordinate newCoordinate) {
        coordinates.add(newCoordinate);
    }

    public void clear() {
    	coordinates = new ArrayList();
    }

    @Override
    public CoordinateSequence copy() {
        CoordinateArrayListSequence clone;
        try {
            clone = (CoordinateArrayListSequence) super.clone();
        } catch (CloneNotSupportedException e) {
            /* never happens since super is Object */
            throw new RuntimeException(e);
        }
        clone.coordinates = (ArrayList) coordinates.clone();
        return clone;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy