**1)** Try this: public static double calculateLengthAlongLineString(LineString theLine, Coordinate coordinateOnTheLine){ GeometryFactory factory = new GeometryFactory(); double length = 0; // create point to check for intersection with line Point pointOnTheLine = factory.createPoint(coordinateOnTheLine); Coordinate[] theLineCoordinates = theLine.getCoordinates(); // iterate over linestring and create sub-lines for each coordinate pair for(int i = 1; i < theLineCoordinates.length; i++){ LineString currentLine = factory.createLineString(new Coordinate[]{theLineCoordinates[i-1], theLineCoordinates[i]}); // check if coordinateOnTheLine is on currentLine if(currentLine.intersects(pointOnTheLine)){ // create new currentLine with coordinateOnTheLine as endpoint and calculate length currentLine = factory.createLineString(new Coordinate[]{theLineCoordinates[i-1], coordinateOnTheLine}); length += currentLine.getLength(); // return result length return length; } length += currentLine.getLength(); } // coordinate was not on the line -> return length of complete linestring... return length; } This approach is similar to what you already suggested. In this approach I do not replace any coordinates before calculating the length. Each LineString segment is checked for intersection with the point (coordinate) and then the length is summed up. **2)** Not to my knowledge.