using System.Collections.Generic;
using NetTopologySuite.Operation.Distance;
public static void Main()
var gf32632 = NetTopologySuite.NtsGeometryServices.Instance.CreateGeometryFactory(32632);
var journeyPatternCoordinates = new List<NetTopologySuite.Geometries.Coordinate>()
var serviceLinkCoords = new List<NetTopologySuite.Geometries.Coordinate>();
var pntStart = gf32632.CreatePoint(new NetTopologySuite.Geometries.Coordinate(133, 88));
var pntEnd = gf32632.CreatePoint(new NetTopologySuite.Geometries.Coordinate(155, 41));
double minDistanceStart = double.MaxValue;
for (int k = 1; k < journeyPatternCoordinates.Count; k++)
var prev = journeyPatternCoordinates[k- 1];
var curr = journeyPatternCoordinates[k];
var pairLine = gf32632.CreateLineString(
new NetTopologySuite.Geometries.Coordinate[]
var distOp = new DistanceOp(pairLine, pntStart);
var distance = distOp.Distance();
var closestPt = distOp.NearestPoints();
if (distance < minDistanceStart)
minDistanceStart = distance;
Console.WriteLine("breakIndexStart = " + breakIndexStart);
double minDistanceEnd = double.MaxValue;
for (int k = breakIndexEnd + 1; k < journeyPatternCoordinates.Count; k++)
var prev = journeyPatternCoordinates[k - 1];
var curr = journeyPatternCoordinates[k];
var pairLine = gf32632.CreateLineString(
new NetTopologySuite.Geometries.Coordinate[]
var distOp = new DistanceOp(pairLine, pntEnd);
var distance = distOp.Distance();
var closestPt = distOp.NearestPoints();
if (distance < minDistanceEnd)
minDistanceEnd = distance;
Console.WriteLine("breakIndexEnd = " + breakIndexEnd);
serviceLinkCoords = new List<NetTopologySuite.Geometries.Coordinate>() { pntStart.Coordinate };
serviceLinkCoords.AddRange(journeyPatternCoordinates.Skip(breakIndexStart).Take(breakIndexEnd - breakIndexStart));
serviceLinkCoords.Add(pntEnd.Coordinate);
foreach(var s in serviceLinkCoords)